通过挂钩NtCreateSection监控可执行模块
2013-11-19 15:49
537 查看
通过挂钩 NtCreateSection 监控可执行模块
在 Win32 中,我们使用 CreateFileMapping 来创建映射文件对象,函数原型如下:
这个函数会调用 Native Api(Ntdll.dll) 中的 ZwCreateSection ( NtCreateSection )函数,而后者又通过系统调用 Ntoskrnl.exe 中的 NtCreateSection 函数,其函数原型如下:
不仅是用户创建的映射文件, Windows 加载所有的可执行模块,包括 EXE 文件、 DLL 文件等都使用了此函数(博文《使用 Native Api 创建进程》就曾调用),只是在参数 SectionPageProtection 和 AllocationAttributes 与普通的映射文件有所区别:
根据这个特点,我们可以通过挂钩 NtCreateSection 函数来截获所有将要加载的可执行模块的文件名称(关于如何获取文件名称,可以参看博文《获取文件对象的名称》)反馈给用户。用户根据文件路径、文件的 MD5 或其他信息来判断是否允许该模块的加载。
参考文章:
1. Hooking the native API and controlling process creation on a system-wide basis
( http://www.codeproject.com/KB/system/soviet_protector.aspx )
2. 天书夜读
在 Win32 中,我们使用 CreateFileMapping 来创建映射文件对象,函数原型如下:
HANDLE CreateFileMapping( HANDLE hFile, // handle to file to map LPSECURITY_ATTRIBUTES lpFileMappingAttributes, // optional security attributes DWORD flProtect, // protection for mapping object DWORD dwMaximumSizeHigh, // high-order 32 bits of object size DWORD dwMaximumSizeLow, // low-order 32 bits of object size LPCTSTR lpName // name of file-mapping object ); |
NTSTATUS NtCreateSection( OUT PHANDLE SectionHandle , IN ACCESS_MASK DesiredAccess , IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER MaximumSize OPTIONAL, IN ULONG SectionPageProtection , IN ULONG AllocationAttributes , IN HANDLE FileHandle OPTIONAL ); |
根据这个特点,我们可以通过挂钩 NtCreateSection 函数来截获所有将要加载的可执行模块的文件名称(关于如何获取文件名称,可以参看博文《获取文件对象的名称》)反馈给用户。用户根据文件路径、文件的 MD5 或其他信息来判断是否允许该模块的加载。
(AllocationAttributes == 0X1000000) && (SectionPageProtection & PAGE_EXECUTE) |
1. Hooking the native API and controlling process creation on a system-wide basis
( http://www.codeproject.com/KB/system/soviet_protector.aspx )
2. 天书夜读
相关文章推荐
- 通过挂钩NtCreateSection监控可执行模块
- 通过挂钩NtCreateSection监控可执行模块
- 通过挂钩NtCreateSection监控可执行模块
- 内核编程之SSDTHook(3)Hook NtCreateSection监控所有可执行模块加载
- 通过HookNtCreateSection 动态监控驱动sys、动态链接库dll、可执行文件exe加载
- 通过HookNtCreateSection 动态监控驱动sys、动态链接库dll、可执行文件exe加载
- 通过HookNtCreateSection 动态监控驱动sys、动态链接库dll、可执行文件exe加载
- 使用Spring定时任务并且通过AOP监控任务执行情况
- android下如何通过jni监控wifi网络连接、dhcpcd执行和power电源控制
- 浅析android下如何通过jni监控wifi网络连接、dhcpcd执行和power电源控制
- python通过getopt模块获取执行命令参数
- 浅析android下如何通过jni监控wifi网络连接、dhcpcd执行和power电源控制
- 通过Profiles查看create语句的执行时间消耗 (转)
- python 通过paramiko模块批量执行ssh命令
- 通过Spark Rest 服务监控Spark任务执行情况
- python通过getopt模块如何获取执行的命令参数详解
- IIS上执行通过python的CGI模块执行python脚本
- 通过抓包获取跳转url并通过dnspython模块查询监控服务是否正常
- 浅析android下如何通过jni监控wifi网络连接、dhcpcd执行和power电源控制
- [MySQL] 通过Profiles查看create语句的执行时间消耗