任何技术都有被攻破的一天,没有包打天下的方法。再强的花指令也是有可能被清除的,这时我们也要想办法应对。所以我们经常需要检测花指令是否被清除,加以应对。一、花指令被清除后的痕迹 我们来看一下,下面一段简单花指令被清除后的结果:代码: jmp @F byte 08eH@@: ret清除后:
二、检测
从上文我们可以看到,花指令被替换指令NOP,这样就不必重构代码,就能够使代码正常运行。显然,我们只要NOP就行了。举例:.386.model stdcall,flatoption casemap:noneinclude windows.incinclude kernel32.incincludelib kernel32.libinclude user32.incincludelib user32.lib.dataContext byte "Junkcode has been cleaned",0Tip byte "Tip",0.codestart:JunkCode: jmp @F byte 8eH@@: mov al,byte ptr[$-1] cmp al,90H jnz Pro_End invoke MessageBox,NULL,addr Context,addr Tip,MB_OK Pro_End: invoke ExitProcess,0end start