首页
社区
课程
招聘
关于Ring3层上的键盘钩子的对抗
发表于: 2011-6-22 17:23 5039

关于Ring3层上的键盘钩子的对抗

2011-6-22 17:23
5039
看到有楼主在论坛上对抗键盘钩子,感觉对新手来说有点难以理解,所以发了一下按照正常思路的对抗步骤,步骤如下:
打开2011 用OD附加 ,用XueTr.exe找到WH_KEYBOARD_LL 的句柄
然后用CE搜索这个句柄的指针。在OD中找到这个指针,然后下硬件写短点
会断到两处,第一处清零的,第二处才是真正赋值的:
(实际上可以直接找WH_DEBUG的,没有必要找上面这个)
CPU Disasm
Address   Hex dump          Command                                  Comments
00F50774    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
00F50777    FF50 3C         CALL DWORD PTR DS:[EAX+3C]               ; 钩子函数?
00F5077A    8B4D FC         MOV ECX,DWORD PTR SS:[EBP-4]
00F5077D    8941 14         MOV DWORD PTR DS:[ECX+14],EAX             断到这里
00F50780    8B4D FC         MOV ECX,DWORD PTR SS:[EBP-4]
00F50783    8379 14 00      CMP DWORD PTR DS:[ECX+14],0
00F50787    74 47           JE SHORT 00F507D0
00F50789    8B55 FC         MOV EDX,DWORD PTR SS:[EBP-4]
00F5078C    FF52 34         CALL DWORD PTR DS:[EDX+34]
00F5078F    50              PUSH EAX
00F50790    6A 00           PUSH 0
00F50792    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
00F50795    8B48 60         MOV ECX,DWORD PTR DS:[EAX+60]
00F50798    51              PUSH ECX
00F50799    6A 09           PUSH 9
00F5079B    8B55 FC         MOV EDX,DWORD PTR SS:[EBP-4]
00F5079E    FF52 3C         CALL DWORD PTR DS:[EDX+3C]
00F507A1    8B4D FC         MOV ECX,DWORD PTR SS:[EBP-4]
00F507A4    8941 10         MOV DWORD PTR DS:[ECX+10],EAX            ; (下WH_DEBUG直接断到这里!)

只需要把
00F50787    74 47           JE SHORT 00F507D0
修改为

00F50787   EB 47           JMP SHORT 00F507D0

对00F50787的内存下硬件访问断点

断到

017C10C1      33F0          XOR ESI,EAX
017C10C3      41            INC ECX
017C10C4      8BC6          MOV EAX,ESI
017C10C6      23C2          AND EAX,EDX
017C10C8      33C3          XOR EAX,EBX
017C10CA      0FB659 01     MOVZX EBX,BYTE PTR DS:[ECX+1]
017C10CE      8B0485 BC917C MOV EAX,DWORD PTR DS:[EAX*4+17C91BC]

一个解密算法,不需要分析
往上找,找到这个解密头部

017C1000      55            PUSH EBP
017C1001      8BEC          MOV EBP,ESP
017C1003      8B4D 0C       MOV ECX,DWORD PTR SS:[EBP+0C]
017C1006      85C9          TEST ECX,ECX
017C1008      75 04         JNE SHORT 017C100E

把这个 017C1008      75 04         JNE SHORT 017C100E
nop 掉

发下仍然会恢复
恢复位置代码

77C16FA3    F3:A5           REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS

单步走出来,返回到

017C7234      57            PUSH EDI
017C7235      FFB6 B8000000 PUSH DWORD PTR DS:[ESI+0B8]
017C723B      83C0 68       ADD EAX,68
017C723E      50            PUSH EAX
017C723F      E8 5C0F0000   CALL <JMP.memcpy>                        ; Jump to msvcrt.memcpy
017C7244      83C4 0C       ADD ESP,0C

NOP 掉这个memcpy 如下

CPU Disasm
Address   Hex dump          Command                                  Comments
017C722D  /.  59            POP ECX
017C722E  |.  8B86 B4000000 MOV EAX,DWORD PTR DS:[ESI+0B4]
017C7234      90            NOP
017C7235      90            NOP
017C7236      90            NOP
017C7237      90            NOP
017C7238      90            NOP
017C7239      90            NOP
017C723A      90            NOP
017C723B      90            NOP
017C723C      90            NOP
017C723D      90            NOP
017C723E      90            NOP
017C723F      90            NOP
017C7240      90            NOP
017C7241      90            NOP
017C7242      90            NOP
017C7243      90            NOP
017C7244      90            NOP
017C7245      90            NOP
017C7246      90            NOP
017C7247  |.  5F            POP EDI
017C7248  |.  5E            POP ESI
017C7249  |.  5B            POP EBX
017C724A  \.  C3            RETN

注意,这个时候 00F50787    74 47  JE SHORT 00F507D0已经被恢复了,然后你在改一下
OK这样子就把钩子挂掉了 已经能记录了,乱码的我就不分析了
仅作技术研究,禁止做坏事!!!!!

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

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
写的不错
2011-6-22 17:53
0
游客
登录 | 注册 方可回帖
返回
//