吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 30430|回复: 89
收起左侧

[原创] 某网游客户端dll破解 + 脱壳(Aspack壳)+重定位修正

[复制链接]
nisila 发表于 2017-10-3 02:52
本帖最后由 nisila 于 2017-10-22 12:13 编辑

【目标程序】:ASPack加壳的GameEX.dll,是某网游客户端中的一个文件,客户端加载它之后,会实现装备属性字符的显示。链接:http://pan.baidu.com/s/1gfisyRp 密码:f550
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【调试环境】:Win2003、OllyDbg、LordPE、ImportREC
破解背景】:最近在玩一款网游(很老的网游,主要是想怀旧一下),点开每一件装备,都会显示一行绿色的字【XX特制的物品】,看着有点不爽,就想改掉它。OD载入后,查找字符串,简单分析一下就找到了字符串所在位置。
[Asm] 纯文本查看 复制代码
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:[0xA6AF9A5]
0A5EF5A9    8D45 F8         lea eax,dword ptr ss:[ebp-0x8]  //这里就是关键位置
0A5EF5AC    50              push eax
0A5EF5AD    E8 9EFBFFFF     call 0A5EF150
0A5EF5B2    8B5D F8         mov ebx,dword ptr ss:[ebp-0x8]

然后,对这段代码进行修改,如下:
[Asm] 纯文本查看 复制代码
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:[0xA6AF9A5]
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:[ebp-0x8]

让它跳转到空代码行,然后进行补代码,内容如下:
[Asm] 纯文本查看 复制代码
0A605382    B8 B253600A     mov eax,0A6053B2
0A605387    8945 F8         mov dword ptr ss:[ebp-0x8],eax
0A60538A    8D45 F8         lea eax,dword ptr ss:[ebp-0x8]


0A6053B2    A1 BA474DCC     mov eax,dword ptr ds:[0xCC4D47BA]
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特制的物品”了,当然,想要改成什么内容自己写。

QQ截图20171002232703.jpg

至此,破解的部分告一段落。因为这是一个dll,而且还加壳了,没法直接改它,只能将它脱壳

【脱壳过程】:
一、重定位表RVA + OEP

[Asm] 纯文本查看 复制代码
100E2001 >  60              pushad //进入OD后停在这
100E2002    E8 03000000     call GameEX0.100E200A
100E2007  - E9 EB045D45     jmp 556B24F7
100E200C    55              push ebp
100E200D    C3              retn


提供一个简便寻找ASPack加壳DLL的重定位处理代码段的方法!
搜索命令序列:

[Asm] 纯文本查看 复制代码
mov ecx,dword ptr ds:[esi+4]
sub ecx,8
shr ecx,1


找到在100E21E2,然后我们在100E21C6下断,F9运行,中断。

[Asm] 纯文本查看 复制代码
100E21B4    8785 99050000   xchg dword ptr ss:[ebp+0x599],eax
100E21BA    8B95 88040000   mov edx,dword ptr ss:[ebp+0x488]
100E21C0    8B85 91050000   mov eax,dword ptr ss:[ebp+0x591]
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:[ebp+0x59D] //ss:[100E25B0]=000DF000
100E21D7    03B5 88040000   add esi,dword ptr ss:[ebp+0x488]
100E21DD    833E 00         cmp dword ptr ds:[esi],0x0
100E21E0    74 61           je XGameEX0.100E2243 //现在进行下面的数据操作
100E21E2    8B4E 04         mov ecx,dword ptr ds:[esi+0x4] //找到这里
100E21E5    83E9 08         sub ecx,0x8
100E21E8    D1E9            shr ecx,1
100E21EA    8B3E            mov edi,dword ptr ds:[esi]
100E21EC    03BD 88040000   add edi,dword ptr ss:[ebp+0x488]
100E21F2    83C6 08         add esi,0x8
100E21F5    66:8B1E         mov bx,word ptr ds:[esi]
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:[esi]
100E220F    81E3 FF0F0000   and ebx,0xFFF
100E2215    66:01041F       add word ptr ds:[edi+ebx],ax
100E2219    EB 1D           jmp XGameEX0.100E2238
100E221B    66:8B1E         mov bx,word ptr ds:[esi]
100E221E    81E3 FF0F0000   and ebx,0xFFF
100E2224    66:01141F       add word ptr ds:[edi+ebx],dx
100E2228    EB 0E           jmp XGameEX0.100E2238
100E222A    66:8B1E         mov bx,word ptr ds:[esi]
100E222D    81E3 FF0F0000   and ebx,0xFFF
100E2233    01141F          add dword ptr ds:[edi+ebx],edx
100E2236    EB 00           jmp XGameEX0.100E2238
100E2238    66:830E FF      or word ptr ds:[esi],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:[ebp+0x488]
100E2249    8BB5 A5050000   mov esi,dword ptr ss:[ebp+0x5A5]    
100E224F    0BF6            or esi,esi
100E2251    74 11           je XGameEX0.100E2264


当我们中断在100E2243处时,重定位处理完毕。
得到重定位表信息:
RVA=000DF000,大小=100E050C-100DF000=0000150C
这个后面会用到。

现在我们去OEP吧,呵呵。按F9运行,在当前位置下搜索Hex值:61 75,即popad、jnz

[Asm] 纯文本查看 复制代码
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 //飞向光明之巅!


[Asm] 纯文本查看 复制代码
10017FA9  /.  55            push ebp //这里就是OEP
10017FAA  |.  8BEC          mov ebp,esp
10017FAC  |.  53            push ebx
10017FAD  |.  8B5D 08       mov ebx,[arg.1]
10017FB0  |.  56            push esi
10017FB1  |.  8B75 0C       mov esi,[arg.2]
10017FB4  |.  57            push edi
10017FB5  |.  8B7D 10       mov edi,[arg.3]
10017FB8  |.  85F6          test esi,esi
10017FBA  |.  75 09         jnz XGameEX0.10017FC5


用LordPE选中Ollydbg的loaddll.exe的进程,在下面的列表里选择GameEX.dll,然后完整脱壳,得到dumped.dll。
―――――――――――――――――――――――――――――――――

二、输入表 + PE修正
            
随便从程序找一个API调用,如:

[Asm] 纯文本查看 复制代码
10017EDD  |.  FF15 7C200210 call dword ptr ds:[0x1002207C]           ;  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,脱壳完成啦。


免费评分

参与人数 16吾爱币 +19 热心值 +15 收起 理由
deng4924 + 1 + 1 谢谢@Thanks!
caohaoa123 + 1 + 1 厉害
年轻的驾驶员 + 1 + 1 我很赞同!
夜雨凉秋 + 1 + 1 用心讨论,共获提升!
swx1993 + 1 + 1 我很赞同!
a5606495 + 1 + 1 谢谢@Thanks!
xiaoyxf + 1 + 1 大天使之剑还是奇迹啊?
lertty + 1 + 1 我很赞同!
Rain_Personal + 1 + 1 谢谢@Thanks!
overmind20 + 1 热心回复!
MaxMadcc + 1 + 1 谢谢@Thanks!
飘舞的雪花 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
liuliu666 + 1 + 1 谢谢@Thanks!
hodir52pj + 1 用心讨论,共获提升!
ljf123 + 1 + 1 谢谢@Thanks!
Poner + 5 + 1 已经处理,感谢您对吾爱破解论坛的支持!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

sungsung 发表于 2017-11-17 14:41
大神啊
我还是小白 现在想破解下zwcad 2018 目前只知道zwcad.exe启动时会调用ZwLmgrAct.dll,进行注册激活和试用的弹框

想跳过,直接打开
不知道怎么去破解

希望大神指点一二 谢谢
 楼主| nisila 发表于 2017-10-3 09:24
mmji 发表于 2017-10-3 08:11
MU!~~~果然很老了~很怀念啊,不知道楼主玩的是私服还是公服?

我玩的是私服,一个公益服,这个服很多年了
大洋航海 发表于 2017-10-3 04:27
sdaza 发表于 2017-10-3 06:33 来自手机
看看先。。
夏雨微凉 发表于 2017-10-3 07:00 来自手机
辛苦了楼主
mmji 发表于 2017-10-3 08:11
MU!~~~果然很老了~很怀念啊,不知道楼主玩的是私服还是公服?
莫语 发表于 2017-10-3 08:17
支持支持
heavyd 发表于 2017-10-3 09:03
这个可是老掉牙了啊。。呵呵
sooboo 发表于 2017-10-3 09:17
和暗黑破坏神武器有点相似呀
骑士 发表于 2017-10-3 09:42
兄弟 ,熟悉易语言吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-20 12:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表