Anti HookAPI学习笔记 Hookapi分为2种,ring3 下挂钩 API 基本上也就是修改导入表,和Inline hook 修改前5个字节这几种方法,关于挂钩API 请参见:www.xfocus.net/articles/200403/681.html 部分引用如下:
这里对我们比较重要的是.idata部分的导入地址表(IAT)。这个部分包含了导入的相关信息和导入函数的地址。有一点很重要的是我们必须知道PE文件 是如何创建的。当在编程语言里间接调用任意API(这意味着我们是用函数的名字来调用它,而不是用它的地址),编译器并不直接把调用连接到模块,而是用 jmp指令连接调用到IAT,IAT在系统把进程调入内存时时会由进程载入器填满。这就是我们可以在两个不同版本的Windows里使用相同的二进制代码 的原因,虽然模块可能会加载到不同的地址。进程载入器会在程序代码里调用所使用的IAT里填入直接跳转的jmp指令。所以我们能在IAT里找到我们想要挂 钩的指定函数,我们就能很容易改变那里的jmp指令并重定向代码到我们的地址。完成之后每次调用都会执行我们的代码了。
77DB6F49 > 8BFF mov edi,edi77DB6F4B . 55 push ebp77DB6F4C . 8BEC mov ebp,esp77DB6F4E . 51 push ecx77DB6F4F . 53 push ebx77DB6F50 . 33DB xor ebx,ebx77DB6F52 . 817D 08 04000080 cmp dword ptr ss:[ebp+8],8000000477DB6F59 . 895D FC mov dword ptr ss:[ebp-4],ebx77DB6F5C . 0F84 B7020200 je ADVAPI32.77DD721977DB6F62 . 837D 10 01 cmp dword ptr ss:[ebp+10],177DB6F66 . 75 78 jnz short ADVAPI32.77DB6FE077DB6F68 . 395D 14 cmp dword ptr ss:[ebp+14],ebx77DB6F6B . 74 73 je short ADVAPI32.77DB6FE077DB6F6D . 56 push esi77DB6F6E . 8D45 FC lea eax,dword ptr ss:[ebp-4]77DB6F71 . 50 push eax77DB6F72 . FF75 08 push dword ptr ss:[ebp+8]77DB6F75 . E8 46F9FEFF call ADVAPI32.77DA68C077DB6F7A . 8BF0 mov esi,eax77DB6F7C . 3BF3 cmp esi,ebx77DB6F7E . 8975 08 mov dword ptr ss:[ebp+8],esi77DB6F81 . 0F84 96020200 je ADVAPI32.77DD721D77DB6F87 . 8B45 14 mov eax,dword ptr ss:[ebp+14]77DB6F8A . 8D50 01 lea edx,dword ptr ds:[eax+1]77DB6F8D > 8A08 mov cl,byte ptr ds:[eax]77DB6F8F . 40 inc eax77DB6F90 . 3ACB cmp cl,bl77DB6F92 .^ 75 F9 jnz short ADVAPI32.77DB6F8D77DB6F94 . 2BC2 sub eax,edx77DB6F96 . 57 push edi77DB6F97 . 8D78 01 lea edi,dword ptr ds:[eax+1]77DB6F9A . 8B45 0C mov eax,dword ptr ss:[ebp+C]77DB6F9D . 3BC3 cmp eax,ebx77DB6F9F . 0F85 80020200 jnz ADVAPI32.77DD722577DB6FA5 > 8975 10 mov dword ptr ss:[ebp+10],esi77DB6FA8 > 57 push edi ; /BufSize77DB6FA9 . FF75 14 push dword ptr ss:[ebp+14] ; |Buffer77DB6FAC . 6A 01 push 1 ; |ValueType = REG_SZ77DB6FAE . 53 push ebx ; |Reserved77DB6FAF . 53 push ebx ; |ValueName77DB6FB0 . FF75 10 push dword ptr ss:[ebp+10] ; |hKey77DB6FB3 . E8 2F7CFFFF call ADVAPI32.RegSetValueExA ; \RegSetValueExA77DB6FB8 . 8BF0 mov esi,eax77DB6FBA . 8B45 10 mov eax,dword ptr ss:[ebp+10]77DB6FBD . 3B45 08 cmp eax,dword ptr ss:[ebp+8]77DB6FC0 . 0F85 7E020200 jnz ADVAPI32.77DD724477DB6FC6 > 5F pop edi77DB6FC7 > 395D FC cmp dword ptr ss:[ebp-4],ebx77DB6FCA . 0F85 81020200 jnz ADVAPI32.77DD725177DB6FD0 > 8BC6 mov eax,esi77DB6FD2 . 5E pop esi77DB6FD3 > 5B pop ebx77DB6FD4 . C9 leave77DB6FD5 . C2 1400 retn 14
7C8111DA > 64:A1 18000000 mov eax,dword ptr fs:[18]7C8111E0 8B48 30 mov ecx,dword ptr ds:[eax+30]7C8111E3 8B81 B0000000 mov eax,dword ptr ds:[ecx+B0]7C8111E9 0FB791 AC000000 movzx edx,word ptr ds:[ecx+AC]7C8111F0 83F0 FE xor eax,FFFFFFFE7C8111F3 C1E0 0E shl eax,0E7C8111F6 0BC2 or eax,edx7C8111F8 C1E0 08 shl eax,87C8111FB 0B81 A8000000 or eax,dword ptr ds:[ecx+A8]7C811201 C1E0 08 shl eax,87C811204 0B81 A4000000 or eax,dword ptr ds:[ecx+A4]7C81120A C3 retn
7C809920 > 64:A1 18000000 mov eax,dword ptr fs:[18]7C809926 8B40 20 mov eax,dword ptr ds:[eax+20]7C809929 C3 retn
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!