兄弟正练习apihook技术,瞎搞了几天!
比如下面QQ影音的汇编代码:
0042CF03 53 push ebx
0042CF04 8B5C24 10 mov ebx,dword ptr ss:[esp+0x10]
0042CF08 55 push ebp
0042CF09 33ED xor ebp,ebp
0042CF0B 3BDD cmp ebx,ebp
0042CF0D 56 push esi =======================我想在这里hook
0042CF0E 8BF1 mov esi,ecx
0042CF10 75 0C jnz short QQPlayer.0042CF1E========到这里!
0042CF12 5E pop esi=========================jmp回来的地方
0042CF13 8D45 0A lea eax,dword ptr ss:[ebp+0xA]
0042CF16 5D pop ebp
0042CF17 5B pop ebx
0042CF18 83C4 08 add esp,0x8
0042CF1B C2 0800 retn 0x8
0042CF1E 8B46 04 mov eax,dword ptr ds:[esi+0x4]
0042CF21 3BC5 cmp eax,ebp
0042CF23 74 0D je short QQPlayer.0042CF32
0042CF25 50 push eax
0042CF26 FF15 D41EAC00 call dword ptr ds:[<&MSVCR80.free>] ; MSVCR80.free
0042CF2C 83C4 04 add esp,0x4
0042CF2F 896E 04 mov dword ptr ds:[esi+0x4],ebp
0042CF32 8B4424 1C mov eax,dword ptr ss:[esp+0x1C]
0042CF36 3BC5 cmp eax,ebp
0042CF38 896E 08 mov dword ptr ds:[esi+0x8],ebp
0042CF3B 896E 0C mov dword ptr ds:[esi+0xC],ebp
0042CF3E 57 push edi
0042CF3F 896E 18 mov dword ptr ds:[esi+0x18],ebp
===============================================
0042CF0D 56 push esi
0042CF0E 8BF1 mov esi,ecx
0042CF10 75 0C jnz short QQPlayer.0042CF1E
0042CF12 5E pop esi
然后在hook的地方拿到 esi 的值做个比较
兄弟的思路是:
1.先在0042CF0D地址hook 5个字节,让他jmp到自定义函数哪里,为了方便说明,自定函数叫做DDKnow //
2,定义一个KKD函数!用来得到esi的值,然后比较!返回真和假就行了。。
3,在自定义DDKnow函数里,调用KKD函数。。然后再jmp回到0042CF12地址执行。。
问题是:
1.自定义函数必须是空函数吗?例如:上面的提到DDKnow函数,KKD函数。。
2.还有怎么得到esi的值!//可以的话,用代码说明一下,要不给个思路也行。。
有视频更好。。。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)