吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3403|回复: 11
收起左侧

[会员申请] 申请会员ID:ying_epdc【申请通过】

[复制链接]
吾爱游客  发表于 2015-4-12 16:16
1、申 请 I D :ying_epdc
2、个人邮箱:ying_epdc@163.com
3、原创技术文章:

用数据追踪和断点的方法修复游戏的bug:
举一个例子,这是一个经典游戏英雄无敌3的一个经典的bug,现在我们可以利用反汇编的方法来修复这个bug,
我利用的软件是Cheat Engine,这个软件断点追踪的功能非常强大。
这个bug详细情况如下:
利用事件偷兵

版本不明
前提:
1、地图设定了加兵事件(废话 )
2、带兵英雄激发事件的时候,英雄所带兵与事件中所加兵合起来超过英雄队伍里的7个兵位,放不下所有的兵。举个例子,你英雄带了3队兵,而事件中兵不少于5种。注意:是3队兵,而不是三种兵。也就是说,你可以只带一种兵,把它分成N队,只要N+事件兵不少于8个兵位就行了。(这里有一个需要注意的情况是,如果英雄队伍中有与事件所加兵相同的兵种,那么在加兵时候电脑会自动将二者合而为一,这种情况下只能算一个兵位。)

过程:
1、触发事件,出现一个对话框,提示如何处理多出来的兵种问题,这时候点击英雄头像
2、出现英雄详细资料界面。理论上,只要出现了这个界面,无限加兵事件就算成功完成了一次。
这时候可以什么都不做,也可以调动兵种占位,或者解雇兵种
3、退出此界面,界面回到第3步的对话框,这时候也可以什么都不做,也可以调换兵种,或者重新排列兵位,反正确保下次触发事件之时能保证第2个前提就行。
4、英雄后退一步或者前进一步,然后再次触发事件……


追踪事件加兵的兵数量得到代码005189F6 - lea edi,[ebp-000000A0](把事件加兵的兵数量放置到调整兵力界面的代码)
在005189F6处断点,一路按步过功能,直到出现调整兵力界面,定位到代码00518C2A - add esp,0C
用518C2A的返回地址519493作跳转分析,看看是518C25处的代码产生bug还是上层指令的另外一个子指令产生bug
519493的跳转分析:
正常情况时的跳转过程
5194df
519503
bug时的跳转过程
5194a0
5194df
519503
分析是什么原因让5194a0跳转
发现正常情况下和bug时0051948E - call 0040A92A让edx产生不同的值
即518C2A处的函数的上级指令及其子指令与产生bug无关,是518C25该处的指令或其下级指令产生bug
由于上面提到的edx是ebp+0c处记录的地址处的数据,所以要我们要分析ebp+0c记录的地址处的数据,
从519473处断点,重新去碰触加兵事件,直到断开,然后把查看内存字节那里定位到ebp+0c记录的地址处
然后一路步过,然后按正常加兵,退出界面,ebp+0c记录的地址处的数据一直没有改变
重新从519473处断点,字节查看器定位到ebp+0c记录的地址处,碰触事件,一路按步过,按bug的方法加兵,发现进入英雄界面瞬间ebp+0c处的数据变化了。这时,我们就找到了bug产生的原因了,就是那个ebp+0c记录的地址处的数据改变造成了bug。
按上一步的步骤,追踪ebp+0c记录地址处的数据,看看是什么代码改变了这里的数据,发现0056A8D9 - mov [ecx],edx改变了该处的数据。
上面分析到是518C2A该处的指令或其下级指令产生bug,而56A8D9是改变ebp+c数据的元凶,518C25该处的指令应该有一个途径到达56A8D9这个地方,我们截断这个途径就可以了。
在这之前我们先把指令0056A8D9 - mov [ecx],edx的返回地址记录一下,返回地址的意思是返回上一层指令,这些一层层的上级指令应该与bug的产生有一个连接的途径。
56A8D9的返回地址:
0042A8BD
0043CBCA
00579FEF
006EF708
006E96CE
0042305B
0072A06E
0073024E
00729F99
006EA072
00518C2A
00519493
004E833F
00426C4E
00429CC6
004289C7
004279FF
0052C965
0058D4E3
现在看到什么了吧?0056A8D9的返回地址刚好有一个00518C2A,而我们刚才分析过是518C25该处的指令或其下级指令产生bug。
从指令开始,用断点和代码分析的方法(就是在函数开始的地方断点,一边按步过,一边分析代码描述的寄存器数据情况,以及分析代码的含义),根据56A8D9的返回地址逐层分析子指令,发现逐层指令都没有特殊的跳转,也不用怎么分析,直接下一层指令。发现返回地址006E96CE有一个代码006E96A9 - jmp dword ptr [ecx*4+006E987A],是点击根据兵力调整界面的不同格子,edx有不同的数据产生,且根据这些不同的数据跳转到不同的地方。可以判断为这条代码判断玩家点击的格子。其中点击英雄头像时edx固定为09,我们可以让代码当edx为09时跳转到没有意义的地方,就可以修复这个bug了。
现在我们可以开始写代码了:
6e96a3-----jmp 6e95ef
mov cl,[edx+006E9882]
cmp edx,09
je 006E96DA
jmp 6e96a9

最后转换为机器码:
把2e96a3改为E947FFFFFF90,把2e95ef改为8A8A82986E0083FA090F84DC000000E9A6000000





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

Hmily 发表于 2015-4-12 23:04
是原创?
蚯蚓翔龙 发表于 2015-4-12 23:13
似乎在贴吧和百度知道看到过类似的帖子。。。
吾爱游客  发表于 2015-4-13 16:23
不知道游客能不能回复。我就是英雄无敌3吧的truthlove,如果经常有去英雄无敌3吧,应该有看到我发的贴,大部分都是利用反汇编写的代码。而这个用断点分析代码的文章也是早些时候写的,用意是希望更多的人加入,一起制作的mod。而那段时间刚好就是育碧正要发售高清版英雄无敌3的时候,因为育碧说到了他们丢失了源代码,而用了一个最原始的版本制作高清版,造成了很多玩家不满。而我之前也有研究其他mod的经历,也为修改英雄无敌3准备了一些资料。所以发布了很多修改代码,同时也写了这篇文章。意在告诉大家,只要有诚意,就算没有源代码,也可以开发mod。现在大大应该相信这篇文章是我原创了吧。
Ssking 发表于 2015-4-13 16:44

H大,我来帮你处理小事了
http://tieba.baidu.com/p/3523364020
Ssking 发表于 2015-4-13 16:45
QQ_3DC53B 发表于 2015-4-13 16:23
不知道游客能不能回复。我就是英雄无敌3吧的truthlove,如果经常有去英雄无敌3吧,应该有看到我发的贴,大 ...

Come,你在贴吧http://tieba.baidu.com/p/3523364020这个写一个52pojie我看看
吾爱游客  发表于 2015-4-13 17:04
已经写了,能看到吗?
Ssking 发表于 2015-4-13 22:49

http://tieba.baidu.com/p/3523364020  
老大往下拉,能看到
Ssking 发表于 2015-4-13 22:55
QQ_3DC53B 发表于 2015-4-13 17:04
已经写了,能看到吗?

给你@老大了
Sp4ce 发表于 2015-4-14 00:00
@Hmily 应该是本人 1.png
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-15 20:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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