研究新奇迹世界,脱了下Sungame.exe的壳,分享下,脱完后运行有问题,请大家帮忙看看。
脱壳步骤:
因为这个壳是把代码解压在.text .rdata 和 .data,这3个段中,所以可以认为,当这3个段都装数据了,离OEP也就不远了。
1、打开 区段 .data,在里面设置硬件访问断点,按SHIFT+F9,如果遇到异常,继续按SHIFT+F9 , 直到遇到硬件断点停在下面
0121E1EA F3:A5 rep movs dword ptr es:[edi],dword ptr ds:[esi]
ecx=000037E2 (十进制 14306.)
ds:[esi]=[01354080]=0072EA60
es:[edi]=[007A7078]=00000000
这里是在填充 区段 .data
然后删除硬件断点,往下走可以找到
01216E5F 8B55 F4 mov edx,dword ptr ss:[ebp-C]
01216E62 2B55 DC sub edx,dword ptr ss:[ebp-24]
01216E65 FFD2 call edx ;;;;;oep = edx = 006A176E
01216E67 8945 FC mov dword ptr ss:[ebp-4],eax
01216E6A 8B45 FC mov eax,dword ptr ss:[ebp-4]
01216E6D 5E pop esi
006A176E 6A 60 push 60 ;OEP,没有STOLEN CODE ,很幸运
006A1770 68 88AA7800 push Sungame.0078AA88
006A1775 E8 263F0000 call Sungame.006A56A0
006A177A BF 94000000 mov edi,94
006A177F 8BC7 mov eax,edi
006A1781 E8 EACAFFFF call Sungame.0069E270
006A1786 8965 E8 mov dword ptr ss:[ebp-18],esp
006A1789 8BF4 mov esi,esp
006A178B 893E mov dword ptr ds:[esi],edi
006A178D 56 push esi
006A178E FF15 B0A07500 call dword ptr ds:[75A0B0] ; kernel32.GetVersionExA
006A1794 8B4E 10 mov ecx,dword ptr ds:[esi+10]
006A1797 890D 74D18400 mov dword ptr ds:[84D174],ecx
006A179D 8B46 04 mov eax,dword ptr ds:[esi+4]
006A17A0 A3 80D18400 mov dword ptr ds:[84D180],eax
006A17A5 8B56 08 mov edx,dword ptr ds:[esi+8]
006A17A8 8915 84D18400 mov dword ptr ds:[84D184],edx
006A17AE 8B76 0C mov esi,dword ptr ds:[esi+C]
006A17B1 81E6 FF7F0000 and esi,7FFF
006A17B7 8935 78D18400 mov dword ptr ds:[84D178],esi
006A17BD 83F9 02 cmp ecx,2
VC++7.0的OEP入口代码如下:
00618693 6A 60 push 60 ; OEP
00618695 68 E8156C00 push 006C15E8
0061869A E8 81420000 call 0061C920
0061869F BF 94000000 mov edi, 94
006186A4 8BC7 mov eax, edi
006186A6 E8 35E3FFFF call 006169E0
006186AB 8965 E8 mov dword ptr [ebp-18], esp
006186AE 8BF4 mov esi, esp
006186B0 893E mov dword ptr [esi], edi
006186B2 56 push esi
006186B3 FF15 88D06900 call dword ptr [69D088] ; kernel32.GetVersionExA
006186B9 8B4E 10 mov ecx, dword ptr [esi+10]
006186BC 890D FC917200 mov dword ptr [7291FC], ecx
006186C2 8B46 04 mov eax, dword ptr [esi+4]
机器码如下:
6A 60 68 E8 15 6C 00 E8 81 42 00 00 BF 94 00 00 00 8B C7 E8 35 E3 FF FF 89 65 E8 8B F4 89 3E 56 FF 15 88 D0 69 00 8B 4E
然后DUMP,修复IAT的时候,发现了42个无效函数,在程序里看了看,无效的那几个都是空的,所以直接剪切掉,最后修复。
[课程]FART 脱壳王!加量不加价!FART作者讲授!