防止IDA逆向工程的花指令。

发现,要使IDA的反汇编失败的最简单花指令,就是在c/c++的函数里头使用retn指令。例如:

#include #include #pragma auto_inline(off) int __stdcall Proc(int n) { char* strParam = "A test to inspect stack, n=%d, a=%d."; int a = n; __asm { push label; retn; } label: printf(strParam,n,a); return n*a; } int main() { int n = 0; scanf("%d", &n); printf("%d/n", Proc(n)); return 0; }

在代码中插入

__asm { push label; retn; }

IDA觉得这有悖C++的常理,拿不定主意,这段二进制数据是数据还是代码,保险起见,它对其后的代码不再进行反汇编,当作数据处理。不过这招对ollydbg不顶用。

你可能感兴趣的:(逆向工程,汇编)