文章预览
一、垃圾代码(JunkCode) 对于垃圾代码和花指令的区分,我们一般将没有实际意义的代码称作垃圾代码(Junk Code/Garbage code),而把干扰调试器分析的代码称作花指令。 典型的JunkCode一般是一些操作指令 具有相同的操作数 ,执行一些毫无作用的运算,比如: mov eax,eax; xchg esp,esp; jmp rva=0;//E9 00 00 00 00 xor eax,0; ;任何一个数异或0等于本身 二、汇编指令的等价替换 (1)算数拆分 所谓的算数拆分,就是将原来的操作数,拆分为多次进行计算,比如: add eax,0x5; 就可以拆分为 add eax,0x2; add eax,0x1; inc eax; inc eax; 再如: shl eax,5 就可以拆分为: shl eax,3; shl eax,1; shl eax,1; 当然,也可以综合其他寄存器进行值的传递,比如: add eax,4; 可以改写成: xor ebx,ebx; add ebx,2; mul ebx,2; add eax,ebx; 诸如此类的可以写很多种,不再阐述 下面对几个指令的等价解释进行描述: (2
………………………………