首页
社区
课程
招聘
[求助]KeStackAttachProcess函数被线程一直HOOK,如何修复或绕过从而正常调用?
发表于: 2013-7-27 14:47 11133

[求助]KeStackAttachProcess函数被线程一直HOOK,如何修复或绕过从而正常调用?

2013-7-27 14:47
11133
挂钩对象                挂钩位置                钩子类型                挂钩处当前值                挂钩处原始值
  • len(4) KeStackAttachProcess[ntkrnlpa.exe]                [0x804F9CC7]->[0xAD261CB6][C:\WINDOWS\system32\CPS.sys]                Inline                EB 7F D6 2C                59 FD FF FF

  • KeStackAttachProcess函数内核地址未HOOK前
    804F9C8B - 8B 45 0C              - mov eax,[ebp+0C]
    804F9C8E - C7 40 10 01000000     - mov [eax+10],00000001
    804F9C95 - EB 3B                 - jmp 804F9CD2
    804F9C97 - 33 C9                 - xor ecx,ecx
    804F9C99 - FF 15 88904D80        - call dword ptr [804D9088]
    804F9C9F - 80 BE 65010000 00     - cmp byte ptr [esi+00000165],00
    804F9CA6 - 88 45 08              - mov [ebp+08],al
    804F9CA9 - 74 0F                 - je 804F9CBA
    804F9CAB - FF 75 0C              - push [ebp+0C]
    804F9CAE - FF 75 08              - push [ebp+08]
    804F9CB1 - 57                    - push edi
    804F9CB2 - 56                    - push esi
    804F9CB3 - E8 6CFDFFFF           - call 804F9A24
    804F9CB8 - EB 18                 - jmp 804F9CD2
    804F9CBA - 8D 86 4C010000        - lea eax,[esi+0000014C]
    804F9CC0 - 50                    - push eax
    804F9CC1 - FF 75 08              - push [ebp+08]
    804F9CC4 - 57                    - push edi
    804F9CC5 - 56                    - push esi
    804F9CC6 - E8 59FDFFFF           - call 804F9A24     
    804F9CCB - 8B 45 0C              - mov eax,[ebp+0C]
    804F9CCE - 83 60 10 00           - and dword ptr [eax+10],00
    804F9CD2 - 5F                    - pop edi
    804F9CD3 - 5E                    - pop esi
    804F9CD4 - 5D                    - pop ebp
    804F9CD5 - C2 0800               - ret 0008

    正常CALL的地址
    804F9A24 - 8B FF                 - mov edi,edi
    804F9A26 - 55                    - push ebp
    804F9A27 - 8B EC                 - mov ebp,esp
    804F9A29 - 53                    - push ebx
    804F9A2A - 56                    - push esi
    804F9A2B - 8B 75 08              - mov esi,[ebp+08]
    804F9A2E - 57                    - push edi
    804F9A2F - FF 75 14              - push [ebp+14]
    804F9A32 - 8B 7D 0C              - mov edi,[ebp+0C]
    804F9A35 - 66 FF 47 60           - inc word ptr [edi+60]
    804F9A39 - 8D 5E 34              - lea ebx,[esi+34]
    804F9A3C - 53                    - push ebx
    804F9A3D - E8 5AFBFFFF           - call 804F959C
    804F9A42 - 89 5B 04              - mov [ebx+04],ebx
    804F9A45 - 89 1B                 - mov [ebx],ebx
    804F9A47 - 8D 46 3C              - lea eax,[esi+3C]
    804F9A4A - 89 40 04              - mov [eax+04],eax
    804F9A4D - 89 00                 - mov [eax],eax
    804F9A4F - 8D 86 4C010000        - lea eax,[esi+0000014C]
    804F9A55 - 39 45 14              - cmp [ebp+14],eax
    804F9A58 - 89 7E 44              - mov [esi+44],edi
    804F9A5B - C6 46 48 00           - mov byte ptr [esi+48],00
    804F9A5F - C6 46 49 00           - mov byte ptr [esi+49],00
    804F9A63 - C6 46 4A 00           - mov byte ptr [esi+4A],00
    804F9A67 - 75 13                 - jne 804F9A7C
    804F9A69 - 89 86 38010000        - mov [esi+00000138],eax

    KeStackAttachProcess函数内核地址被HOOK后
    804F9C8B - 8B 45 0C              - mov eax,[ebp+0C]
    804F9C8E - C7 40 10 01000000     - mov [eax+10],00000001
    804F9C95 - EB 3B                 - jmp 804F9CD2
    804F9C97 - 33 C9                 - xor ecx,ecx
    804F9C99 - FF 15 88904D80        - call dword ptr [804D9088]
    804F9C9F - 80 BE 65010000 00     - cmp byte ptr [esi+00000165],00
    804F9CA6 - 88 45 08              - mov [ebp+08],al
    804F9CA9 - 74 0F                 - je 804F9CBA
    804F9CAB - FF 75 0C              - push [ebp+0C]
    804F9CAE - FF 75 08              - push [ebp+08]
    804F9CB1 - 57                    - push edi
    804F9CB2 - 56                    - push esi
    804F9CB3 - E8 6CFDFFFF           - call 804F9A24
    804F9CB8 - EB 18                 - jmp 804F9CD2
    804F9CBA - 8D 86 4C010000        - lea eax,[esi+0000014C]
    804F9CC0 - 50                    - push eax
    804F9CC1 - FF 75 08              - push [ebp+08]
    804F9CC4 - 57                    - push edi
    804F9CC5 - 56                    - push esi
    804F9CC6 - E8 EBCF6E31           - call B1BE6CB6      <<<<这个地址被Inline hook,恢复后几秒钟自动还原,应该是用线程一直Hook的
    804F9CCB - 8B 45 0C              - mov eax,[ebp+0C]
    804F9CCE - 83 60 10 00           - and dword ptr [eax+10],00
    804F9CD2 - 5F                    - pop edi
    804F9CD3 - 5E                    - pop esi
    804F9CD4 - 5D                    - pop ebp
    804F9CD5 - C2 0800               - ret 0008

    被HOOK后CALL的地址
    B1BE6CB6 - 55                    - push ebp
    B1BE6CB7 - 8B EC                 - mov ebp,esp
    B1BE6CB9 - F6 05 F44FC0B1 01     - test byte ptr [B1C04FF4],01
    B1BE6CC0 - 75 17                 - jne B1BE6CD9
    B1BE6CC2 - 83 0D F44FC0B1 01     - or dword ptr [B1C04FF4],01
    B1BE6CC9 - E8 D6380100           - call B1BFA5A4
    B1BE6CCE - 50                    - push eax
    B1BE6CCF - E8 B2380100           - call B1BFA586
    B1BE6CD4 - A3 F04FC0B1           - mov [B1C04FF0],eax
    B1BE6CD9 - F6 05 F44FC0B1 02     - test byte ptr [B1C04FF4],02
    B1BE6CE0 - 75 17                 - jne B1BE6CF9
    B1BE6CE2 - 83 0D F44FC0B1 02     - or dword ptr [B1C04FF4],02
    B1BE6CE9 - E8 B6380100           - call B1BFA5A4
    B1BE6CEE - 50                    - push eax
    B1BE6CEF - E8 FC370100           - call B1BFA4F0
    B1BE6CF4 - A3 EC4FC0B1           - mov [B1C04FEC],eax
    B1BE6CF9 - F6 05 F44FC0B1 04     - test byte ptr [B1C04FF4],04
    B1BE6D00 - 75 17                 - jne B1BE6D19
    B1BE6D02 - 83 0D F44FC0B1 04     - or dword ptr [B1C04FF4],04
    B1BE6D09 - E8 96380100           - call B1BFA5A4
    B1BE6D0E - 50                    - push eax
    B1BE6D0F - E8 54380100           - call B1BFA568
    B1BE6D14 - A3 E84FC0B1           - mov [B1C04FE8],eax
    B1BE6D19 - 8B 0D 644FC0B1        - mov ecx,[B1C04F64]
    B1BE6D1F - 53                    - push ebx
    B1BE6D20 - 56                    - push esi

    [招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

    收藏
    免费 0
    支持
    分享
    最新回复 (9)
    雪    币: 115
    活跃值: (46)
    能力值: ( LV4,RANK:40 )
    在线值:
    发帖
    回帖
    粉丝
    2
    不知道KiAttachProcess这个函数有没被改,不然直接在上面jmp
    2013-7-27 15:40
    0
    雪    币: 13
    活跃值: (10)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    3
    KiAttachProcess?
    对KeStackAttachProcess有帮助?
    2013-7-27 16:08
    0
    雪    币: 115
    活跃值: (46)
    能力值: ( LV4,RANK:40 )
    在线值:
    发帖
    回帖
    粉丝
    4
    804F9CC6 - E8 EBCF6E31           - call B1BE6CB6应该就是KiAttachProcess
    如果Ki被改了,只恢复这个也没用。
    2013-7-27 18:26
    0
    雪    币: 13
    活跃值: (10)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    5
    哎~有啥思路~~
    2013-7-27 21:19
    0
    雪    币: 32
    活跃值: (17)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    6
    B1BE6CB6
    这个地址换成你中继函数,判断一下,如果是CPS.sys调用的KeStackAttachProcess那么直接跳到被HOOK的地址继续执行,如果是其他的调用,那么直接跳到正常的KiAttachProcess.

    不知道可以不可以过掉。
    2013-8-4 10:16
    0
    雪    币: 207
    活跃值: (24)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    7
    能不能把KeStackAttachProcess未被HOOK前的汇编代码拿来实现自己的MyKeStackAttachProcess,然后在你的程序需要调用KeStackAttachProcess的时候调用自己的MyKeStackAttachProcess???
    2019-5-13 21:58
    0
    雪    币: 207
    活跃值: (24)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    8

    我忘了64位不支持内嵌汇编,有什么好办法,用shellcode的方式执行?
    最后于 2019-5-13 21:59 被脚本灬丨小子编辑 ,原因:
    2019-5-13 21:58
    0
    雪    币: 441
    活跃值: (1050)
    能力值: ( LV2,RANK:15 )
    在线值:
    发帖
    回帖
    粉丝
    9
    1.直接跟到CPS.sys里,看是哪个线程做的修改,直接patch掉这个线程,如果此驱动有自校验那把自校验也干掉。
    2.Hook B1BE6CB6
    3.hook KeStackAttachProcess 被inline hook (call B1BE6CB6)的前面一部分头然后自己模拟 然后再跳回inline hook 的下面
    4.重载内核,调用自己的
    2019-5-15 20:08
    0
    雪    币: 441
    活跃值: (1050)
    能力值: ( LV2,RANK:15 )
    在线值:
    发帖
    回帖
    粉丝
    10
    脚本灬丨小子 能不能把KeStackAttachProcess未被HOOK前的汇编代码拿来实现自己的MyKeStackAttachProcess,然后在你的程序需要调用KeStackAttachProcess的时候 ...
    可以的,比较麻烦的一种办法。可以尝试在他的hook前进行hook
    2019-5-15 20:08
    0
    游客
    登录 | 注册 方可回帖
    返回
    //