打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
360安全卫士hookport.sys简单逆向——MyHookMgr数据结构
MyHookMgr数据结构

MyHookMgr是一个大小为0x5DDC的巨大结构,是360挂钩中的一个重要数据,它记录了挂钩函数的原地址、代理函数地址及相应函数是否挂钩的标志位。

它的数据结构是这样的:

struct MyHookMgr{

         DWORD ssdtSize;                                                  //ssdt大小

         DWORD ssdtOriginFunc[1001];                         //ssdt对应的原函数地址

DWORD ssdtFakeFunc[1001];                            //ssdt对应的代理函数地址

DWORD shadowSsdtOriginFunc[1001];           //ssdtShadow原函数地址

DWORD shadowSsdtFakeFunc[1001];              //ssdtShadow代理函数地址

DWORD ssdtSwitch[1001];                                 //ssdt代理函数开关

DWORD shadowSsdtSwitch [1001];                  //ssdtShadow代理函数开关

};

ssdtSize是ssdt的大小,这个域被用的并不多,这里不做过多解释。
SsdtOriginFunc和shadowSsdtOriginFunc数组分别包含了两个表中所有的原函数地址。但这个域在初始化时并没有被填写,在过滤函数真正开始工作时才逐渐被代理函数填写完毕。
ssdtFakeFunc和shadowSsdtFakeFunc是对应的代理函数表,初始化时被填写。
ssdtSwitch和shadowSsdtSwitch是代理函数开关,为1时代表函数被挂载,为0时直接执行原始函数,不进行过滤,初始化时所有开关均置0。
结构中的6个数组都是以ssdt编号作为索引的,由于win7的ssdtShadow表函数最多——827个,所以这里使用了足够大的数组保证稳定,当然这里浪费了一些内存。

关于SSDT编号的获取有两种方法,对于导出函数,因为其形式都如:

ntdll!ZwSetEvent:

7c92e570 b8db000000      mov     eax,0DBh             ;0DBh就是ssdt编号

7c92e575 ba0003fe7f     mov     edx,offsetSharedUserData!SystemCallStub (7ffe0300)

7c92e57a ff12           call    dword ptr [edx]

7c92e57c c20800         ret     8

7c92e57f 90              nop


从第一条指令中就可以读取ssdt索引了。
对于未导出函数360使用了根据操作系统进行硬编码的方式。(详情见IDB文件)


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
城里城外看SSDT
【Hook技术】64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇)
DLL中调用约定和名称修饰(二)
高中函数:利用原函数的定义域求新函数的定义域,需要注意什么?
考研数学:一道典型定积分的计算问题
数学学得好不好?就看函数画得好不好!下面...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服