-
-
[原创]ACProtect1.41保护技术分析
-
发表于:
2011-9-11 20:48
13111
-
这个壳很老了,但是还是来分析下它所使用的保护技术,这个壳是使用加密解密三的SMC那章的保护技术,依次循环解码,分几个段,由当前段解码加密后的字节码,放到下一个执行段,当前段解码执行完成后,执行下一段解出来的代码,每段解码代码中包含了花指令,代码变形,迷惑等等,当解压到最后一段代码的时候,这个壳就直接一个JMP跳到Oep了,我们脱这个壳分为两个步骤,
第一步:清除花指令
第二部:查找迷惑变形代码
我们首先清除花指令,花指令的清除比较简单,比如下面这段代码
00405000 > 60 PUSHAD
00405001 EB 01 JMP SHORT 00405004 ; JMP SHORT 00405004
00405003 E8 0F810100 CALL 0041D117
00405008 0000 ADD BYTE PTR DS:[EAX],AL
00405016 /7E 03 JLE SHORT 0040501B
00405018 |7F 01 JG SHORT 0040501B
0040502A 50 PUSH EAX
0040502B E8 01000000 CALL 00405031 ; 花指令,下指令的开始字节NOP掉
00405030 - 76 83 JBE SHORT 00404FB5
花指令后的代码
0040502A 50 PUSH EAX ; 保存EAX的值
0040502B E8 01000000 CALL 00405031 ; Call会压入下个地址到堆栈,esp-4
00405030 90 NOP
00405031 83C4 04 ADD ESP,4 ; 恢复堆栈,ESP+4
00405034 58 POP EAX ; 恢复EAX的值
00405036 E8 01000000 CALL 0040503C
0040503B - 7C 83 JL SHORT 00404FC0 ; 花指令
0040503D 04 24 ADD AL,24
清除后的代码
00405036 E8 01000000 CALL 0040503C ; Call会压入下个地址到堆栈,esp-4
0040503B 90 NOP ; 花指令
0040503C 830424 06 ADD DWORD PTR SS:[ESP],6 ; 下条指令的地址加上6,CALL的下一条指令到RETN刚好6字节,所以目标地址就是RETN后一条指令
00405040 C3 RETN
00405043 /EB 01 JMP SHORT 00405046 ; 直接跳到XXXX地址,其下的代码到目标地址之间的代码是无效的
00405045 |90 NOP ; 花指令
0040508B E8 01000000 CALL 00405091
00405090 90 NOP
00405091 83C4 04 ADD ESP,4
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)