能力值:
(RANK:2210 )
2 楼
我以前写的东东,希望对你有帮助
---------------------------------------------------------------------
脱FSG壳体会 BY 逍遥风
看了《破解实例信息资源》手动脱壳入门第十五篇 FSG 1.33脱壳,基本看不懂里面的方法。
于是自己还是用笨方法F8手动跟踪,跟踪过程中得到些心得,与大家分享。
先用OD,载入“《破解实例信息资源》手动脱壳入门第十五篇 FSG 1.33脱壳”中带的用VB写的小程序。
停在这里:
00404B58 > BE A4014000 MOV ESI,fsg1_33.004001A4
00404B5D AD LODS DWORD PTR DS:[ESI]
00404B5E 93 XCHG EAX,EBX
00404B5F AD LODS DWORD PTR DS:[ESI]
00404B60 97 XCHG EAX,EDI
00404B61 AD LODS DWORD PTR DS:[ESI]
00404B62 56 PUSH ESI
00404B63 96 XCHG EAX,ESI
00404B64 B2 80 MOV DL,80
00404B66 A4 MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
00404B67 B6 80 MOV DH,80
00404B69 FF13 CALL DWORD PTR DS:[EBX]
00404B6B ^ 73 F9 JNB SHORT fsg1_33.00404B66
00404B6D 33C9 XOR ECX,ECX
00404B6F FF13 CALL DWORD PTR DS:[EBX]
00404B71 73 16 JNB SHORT fsg1_33.00404B89
00404B73 33C0 XOR EAX,EAX
00404B75 FF13 CALL DWORD PTR DS:[EBX]
00404B77 73 1F JNB SHORT fsg1_33.00404B98
一路F8向下走,所有的CALL用F8步过,遇到往回跳的地方,用F4跳过。
一直到(注意最后一句,00404BE4那个地方)
00404BE1 AD LODS DWORD PTR DS:[ESI]
00404BE2 97 XCHG EAX,EDI
00404BE3 56 PUSH ESI
00404BE4 FF13 CALL DWORD PTR DS:[EBX] ; KERNEL32.LoadLibraryA (注意这里)
当到0040BE4时,出现一句 “KERNEL32.LoadLibraryA”。再往下跟一点就到OEP了
00404BE8 84C0 TEST AL,AL
00404BEA ^ 75 FB JNZ SHORT fsg1_33.00404BE7
00404BEC FE0E DEC BYTE PTR DS:[ESI]
00404BEE ^ 74 F0 JE SHORT fsg1_33.00404BE0
00404BF0 79 05 JNS SHORT fsg1_33.00404BF7
00404BF2 46 INC ESI
00404BF3 AD LODS DWORD PTR DS:[ESI]
00404BF4 50 PUSH EAX
00404BF5 EB 09 JMP SHORT fsg1_33.00404C00
00404BF7 FE0E DEC BYTE PTR DS:[ESI]
00404BF9 - 0F84 61C5FFFF JE fsg1_33.00401160 (00401160就是OEP)
用F8实在太慢,思考一阵。发现一个比较简单的方法。
重新载入程序,ALT+M,打开内存景象,找到第一个属主为KERNEL32的地方。
内存映射, 条目 15
地址=77E60000
大小=00001000 (4096.)
属主=KERNEL32 77E60000 (自身)
区段=
包含=PE 文件头
类型=Imag 01001002
访问=R
初始访问=RWE
在77E60000处下断,F9运行程序,来到
77F83141 66:8139 4D5A CMP WORD PTR DS:[ECX],5A4D
77F83146 75 1D JNZ SHORT ntdll.77F83165
77F83148 8B51 3C MOV EDX,DWORD PTR DS:[ECX+3C]
77F8314B 81FA 00000010 CMP EDX,10000000
77F83151 73 12 JNB SHORT ntdll.77F83165
77F83153 8D0411 LEA EAX,DWORD PTR DS:[ECX+EDX]
77F83156 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX
77F83159 8138 50450000 CMP DWORD PTR DS:[EAX],4550
77F8315F 0F85 59DD0200 JNZ ntdll.77FB0EBE
77F83165 834D FC FF OR DWORD PTR SS:[EBP-4],FFFFFFFF
77F83169 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
77F8316C 64:890D 0000000>MOV DWORD PTR FS:[0],ECX
用ALT+F9回去,
来到这里
00404BE6 95 XCHG EAX,EBP
00404BE7 AC LODS BYTE PTR DS:[ESI]
00404BE8 84C0 TEST AL,AL
00404BEA ^ 75 FB JNZ SHORT fsg1_33.00404BE7
00404BEC FE0E DEC BYTE PTR DS:[ESI]
00404BEE ^ 74 F0 JE SHORT fsg1_33.00404BE0
00404BF0 79 05 JNS SHORT fsg1_33.00404BF7
00404BF2 46 INC ESI
00404BF3 AD LODS DWORD PTR DS:[ESI]
00404BF4 50 PUSH EAX
00404BF5 EB 09 JMP SHORT fsg1_33.00404C00
00404BF7 FE0E DEC BYTE PTR DS:[ESI] (这里比较特别,不知道能不能当作特征码)
00404BF9 - 0F84 61C5FFFF JE fsg1_33.00401160 (这个怪跳转后面的地址00401160就是OEP了)
方法总结:1)载入程序后,打开内存镜像(ALT+M),在第一处或第二处属主为KERNEL32的地方下断。
2)F9运行程序,ALT+F9回到程序领空。
3)F8向下找到一处在“DEC BYTE PTR DS:[ESI]”下面一句,(如:上面的00404BF9 )跳转的地址就是程序OEP
用这个方法把“《破解实例信息资源》手动脱壳入门第十五篇 FSG 1.33脱壳”后面另附的CRACKME
的壳也顺利脱掉了。感觉还不错。
----------------------------------------------------------------------
能力值:
( LV9,RANK:3410 )
3 楼
找脱壳机
不过此人发的软件一般都有校验
能力值:
( LV2,RANK:10 )
4 楼
SMC 压缩壳我都懒的脱
能力值:
( LV2,RANK:10 )
5 楼
现在调试到此了。
00406ABF FF13 CALL DWORD PTR DS:[EBX]
00406AC1 95 XCHG EAX,EBP
00406AC2 AC LODS BYTE PTR DS:[ESI]
00406AC3 84C0 TEST AL,AL
00406AC5 ^ 75 FB JNZ SHORT passxp0.00406AC2
00406AC7 FE0E DEC BYTE PTR DS:[ESI]
00406AC9 ^ 74 F0 JE SHORT passxp0.00406ABB
00406ACB 79 05 JNS SHORT passxp0.00406AD2
00406ACD 46 INC ESI
00406ACE AD LODS DWORD PTR DS:[ESI]
00406ACF 50 PUSH EAX
00406AD0 EB 09 JMP SHORT passxp0.00406ADB
00406AD2 FE0E DEC BYTE PTR DS:[ESI]
00406AD4 - 0F84 6EA5FFFF JE passxp0.00401048
看到那个00401048应该就是oep的了,enter进入。得到
00401048 68 DB 68 ; CHAR 'h'
00401049 28 DB 28 ; CHAR '('
0040104A 13 DB 13
0040104B 40 DB 40 ; CHAR '@'
0040104C 00 DB 00
0040104D E8 DB E8
0040104E F0 DB F0
0040104F FF DB FF
00401050 FF DB FF
00401051 FF DB FF
00401052 00 DB 00
00401053 00 DB 00
00401054 00 DB 00
00401055 00 DB 00
00401056 00 DB 00
00401057 00 DB 00
对00401048F2设断,F9运行,F2取消下端。然后分析”--“从模块中删除分析得到。脱之。得到的程序却不能运行!不知道我的方法是不是有问题的。用PE查是Microsoft Visual Basic 5.0 / 6.0。看来是壳脱了,,要修复?
能力值:
( LV6,RANK:90 )
6 楼
然后分析”--“从模块中删除分析得到???
http://bbs.pediy.com/showthread.php?s=&threadid=22159这是我以前的垃圾文章,00406AD4 - 0F84 6EA5FFFF je passxp.00401048
下断后直接dump,就可以运行啦(xp1)