有兴趣的来看看啊,这种壳该如何脱?
主程序下载地址:
http://www.skycn.com/soft/2220.html
FI查为未知壳,peid普通扫描为未知壳,deep scan为:ASPack 2.x (without poly) -> Alexey Solodovnikov
OD载入:
选不继续分析,停在以下代码处
00432BA2 > 60 PUSHAD
00432BA3 E8 00000000 CALL SXRSGZHH.00432BA8
00432BA8 5D POP EBP
00432BA9 81ED 06104000 SUB EBP,SXRSGZHH.00401006
00432BAF 8D85 56104000 LEA EAX,DWORD PTR SS:[EBP+401056]
00432BB5 50 PUSH EAX
00432BB6 64:FF35 0000000>PUSH DWORD PTR FS:[0]
00432BBD 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
00432BC4 CC INT3 //按F8到这里,int3,NOP掉
00432BC5 90 NOP
00432BC6 64:8F05 0000000>POP DWORD PTR FS:[0]
00432BCD 83C4 04 ADD ESP,4
00432BD0 74 05 JE SHORT SXRSGZHH.00432BD7
00432BD2 75 03 JNZ SHORT SXRSGZHH.00432BD7
00432BD4 EB 07 JMP SHORT SXRSGZHH.00432BDD
00432BD6 59 POP ECX
00432BD7 8D9D 00104000 LEA EBX,DWORD PTR SS:[EBP+401000]
00432BDD 53 PUSH EBX
00432BDE 5F POP EDI
00432BDF 2BFA SUB EDI,EDX
00432BE1 57 PUSH EDI
00432BE2 8A03 MOV AL,BYTE PTR DS:[EBX]
00432BE4 3007 XOR BYTE PTR DS:[EDI],AL
00432BE6 43 INC EBX
00432BE7 47 INC EDI
00432BE8 ^ E2 F8 LOOPD SHORT SXRSGZHH.00432BE2 //向上的循环,如果直接在下面F4就直接终止进程了,一步一步的跟进这个循环可以看到壳在动态修改上面的代码,把我们刚才改为nop的还原为int3,再在下面F4,代码变成如下状态。
00432BEA 58 POP EAX
00432BEB 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX
00432BEF 61 POPAD
00432BF0 FFE0 JMP EAX
00432BF2 74 60 JE SHORT SXRSGZHH.00432C54
00432BF4 75 5E JNZ SHORT SXRSGZHH.00432C54
00432BF6 EB 55 JMP SHORT SXRSGZHH.00432C4D
00432BF8 55 PUSH EBP
---------------------------------------------------------------------------
在00432BEA按F4代码变成如下:
00432BA2 > 60 PUSHAD
00432BA3 8888 888888D5 MOV BYTE PTR DS:[EAX+D5888888],CL
00432BA9 54 PUSH ESP
00432BAA B9 BFAFEFEF MOV ECX,EFEFAFBF
00432BAF 62E7 BOUND ESP,EDI ; 非法使用寄存器
00432BB1 B1 A1 MOV CL,0A1
00432BB3 ^ E1 E1 LOOPDE SHORT SXRSGZHH.00432B96
00432BB5 B1 D5 MOV CL,0D5
00432BB7 2A1F SUB BL,BYTE PTR DS:[EDI]
00432BB9 1F POP DS ; 修正的段位寄存器
00432BBA 1F POP DS ; 修正的段位寄存器
00432BBB 1F POP DS ; 修正的段位寄存器
00432BBC 1F POP DS ; 修正的段位寄存器
00432BBD 7B F2 JPO SHORT SXRSGZHH.00432BB1
00432BBF D7 XLAT BYTE PTR DS:[EBX+AL]
00432BC0 D7 XLAT BYTE PTR DS:[EBX+AL]
00432BC1 D7 XLAT BYTE PTR DS:[EBX+AL]
00432BC2 D7 XLAT BYTE PTR DS:[EBX+AL]
00432BC3 D7 XLAT BYTE PTR DS:[EBX+AL]
00432BC4 1B8B EF606565 SBB ECX,DWORD PTR DS:[EBX+656560EF]
00432BCA 65: PREFIX GS: ; 多余的前缀
00432BCB 65: PREFIX GS: ; 多余的前缀
00432BCC 65:E6 22 OUT 22,AL ; I/O 命令
00432BCF 26:52 PUSH EDX ; 多余的前缀
00432BD1 57 PUSH EDI
00432BD2 2221 AND AH,BYTE PTR DS:[ECX]
00432BD4 CA CD94 RETF 94CD ; 远距返回
00432BD7 198484 94D4D487 SBB DWORD PTR SS:[ESP+EAX*4+87D4D494],EA>
00432BDE D8F3 FDIV ST,ST(3)
00432BE0 095E D4 OR DWORD PTR DS:[ESI-2C],EBX
00432BE3 0231 ADD DH,BYTE PTR DS:[ECX]
00432BE5 06 PUSH ES
00432BE6 43 INC EBX
00432BE7 04 E2 ADD AL,0E2
00432BE9 F8 CLC
00432BEA 58 POP EAX ; SXRSGZHH.00432BA3
//在这里F4,可以看到动态修改了代码。
00432BEB 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX
00432BEF 61 POPAD
00432BF0 FFE0 JMP EAX //郁闷,刚开始我还以为这里就是OEP了,这里EAX=00432BA3,又从头开始了。。跳到EAX就终止了。
00432BF2 74 60 JE SHORT SXRSGZHH.00432C54
00432BF4 75 5E JNZ SHORT SXRSGZHH.00432C54
00432BF6 EB 55 JMP SHORT SXRSGZHH.00432C4D
00432BF8 55 PUSH EBP
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!