首页
社区
课程
招聘
[求助]怎么绕过这样的InlineHook?
发表于: 2015-8-10 01:20 5497

[求助]怎么绕过这样的InlineHook?

2015-8-10 01:20
5497
mov    eax, 0B175DB6A这里不能修改
也不能SSDTHook修改NtOpenProcess,否则重启机子
也试过在B175DB6A这里 jmp到自己的函数地址
但是不知道没把堆线平衡搞好还是寄存器里的值已经破坏的原因
导致蓝屏
所以来这请教一下应该怎么绕过

原始NtOpenProcess
805CC486                68 C4000000                push   0C4
805CC48B                68 C0B44D80                push   804DB4C0
805CC490                E8 AB08F7FF                call   8053CD40
805CC495                33F6                                xor    esi, esi
805CC497                8975 D4                         mov    dword ptr [ebp-2C], esi

被InlineHook后的NtOpenProcess
805CC486                B8 6ADB75B1                 mov    eax, 0B175DB6A
805CC48B                FFD0                                 call   eax
805CC48D                90                                 nop
805CC48E                90                                 nop
805CC48F                90                                 nop
805CC490                E8 AB08F7FF                 call   8053CD40
805CC495                33F6                                 xor    esi, esi
805CC497                8975 D4                         mov    dword ptr [ebp-2C], esi

InlineHook地址里的数据
0xB175DB6A  50                         push eax
0xB175DB6B  53                         push ebx
0xB175DB6C  51                         push ecx
0xB175DB6D  52                         push edx
0xB175DB6E  56                         push esi
0xB175DB6F  57                         push edi
0xB175DB70  55                         push ebp
0xB175DB71  9C                         pushfd
0xB175DB72  E8 BBCCFFFF          call B175A832
0xB175DB77  E8 02FFFFFF      call B175DA7E
0xB175DB7C  8BC8                         mov ecx, eax

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 22
活跃值: (242)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
在B175DB6A处jmp应该是可以成功的,估计是堆栈没弄好。既然是call eax,也可以直接在B175DB6A处修改栈中的返回地址,然后直接RET。
2015-8-10 07:43
0
雪    币: 60
活跃值: (439)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
3
hook 0xB175DB6A 这里是没问题呢因为是call过来不是jmp过来,蓝屏估计是栈平衡问题
2015-8-10 08:19
0
雪    币: 995
活跃值: (669)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
直接修改表的地址 走你的函数就OK了 判断访问的进程是游戏的就执行正常的钩子
2015-8-10 08:25
0
雪    币: 70
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
想了一会,直接重载内核是来的最快的
2015-8-10 09:11
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
0xB175DB6A  mov  [esp], NewKernelNtOpenProcess
0xB175DB71  ret
2015-8-10 09:43
0
雪    币: 315
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
LZ已经说了不能修改SSDT表里的地址了,机器会重启。
2015-8-10 11:48
0
雪    币: 1525
活跃值: (3422)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
重载内核吧,简单方便,长期有效
2015-8-10 11:56
0
雪    币: 70
活跃值: (37)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
这函数自己实现一个不就好了,另外堆栈不平衡你要吧返回地址弄掉就行了
你在B175DB6A中JMP到你自己那里,之后
add esp,4
push   0C4
push   804DB4C0
jmp 805CC490
2015-8-10 12:48
0
雪    币: 4751
活跃值: (1783)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
重载内核  不通过ssdt调用  直接IRP调用新内核ZwOpenProcess或者NtOpenProcess
2015-8-10 13:34
0
雪    币: 1258
活跃值: (1434)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
关键这是一个CALL hook
注意 栈里面 ESP 所指是 返回地址(下一句)  也即 : 805CC48D

HOOK 0xB175DB6A
  直接 JMP   我的地址

我的地址:
               pushad
               pushfd

              做你想做的

             popfd
             popad
             push   0C4
             push   804DB4C0                        
             JMP    [ESP + 0x8]               ; 此时 ESP + 8处就是 805CC48D (返回地址)
2015-8-10 17:24
0
游客
登录 | 注册 方可回帖
返回
//