【破解作者】 stasi[DCM][BCG][DFCG][FCG][OCN][CZG][D.4s]
【作者邮箱】 [email]stasi@163.com[/email]
【作者主页】 stasi.7169.com
【使用工具】 ollydbg winhex
【破解平台】 Win9x/NT/2000/XP
【软件名称】 封神榜挂机加速外挂2.1
【下载地址】 www.wgdown.com祈祷工作室
【软件简介】 封神榜变态外挂:需收费用户才能正常使用;
本外挂收费为300元/年(提供升级)
200元/半年(提供升级)
【软件大小】 5m
【加壳方式】 aspack
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】
看了Lenus刚写的《浅谈脱壳中的附加数据问题(overlay)》一文,大呼过瘾,概念明晰,结构清爽!
正好看到论坛里有人给了东西,我就拿来自学了:)
peid ->ASPack 2.12 -> Alexey Solodovnikov [重叠]
怎么脱壳和文章无关,stripper或修api都可以的
运行脱壳后的东西,弹出搭建之星的对话框,说明原有的尾部数据没有被正确读入,要修正的!
理论部分可以看《浅弹》,我写就有点垃圾了,可以跳过不看:)
00616070 8B45 F8 mov eax,dword ptr ss:[ebp-8]
00616073 BA B0616100 mov edx,fsbwg21.006161B0 ; ASCII "FSJM IPD W32"
00616078 E8 DBEDDEFF call fsbwg21.00404E58
0061607D 0F85 E4000000 jnz fsbwg21.00616167
00616083 8B03 mov eax,dword ptr ds:[ebx]
00616085 8B10 mov edx,dword ptr ds:[eax]
00616087 FF12 call dword ptr ds:[edx]
ds:[0041CD34]=004218B4 (fsbwg21.004218B4)
00616089 52 push edx
0061608A 50 push eax
0061608B 8B06 mov eax,dword ptr ds:[esi]
0061608D 99 cdq
0061608E 290424 sub dword ptr ss:[esp],eax
eax=0000000C
Stack ss:[0012FF24]=000D267F
00616091 195424 04 sbb dword ptr ss:[esp+4],edx
00616095 58 pop eax
00616096 5A pop edx
00616097 83E8 08 sub eax,8
0061609A 83DA 00 sbb edx,0
0061609D 52 push edx
0061609E 50 push eax
0061609F 8B03 mov eax,dword ptr ds:[ebx]
006160A1 E8 FAB7E0FF call fsbwg21.004218A0
004218A0=fsbwg21.004218A0
006160A6 8D55 F0 lea edx,dword ptr ss:[ebp-10]
006160A9 8B03 mov eax,dword ptr ds:[ebx]
006160AB B9 04000000 mov ecx,4
006160B0 E8 F7B9E0FF call fsbwg21.00421AAC
006160B5 8B45 F0 mov eax,dword ptr ss:[ebp-10]
Stack ss:[0012FF58]=000D265A
006160B8 99 cdq
006160B9 52 push edx
006160BA 50 push eax
006160BB 8B03 mov eax,dword ptr ds:[ebx]
006160BD E8 DEB7E0FF call fsbwg21.004218A0
006160C2 8BD6 mov edx,esi
006160C4 8B03 mov eax,dword ptr ds:[ebx]
006160C6 B9 04000000 mov ecx,4
006160CB E8 DCB9E0FF call fsbwg21.00421AAC
006160D0 8B06 mov eax,dword ptr ds:[esi]
006160D2 3B45 F0 cmp eax,dword ptr ss:[ebp-10]
006160D5 74 37 je short fsbwg21.0061610E
006160D7 8D45 F8 lea eax,dword ptr ss:[ebp-8]
006160DA 8B16 mov edx,dword ptr ds:[esi]
006160DC E8 B7EFDEFF call fsbwg21.00405098
006160E1 8B55 F8 mov edx,dword ptr ss:[ebp-8]
006160E4 8B03 mov eax,dword ptr ds:[ebx]
006160E6 8B0E mov ecx,dword ptr ds:[esi]
006160E8 E8 BFB9E0FF call fsbwg21.00421AAC
006160ED 8BD6 mov edx,esi
006160EF 8B03 mov eax,dword ptr ds:[ebx]
006160F1 B9 04000000 mov ecx,4
006160F6 E8 B1B9E0FF call fsbwg21.00421AAC
006160FB A1 342E6200 mov eax,dword ptr ds:[622E34]
00616100 8B00 mov eax,dword ptr ds:[eax]
00616102 8B0E mov ecx,dword ptr ds:[esi]
00616104 8B55 F8 mov edx,dword ptr ss:[ebp-8]
00616107 8B38 mov edi,dword ptr ds:[eax]
00616109 FF57 3C call dword ptr ds:[edi+3C]
0061610C ^ EB B4 jmp short fsbwg21.006160C2
0061610E 8D55 E4 lea edx,dword ptr ss:[ebp-1C]
00616111 A1 342D6200 mov eax,dword ptr ds:[622D34]
00616116 8B00 mov eax,dword ptr ds:[eax]
00616118 E8 8B15E9FF call fsbwg21.004A76A8
0061611D 8B45 E4 mov eax,dword ptr ss:[ebp-1C]
00616120 8D55 E8 lea edx,dword ptr ss:[ebp-18]
00616123 E8 4841DFFF call fsbwg21.0040A270
00616128 8B55 E8 mov edx,dword ptr ss:[ebp-18]
0061612B A1 242B6200 mov eax,dword ptr ds:[622B24]
00616130 E8 6BE9DEFF call fsbwg21.00404AA0
00616135 8D4D DC lea ecx,dword ptr ss:[ebp-24]
00616138 A1 342E6200 mov eax,dword ptr ds:[622E34]
0061613D 8B00 mov eax,dword ptr ds:[eax]
0061613F 33D2 xor edx,edx
00616141 8B18 mov ebx,dword ptr ds:[eax]
00616143 FF53 0C call dword ptr ds:[ebx+C]
00616146 8B55 DC mov edx,dword ptr ss:[ebp-24]
00616149 8D4D E0 lea ecx,dword ptr ss:[ebp-20]
0061614C A1 242B6200 mov eax,dword ptr ds:[622B24]
00616151 8B00 mov eax,dword ptr ds:[eax]
00616153 E8 740BEBFF call fsbwg21.004C6CCC
00616158 8B55 E0 mov edx,dword ptr ss:[ebp-20]
0061615B 8B45 FC mov eax,dword ptr ss:[ebp-4]
0061615E E8 3DE9DEFF call fsbwg21.00404AA0
00616163 B3 01 mov bl,1
00616165 EB 0D jmp short fsbwg21.00616174
00616167 8B03 mov eax,dword ptr ds:[ebx]
00616169 E8 8EDADEFF call fsbwg21.00403BFC
0061616E 33C0 xor eax,eax
00616170 8903 mov dword ptr ds:[ebx],eax
00616172 33DB xor ebx,ebx
00616174 33C0 xor eax,eax
00616176 5A pop edx
00616177 59 pop ecx
00616178 59 pop ecx
00616179 64:8910 mov dword ptr fs:[eax],edx
0061617C 68 9E616100 push fsbwg21.0061619E
00616181 8D45 DC lea eax,dword ptr ss:[ebp-24]
00616184 BA 05000000 mov edx,5
00616189 E8 E2E8DEFF call fsbwg21.00404A70
0061618E 8D45 F8 lea eax,dword ptr ss:[ebp-8]
00616191 E8 B6E8DEFF call fsbwg21.00404A4C
00616196 C3 retn
00616197 ^ E9 08E2DEFF jmp fsbwg21.004043A4
0061619C ^ EB E3 jmp short fsbwg21.00616181
0061619E 8BC3 mov eax,ebx
006161A0 5F pop edi
006161A1 5E pop esi
006161A2 5B pop ebx
006161A3 8BE5 mov esp,ebp
006161A5 5D pop ebp
006161A6 C3 retn
看api参考:
DWORD SetFilePointer(
HANDLE hFile, //在用CreateFileA打开后得到的文件句柄
LONG lDistanceToMove, //要移动的距离,这个是低32位
PLONG lpDistanceToMoveHigh, //要移动的距离,这是高32位,要注意这是一个指向数据的指针
DWORD dwMoveMethod //表示指针开始的位置
);
winhex里,未脱壳的尾部数据:
000d264dh: 4E 3E 4E 3E 0A 4E 3E 4E 3E 00 00 00 00 09 00 00 ; N>N>.N>N>.......
000d265dh: 00 2E 5C 66 73 62 2E 49 50 44 00 24 0C 00 5A 26 ; ..\fsb.IPD.$..Z&
000d266dh: 0D 00 20 20 20 20 46 53 4A 4D 20 49 50 44 20 57 ; .. FSJM IPD W
000d267dh: 33 32 ; 32
000C2400就对应:DWORD dwMoveMethod
000D265A就是指向长度的偏移地址
所以修复的两个要点就是overlay的长度和overlay的开始地址!
要做的就是选中整个overlay的数据段,copy到脱壳文件里。
选000C2400为段开始,选000D267E为段结束,这就是整个overlay的数据段,编辑-》复制选块-》正常。
winhex打开脱壳后文件,不需要费心找空白的地方,直接在最后一字节后paste,因为winhex可以自动扩展文件长度。
paste后文件尾部地址和数据情况:
00259a4dh: 4E 3E 4E 3E 0A 4E 3E 4E 3E 00 00 00 00 09 00 00 ; N>N>.N>N>.......
00259a5dh: 00 2E 5C 66 73 62 2E 49 50 44 00 24 0C 00 5A 26 ; ..\fsb.IPD.$..Z&
00259a6dh: 0D 00 20 20 20 20 46 53 4A 4D 20 49 50 44 20 57 ; .. FSJM IPD W
00259a7dh: 33 32
; 32
查看长度地址09的偏移量为00259A5A
所以修改000D265A为00259A5A
修改overlay数据开始地址,修改000C2400为00249800
修改后数据情况:
00259a4dh: 4E 3E 4E 3E 0A 4E 3E 4E 3E 00 00 00 00 09 00 00 ; N>N>.N>N>.......
00259a5dh: 00 2E 5C 66 73 62 2E 49 50 44 00 98 24 00 5A 9A ; ..\fsb.IPD.?.Z?
0259a6dh: 25 00 20 20 20 20 46 53 4A 4D 20 49 50 44 20 57 ; %. FSJM IPD W
00259a7dh: 33 32 ; 32
保存就ok了:)
--------------------------------------------------------------------------------
【破解总结】
这类overlay问题和《浅谈脱壳中的附加数据问题(overlay)》所提到的overkay问题好象
是同属一个问题的两个类型。本文提到的overlay的处理时,是不能运用《浅谈》一文里爆
句的方法,因为这里的数据虽然是附加数据,但是文件数据的主体的一部分,缺少这部分数
据,文件虽然能运行,但却是没有意义的!所以只能手动修正尾部的overlay数据。
这种数据产生的原因大概是dephi对附加资源的保存过程中产生的,具体流程不太了解:(
以下给出这类dephi的overlay数据手动处理的快捷方法,无须使用ollydbg,有点机械,如有
错误望指出。
1)脱掉主文件的壳,修复错误的输入表
2)16进制编辑器打开原文件,查找文本“f2000”把所得的偏移量减去5就是原文件里overlay
数据的开始地址,copy至文件尾部。
3)打开脱壳后文件,从文件最后一字节,开始粘贴,并记起始地址为A.
4)再查找文本“FSJM IPD W32”,所得的偏移量减去C就是存放起始地址的地方,用地址A代替
(注意数据的保存方式)
5)最后用存放起始地址的地方前最近的“00 00 00 00”后一个字节的偏移量替换存放起始地
址后的4字节的内容,保存就ok!
其实最好就是把外挂省下的钱给点xikug,forgot,老罗...写个工具出来,“他们那个都是编程
强人,说了少了,他不干,俺啊俺啊...”:)
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)