360安全卫士hookport.sys简单逆向——基础

360安全卫士hookport.sys简单逆向——基础

2009年10月23日 星期五 17:09

hookport.sys模块作用

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在内存中的地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值