安全中国首页 > 文章中心 > 脱壳技术
 

FSG 1.33 的简单脱壳(4千字)

更新时间:2008-5-17 0:11:13
责任编辑:流火
热 点:
FSG 1.33 的简单脱壳 
======================================================================= 
作    者: CoolWolF <coolwolf@gmx.net> 
破解时间: 2003-4-13 
使用工具: OLLYDBG 1.09b、Import REConstructor v1.4.2、PEiD0.8 
目    标: FSG 1.33本身 
平    台: Windows 2000 Server SP3 
难    度: 低 
======================================================================= 
本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢! 
======================================================================= 


FSG是一个最近比较流行的加壳软件,压缩比很高,而且似乎没有自动脱壳机。 

废话少说,我们开始: 

PEiD看一下,不能识别是什么壳,OEP也找不到。看来这个小软件是不错^o^ 

用ollydbg加载fsg133.exe,程序停留在入口,F8单步执行: 

00533124 > BE A4014000      MOV ESI,fsg133.004001A4 
00533129  AD              LODS DWORD PTR DS:[ESI] 
0053312A  93              XCHG EAX,EBX 
0053312B  AD              LODS DWORD PTR DS:[ESI] 
0053312C  97              XCHG EAX,EDI 
0053312D  AD              LODS DWORD PTR DS:[ESI] 
0053312E  56              PUSH ESI 
0053312F  96              XCHG EAX,ESI 
00533130  B2 80            MOV DL,80 
00533132  A4              MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] 
00533133  B6 80            MOV DH,80 
00533135  FF13            CALL DWORD PTR DS:[EBX] 
00533137  ^73 F9            JNB SHORT fsg133.00533132 
00533139  33C9            XOR ECX,ECX 
0053313B  FF13            CALL DWORD PTR DS:[EBX] 
0053313D  73 16            JNB SHORT fsg133.00533155 
0053313F  33C0            XOR EAX,EAX 
00533141  FF13            CALL DWORD PTR DS:[EBX] 
00533143  73 1F            JNB SHORT fsg133.00533164 
00533145  B6 80            MOV DH,80 
00533147  41              INC ECX 
00533148  B0 10            MOV AL,10 
0053314A  FF13            CALL DWORD PTR DS:[EBX] 
0053314C  12C0            ADC AL,AL 
0053314E  ^73 FA            JNB SHORT fsg133.0053314A 
00533150  75 3C            JNZ SHORT fsg133.0053318E 
00533152  AA              STOS BYTE PTR ES:[EDI] 
00533153  ^EB E0            JMP SHORT fsg133.00533135 
00533155  FF53 08          CALL DWORD PTR DS:[EBX+8] 
………… 

跟踪了一段时间之后我们发现,很多地方都要跳回00533135,我们就找到最远的一个地址: 


0053318E  56              PUSH ESI 
0053318F  8BF7            MOV ESI,EDI 
00533191  2BF0            SUB ESI,EAX 
00533193  F3:A4            REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[> 
00533195  5E              POP ESI 
00533196  ^EB 9D            JMP SHORT fsg133.00533135 
00533198  8BD6            MOV EDX,ESI 

在00533198这一行上按F2下断,F9执行,拦截之后继续F8往下走: 

00533198  8BD6            MOV EDX,ESI                              ; fsg133.00532E3A 
0053319A  5E              POP ESI 
0053319B  AD              LODS DWORD PTR DS:[ESI] 
0053319C  48              DEC EAX 
0053319D  74 0A            JE SHORT fsg133.005331A9 
0053319F  79 02            JNS SHORT fsg133.005331A3 
005331A1  AD              LODS DWORD PTR DS:[ESI] 
005331A2  50              PUSH EAX 
005331A3  56              PUSH ESI 
005331A4  8BF2            MOV ESI,EDX 
005331A6  97              XCHG EAX,EDI 
005331A7  ^EB 87            JMP SHORT fsg133.00533130 
005331A9  AD              LODS DWORD PTR DS:[ESI] 

这里又跳回00533130了,同样的道理,在005331A9下断,拦截后F8: 

005331AF  56              PUSH ESI 
005331B0  FF13            CALL DWORD PTR DS:[EBX] 
005331B2  95              XCHG EAX,EBP 
005331B3  AC              LODS BYTE PTR DS:[ESI] 
005331B4  84C0            TEST AL,AL 
005331B6  ^75 FB            JNZ SHORT fsg133.005331B3 
005331B8  FE0E            DEC BYTE PTR DS:[ESI] 
005331BA  ^74 F0            JE SHORT fsg133.005331AC 
005331BC  79 05            JNS SHORT fsg133.005331C3 
005331BE  46              INC ESI 
005331BF  AD              LODS DWORD PTR DS:[ESI] 
005331C0  50              PUSH EAX 
005331C1  EB 09            JMP SHORT fsg133.005331CC 
005331C3  FE0E            DEC BYTE PTR DS:[ESI] 
005331C5  -0F84 35DEECFF    JE fsg133.00401000 
005331CB  56              PUSH ESI 
005331CC  55              PUSH EBP 
005331CD  FF53 04          CALL DWORD PTR DS:[EBX+4] 
005331D0  AB              STOS DWORD PTR ES:[EDI] 
005331D1  ^EB E0            JMP SHORT fsg133.005331B3 

在这里我们从右边的状态栏里面可以看到,程序在循环一系列的API名,我们可以特别注意一下 


005331C5  -0F84 35DEECFF    JE fsg133.00401000 

很明显,软件在这里是恢复Import表,当完全恢复之后跳到OEP,所以这个程序OEP就是00401000,这也是很多壳采用的方法。 

剩下的事情很简单,DUMP出来之后用Import REConstructor修复,全都可以自动完成,程序执行正常。 

整理:程序有两个长时间的循环,跟踪时应该跳过;OEP地址出现在第二次循环结束之后。 

EOF==================================================================== 

BTW:DUMP出来的程序居然有1.2M,而加了壳的文件只有65k:~) 不过这个软件好像对VC编写的程序特别挑剔,加壳后经常非法操作,对汇编程序的支持倒是很好。 

·上一篇: Upx+Cryptor壳的去除
·下一篇: 暂时空缺
 
相关文章
48小时热门文章
 
48小时热门软件
48小时热门动画