首页
论坛
课程
招聘
[分享]对百度杀毒软件hook的一点分析[更1]
2013-4-11 15:40 8713

[分享]对百度杀毒软件hook的一点分析[更1]

2013-4-11 15:40
8713
求职: qq->1815349357[DeDf]

程序开始的时候,建立如下一个表:

v7 0x2154 ---- Bhbase+A770
+0  *MmUserProbeAddress      4B
+4  ServiceTableBase         4B
+8  NumberOfServices         4B
+c  Win32kApiTable           4B
+10 NumberOfWin32kApi        4B
+14 p_characteristic_KiFastCallEntry   4B KiFastCallEntry+0xe7
+18 p_characteristic_KiFastCallEntry+8 4B
+1C characteristic_KiFastCallEntry     8B
+24 KeServiceDescriptorTable 4B
+28 Ntoskrnl_ImageBase       4B
+2C Ntoskrnl_ImageSize       4B
+30 win32k_ImageBase         4B
+34 win32k_ImageSize         4B
+38 PID_csrss.exe            4B
+3C KiFastCallEntry_characteristic_Exist 1B
+3D is_PID_winlogon_csrss_0  1B
+40 HaveHooked==1 else==2 Init==0   4B
+44 OSversionI               4B
+48 pHookInfo[41]            4B
+154 pHookInfo[2][1024]      4B

HookInfo 0x428 ---- dynamic
+0  HookTable.Hook           4B
+4  -1                       4B
+8  pwch_FunctionName        4B
+C  Index_HookTable          4B
+10 Offset_diffOS            4B
+14 pRealSystemRoutine       4B
+18 It_Filter_Function       4B
+20 sub_10650                1B

HookTable 0x44 ---- Bhbase+8EE8
+0                           4B
+4  pwch_FunctionName(NULL)  4B
+8  It_Filter_Function       4B
+C  Offset_diffOS[13]        4B*13
+40 Index_HookTable          4B

首先SSDT hook ZwSetEvent,然后插入一个假Event,在Its_ZwSetEvent函数中判断该假Event,从栈里找到它在Caller(KiFastCallEntry)中的Return地址,然后从该地址向前搜索(8BFC3B35 XXXXXXXX 0F83),这里便是Hook点。随后移除ZwSetEvent的hook。

HOOK KiFastCallEntry的时候,多核的话向每个CPU投递DPC,参数是一个SpinLock,在DeferredRoutine里增加一个计数,然后就参与到争夺该SpinLock的行动中。

该SpinLock在HOOK KiFastCallEntry的线程里已经被KfAcquireSpinLock了,也就是说除了执行这个线程的核心,其他核心是得不到SpinLock的。执行HOOK的线程等上面那个计数达到(总核心数-1)的时候,也就是说其他核心都被挂到树上时,它就HOOK,然后扔掉SpinLock。其他核心得到该SpinLock,一看是个烂苹果也就扔掉了,DeferredRoutine就执行结束了。

值得一提的是无论上面计数的增加和替换KiFastCallEntry里Opcode的过程,都是使用原子操作的函数完成的,_InterlockedExchangeAdd与_InterlockedCompareExchange64。

最后会开一个线程:检测KiFastCallEntry有没有被恢复,如果被恢复的话,就转为SSDTHookAll,还会通知L"\\Callback\\bdProtectExpCallBack".

[培训] 优秀毕业生寄语:恭喜id咸鱼炒白菜拿到远超3W月薪的offer,《安卓高级研修班》火热招生!!!

收藏
点赞0
打赏
分享
最新回复 (15)
雪    币: 11
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rickymx 活跃值 2013-4-11 16:00
2
0
此贴必火。。。。
雪    币: 463
活跃值: 活跃值 (15)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
KiDebug 活跃值 4 2013-4-11 16:55
3
0
火贴占坑留名
雪    币: 42
活跃值: 活跃值 (17)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
nevergone 活跃值 3 2013-4-11 16:57
4
0
广告位招租!
雪    币: 11
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ultrajob 活跃值 2013-4-11 16:58
5
0
广告位招租!5折
雪    币: 290
活跃值: 活跃值 (824)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
囧囧 活跃值 2013-4-11 17:10
6
0
K哥和楼下的带精和不带精的取笑了,我这么弱,只是要找工作,看雪ID下都没发几个帖子,所以找时间(其实没工作全是闲时间)分析了一下,囧~
雪    币: 149
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
downres 活跃值 1 2013-4-11 17:11
7
0
楼主,说好的HOOK框架分析呢?
雪    币: 290
活跃值: 活跃值 (824)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
囧囧 活跃值 2013-4-11 17:14
8
0
看到这里再没往下看,我把“框架”去掉了。。
雪    币: 111
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Rtsjx 活跃值 2013-4-11 17:43
9
0
快递水表细软跑,LZ小心法务函!
雪    币: 81
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
Membered 活跃值 2013-4-11 17:51
10
0
软件本身做的垃圾,无所谓了..... 一抓一把day....
雪    币: 177
活跃值: 活跃值 (255)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
viphack 活跃值 4 2013-4-11 18:29
11
0
占个坑~~~~~~起飞
雪    币: 155
活跃值: 活跃值 (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kman 活跃值 2013-4-11 20:30
12
0
不是和腾讯电脑管家雷同,而是直接抄的电脑管家的代码,其他的一大把抄360的代码,对了话说腾讯那个也是照抄360的
雪    币: 33
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
xwfz 活跃值 2013-4-12 10:35
13
0
看看占座..
雪    币: 91
活跃值: 活跃值 (38)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
asrn 活跃值 1 2013-4-12 18:42
14
0
难怪腾讯要发律师函了
雪    币: 333
活跃值: 活跃值 (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
yarpee 活跃值 1 2013-4-13 00:53
15
0
都是成熟的东西了,360、管家,现在是百度。
雪    币: 27
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
mszjk 活跃值 2013-4-13 01:00
16
0
既然都已经用spinlock让其他线程蛋疼了,还需要用interlock干嘛呢
游客
登录 | 注册 方可回帖
返回