360安全卫士hookport.sys简单逆向——基础
来源:互联网 发布:咖啡机推荐 知乎 编辑:程序博客网 时间:2024/06/01 09:34
Hookport.sys是360安全卫士对系统进行挂钩操作的核心模块。其中主要方式对SSDT和shadowSSDT安装钩子函数。但其使用了一种较为特殊的实现方法,使众多常规ARK软件很难检测出360安全卫士所的钩子。由于此方法对系统表操作很少,比较稳定。
Hookport.sys只提供了最为基本的过滤操作和桩函数,本身并没有实现策略部分。策略部分由360SelfProtection.sys实现,并通过设备扩展进行沟通。
本报告简要解释了360安全卫士所使用的挂钩方法,给出了其中的一些关键数据结构和使用方法。
挂钩的初始化工作
SSDT内存位置的确定
由于SSDT是内核的导出表,所以确定较为方便。可以直接使用MmGetSystemRoutineAddress函数。但由于系统中其它安全软件可能对此函数进行挂钩,所以360采用了更加稳妥的方式。
首先,向ZwQuerySystemInformation传递0x0B号参数,获得SYSTEM_MODULE_INFORMATION结构数组。数组的第一个元素就是内核模块,取得内核模块的imageBase和imageSize。
按照PE格式解析映射入内存的系统内核,从导出表中找到KeServiceDescriptorTable的地址,进行重定位后得到SSDT表在内存中的真实地址。
MyGetFuncAddrFromKrnl
上述这个过程被360封装在MyGetFuncAddrFromKrnl函数中,并在以后被多次调用。
函数原型如下:
int __stdcall MyGetFuncAddrFromKrnl(PUNICODE_STRING funcName)
funcName为内核导出函数的名称
返回值为函数地址或NULL。(详细分析请参考IDB文件)
shadowSSDT内存位置的确定
1. 使用MyGetFuncAddrFromKrnl获得 KeAddSystemServiceTable函数地址。
其反汇编代码如下:
80596542 8bff mov edi,edi
80596544 55 push ebp
80596545 8bec mov ebp,esp
80596547 837d1803 cmp dword ptr [ebp+18h],3
8059654b 7760 ja nt!KeAddSystemServiceTable+0x6b (805965ad)
8059654d 8b4518 mov eax,dword ptr [ebp+18h]
80596550 c1e004 shl eax,4
80596553 83b88031558000 cmp dword ptr nt!KeServiceDescriptorTable (80553180)[eax],0
8059655a 7551 jne nt!KeAddSystemServiceTable+0x6b (805965ad)
8059655c 8d8840315580 lea ecx,nt!KeServiceDescriptorTableShadow (80553140)[eax]
80596562 833900 cmp dword ptr [ecx],0
80596565 7546 jne nt!KeAddSystemServiceTable+0x6b (805965ad)
80596567 837d1801 cmp dword ptr [ebp+18h],1
2. 搜索8D 88 指令,并去除后4字节:
注意红色代码:这里出现了KeServiceDescriptorTableShadow的地址,对应的机器码为
8D 88 40 31 55 80 ,从KeAddSystemServiceTable开始搜索8D 88,紧接着的4字节数据就是shadowSSDT在内存中的地址。
- 360安全卫士hookport.sys简单逆向——基础
- 360安全卫士hookport.sys简单逆向——基础
- 360安全卫士hookport.sys简单逆向——基础
- 360安全卫士hookport.sys简单逆向
- 360安全卫士hookport.sys简单逆向
- 360安全卫士hookport.sys简单逆向
- Android逆向基础笔记—初识逆向
- Android逆向基础笔记—初识逆向
- python 基础 —— sys.path 与 sys.path.append
- 安全卫士——Day01_1
- 安全卫士——Day01_2
- 安全卫士——Day02_1
- 安全卫士——Day02_2
- 安全卫士——Day03_1
- 安全卫士——Day03_2
- 安全卫士——Day04_1
- 安全卫士——Day04_2
- 安全卫士——Day05_1
- Git 使用vi或vim命令打开、关闭、保存文件
- Advanced Programming in Unix Environment Episode 2
- jdk8 HotSpot内存模型
- Why does getView return wrong convertView objects on BaseAdapter?
- Note:C# Socket 连接域名
- 360安全卫士hookport.sys简单逆向——基础
- HTML中对VALUE属性的理解
- POJ 1991 Turning in Homework 区间DP
- LocalDB的使用详解
- <统计学习方法>5 逻辑斯蒂回归与最大熵模型
- CvMat,Mat和IplImage之间的转化和拷贝
- 嵌入式Linux驱动笔记(十二)------通俗易懂式分析了解spi框架
- 多个数组间元素排列组合问题求解(Java实现) 标签: 递归排列组合循环
- python 深拷贝&浅拷贝