最新的themida加壳的程序。
对于一般VC启动框架代码有
call GetModuleHandleA
加壳都变成
call xxxxxxxx(壳代码)
如果用fly对于1.0的脱法能避过变形成call xxxxxxxx
但是call [IAT]中的IAT地址还是加密了。
上面不是问题。问题来了
我进入这个call xxxxxxxx
最开始是经过变形的GetModuleHandleA的代码。
执行了几条指令后,遇到一个jmp到原始的GetModuleHandleA的尾部的指令。
/*下面是GetModuleHandleA的代码
7C80B6A1 > 8BFF mov edi, edi
7C80B6A3 55 push ebp
7C80B6A4 8BEC mov ebp, esp
7C80B6A6 837D 08 00 cmp dword ptr ss:[ebp+8], 0
7C80B6AA 74 18 je short 7C80B6C4
7C80B6AC FF75 08 push dword ptr ss:[ebp+8]
7C80B6AF E8 C0290000 call 7C80E074
7C80B6B4 85C0 test eax, eax
7C80B6B6 74 08 je short 7C80B6C0
7C80B6B8 FF70 04 push dword ptr ds:[eax+4]
7C80B6BB E8 7D2D0000 call GetModuleHandleW
7C80B6C0 5D pop ebp
7C80B6C1 C2 0400 retn 4
7C80B6C4 64:A1 18000000 mov eax, dword ptr fs:[18] //跳到了这里
7C80B6CA 8B40 30 mov eax, dword ptr ds:[eax+30]
7C80B6CD 8B40 08 mov eax, dword ptr ds:[eax+8]
7C80B6D0 ^ EB EE jmp short 7C80B6C0
*/
为什么themida要跳回原始的代码的地方呢?
为什么不全部模拟或者移动到replace的地方执行呢?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)