某网游客户端dll破解 + 脱壳(Aspack壳)+重定位修正
本帖最后由 nisila 于 2017-10-22 12:13 编辑【目标程序】:ASPack加壳的GameEX.dll,是某网游客户端中的一个文件,客户端加载它之后,会实现装备属性字符的显示。链接:http://pan.baidu.com/s/1gfisyRp 密码:f550
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【调试环境】:Win2003、Ollydbg、LordPE、ImportREC
【破解背景】:最近在玩一款网游(很老的网游,主要是想怀旧一下),点开每一件装备,都会显示一行绿色的字【XX特制的物品】,看着有点不爽,就想改掉它。OD载入后,查找字符串,简单分析一下就找到了字符串所在位置。
0A5EF595 53 push ebx
0A5EF596 E8 2E870000 call 0A5F7CC9
0A5EF59B 83C4 04 add esp,0x4
0A5EF59E 68 00000000 push 0x0
0A5EF5A3 FF35 A5F96A0A push dword ptr ds:
0A5EF5A9 8D45 F8 lea eax,dword ptr ss://这里就是关键位置
0A5EF5AC 50 push eax
0A5EF5AD E8 9EFBFFFF call 0A5EF150
0A5EF5B2 8B5D F8 mov ebx,dword ptr ss:
然后,对这段代码进行修改,如下:
0A5EF595 53 push ebx
0A5EF596 E8 2E870000 call 0A5F7CC9
0A5EF59B 83C4 04 add esp,0x4
0A5EF59E 68 00000000 push 0x0
0A5EF5A3 FF35 A5F96A0A push dword ptr ds:
0A5EF5A9 E9 D45D0100 jmp 0A605382
0A5EF5AE 90 nop
0A5EF5AF 90 nop
0A5EF5B0 90 nop
0A5EF5B1 90 nop
0A5EF5B2 8B5D F8 mov ebx,dword ptr ss:
让它跳转到空代码行,然后进行补代码,内容如下:
0A605382 B8 B253600A mov eax,0A6053B2
0A605387 8945 F8 mov dword ptr ss:,eax
0A60538A 8D45 F8 lea eax,dword ptr ss:
0A6053B2 A1 BA474DCC mov eax,dword ptr ds:
0A6053B7 D8D6 fcom st(6)
0A6053B9 C6 ???
0A6053BA B5 C4 mov ch,0xC4
0A6053BC CE into
0A6053BD EF out dx,eax
0A6053BE C6 ???
0A6053BF B7 A1 mov bh,0xA1
0A6053C1 BB 00000000 mov ebx,0x0
改完之后,切换到游戏界面看一下效果,被我改成了“GM特制的物品”了,当然,想要改成什么内容自己写。
至此,破解的部分告一段落。因为这是一个dll,而且还加壳了,没法直接改它,只能将它脱壳。
【脱壳过程】:
一、重定位表RVA + OEP
100E2001 >60 pushad //进入OD后停在这
100E2002 E8 03000000 call GameEX0.100E200A
100E2007- E9 EB045D45 jmp 556B24F7
100E200C 55 push ebp
100E200D C3 retn
提供一个简便寻找ASPack加壳DLL的重定位处理代码段的方法!
搜索命令序列:
mov ecx,dword ptr ds:
sub ecx,8
shr ecx,1
找到在100E21E2,然后我们在100E21C6下断,F9运行,中断。
100E21B4 8785 99050000 xchg dword ptr ss:,eax
100E21BA 8B95 88040000 mov edx,dword ptr ss:
100E21C0 8B85 91050000 mov eax,dword ptr ss:
100E21C6 2BD0 sub edx,eax
100E21C8 74 79 je XGameEX0.100E2243 //可以在这里改标志位Z=0
100E21CA 8BC2 mov eax,edx
100E21CC C1E8 10 shr eax,0x10
100E21CF 33DB xor ebx,ebx
100E21D1 8BB5 9D050000 mov esi,dword ptr ss: //ss:=000DF000
100E21D7 03B5 88040000 add esi,dword ptr ss:
100E21DD 833E 00 cmp dword ptr ds:,0x0
100E21E0 74 61 je XGameEX0.100E2243 //现在进行下面的数据操作
100E21E2 8B4E 04 mov ecx,dword ptr ds: //找到这里
100E21E5 83E9 08 sub ecx,0x8
100E21E8 D1E9 shr ecx,1
100E21EA 8B3E mov edi,dword ptr ds:
100E21EC 03BD 88040000 add edi,dword ptr ss:
100E21F2 83C6 08 add esi,0x8
100E21F5 66:8B1E mov bx,word ptr ds:
100E21F8 C1EB 0C shr ebx,0xC
100E21FB 83FB 01 cmp ebx,0x1
100E21FE 74 0C je XGameEX0.100E220C
100E2200 83FB 02 cmp ebx,0x2
100E2203 74 16 je XGameEX0.100E221B
100E2205 83FB 03 cmp ebx,0x3
100E2208 74 20 je XGameEX0.100E222A
100E220A EB 2C jmp XGameEX0.100E2238
100E220C 66:8B1E mov bx,word ptr ds:
100E220F 81E3 FF0F0000 and ebx,0xFFF
100E2215 66:01041F add word ptr ds:,ax
100E2219 EB 1D jmp XGameEX0.100E2238
100E221B 66:8B1E mov bx,word ptr ds:
100E221E 81E3 FF0F0000 and ebx,0xFFF
100E2224 66:01141F add word ptr ds:,dx
100E2228 EB 0E jmp XGameEX0.100E2238
100E222A 66:8B1E mov bx,word ptr ds:
100E222D 81E3 FF0F0000 and ebx,0xFFF
100E2233 01141F add dword ptr ds:,edx
100E2236 EB 00 jmp XGameEX0.100E2238
100E2238 66:830E FF or word ptr ds:,0xFFFF //这里把许多重定位数据变为FFFF ★ NOP掉!
100E223C 83C6 02 add esi,0x2
100E223F^ E2 B4 loopd XGameEX0.100E21F5
100E2241^ EB 9A jmp XGameEX0.100E21DD //循环处理
100E2243 8B95 88040000 mov edx,dword ptr ss:
100E2249 8BB5 A5050000 mov esi,dword ptr ss:
100E224F 0BF6 or esi,esi
100E2251 74 11 je XGameEX0.100E2264
当我们中断在100E2243处时,重定位处理完毕。
得到重定位表信息:
RVA=000DF000,大小=100E050C-100DF000=0000150C
这个后面会用到。
现在我们去OEP吧,呵呵。按F9运行,在当前位置下搜索Hex值:61 75,即popad、jnz
100E2415 61 popad //找到这里,下断!
100E2416 75 08 jnz XGameEX0.100E2420
100E2418 B8 01000000 mov eax,0x1
100E241D C2 0C00 retn 0xC
100E2420 68 00000000 push 0x0
100E2425 C3 retn //飞向光明之巅!
10017FA9/.55 push ebp //这里就是OEP
10017FAA|.8BEC mov ebp,esp
10017FAC|.53 push ebx
10017FAD|.8B5D 08 mov ebx,
10017FB0|.56 push esi
10017FB1|.8B75 0C mov esi,
10017FB4|.57 push edi
10017FB5|.8B7D 10 mov edi,
10017FB8|.85F6 test esi,esi
10017FBA|.75 09 jnz XGameEX0.10017FC5
用LordPE选中Ollydbg的loaddll.exe的进程,在下面的列表里选择GameEX.dll,然后完整脱壳,得到dumped.dll。
―――――――――――――――――――――――――――――――――
二、输入表 + PE修正
随便从程序找一个API调用,如:
10017EDD|.FF15 7C200210 call dword ptr ds: ;KERNEL32.GetVersion;
在转存中跟随1002207C,上下看到许多函数地址,很明显的可以找到IAT开始和结束的地址:
开始地址=10022000
结束地址=10022138
运行ImportREC,注意:去掉“使用来自磁盘的PE部首”的选项!
选中Ollydbg的loaddll.exe的进程,然后点“选取DLL”,选择GameEX.dll,填入RVA=00022000、大小=00000138 ,得到输入表。改OEP=00017FA9,FixDump!
用LordPE修正dumped_.dll的重定位表RVA=000DF000、大小=0000150C,保存。
再用LordPE修正dumped_.dll的基址为10000000,保存,重建PE,脱壳完成啦。
大神啊
我还是小白 现在想破解下zwcad 2018 目前只知道zwcad.exe启动时会调用ZwLmgrAct.dll,进行注册激活和试用的弹框
想跳过,直接打开
不知道怎么去破解
希望大神指点一二 谢谢 mmji 发表于 2017-10-3 08:11
MU!~~~果然很老了~很怀念啊,不知道楼主玩的是私服还是公服?
我玩的是私服,一个公益服,这个服很多年了 沙发哦第一次呢,不知道什么游戏 看看先。。 辛苦了楼主 MU!~~~果然很老了~很怀念啊,不知道楼主玩的是私服还是公服? 支持支持 这个可是老掉牙了啊。。呵呵 和暗黑破坏神武器有点相似呀 兄弟 ,熟悉易语言吗