搜索文章:

首页  |  Java技术  |  Asp.net  |  Asp编程  |  VC/C++  |  Delphi  |  VB编程

外挂制作教程——奇迹瞬移的实现

【软件相关】
下载页面:各大网站均有下载
软件大小:不确定
软件语言:简体中文
软件类别:游戏软件 / 共享版
应用平台:win9x/nt/2000/xp


【调试环境】:winxp、ollydbg v1.10、金山游侠v

—————————————————————————————————
【数据跟踪】:

 先来分析一下瞬移实现的原理吧。我们知道瞬移实际上就是从这个坐标直接移动到另外一个自己想要的坐标上,简单的说瞬移就是坐标的变换问题,我们还知道在奇迹中除了用鼠标可以在游戏中走动改变坐标以外,还有两种情况可以改变坐标,一:利用移动命令回城;二、被巫师王这样的怪物用掌心雷拖动。用鼠标移动是不可能实现瞬移的,我们可以想想其他两种情况,很容易就会发现,第一种改变坐标的时候,我们把自己想要的坐标告诉它,这样不就可以实现瞬移了吗。第二种情况的时候,我们让巫师王把自己推到自己想要的地方也就可以了。

 好的,现在知道原理了,我们需要做的是在程序中找到这些数据,并在相应的时间修改成我们需要的数据就可以了。

 我以第二种方法为例,教大家如何寻找并修改这样的数据。

 首先,随便启动一个sf,我之所以选sf是因为sf的main文件都已经去除了反调试部分代码,如果我没分析错的话,反调试代码应该是在00481a99、00483001这两个地方。当然这个不是我们今天要研究的东西,直接进入主题吧。

 进入游戏后,我们先要找到人物坐标在游戏中的数据,这里我们利用金山游侠v,这个我想大家都应该会用吧,就不做详细说明了。好的我们找到如下三个地址:

7c9319c c985d1b1436cc3b(因为数据为动态,所以两次运行得到的数据地址都不同,没有参考性)

 好的数据找到了,应该就是这三个当中的一个。现在到关键地方了,打开ollydbg v1.10,点文件→附加,找到mu主程序,并加载。然后让游戏继续运行,要不一下游戏就掉线了,如果掉线就得从头来过。
 现在在od的转存窗口,ctrl+g去到我们刚才找到的三个地址。

07c9318c 00 00 00 00 00 00 00 00 3d 00 00 00 b2 00 00 00........=...?..
07c9319c 62 00 00 00 27 00 00 00 27 00 00 00 27 00 00 00b...'...'...'...
07c931ac 05 00 00 00 27 00 00 00 05 00 00 00 06 00 00 00...'.........
07c931bc 27 00 00 00 05 00 00 00 27 00 00 00 47 6d 82 00'......'...gm?

0c985d0b 00 00 00 60 60 60 60 60 60 60 61 6f 60 62 63 63...```````ao`bcc
0c985d1b 62 90 b1 9b 0c af 62 00 00 b1 64 00 00 08 f0 9fb惐?痓..眃..馃
0c985d2b 0c 10 f0 a3 0c 48 00 45 14 e4 b6 5f 00 00 00 00.穑.h.e涠_....

1436cc2b b1 b2 b2 b4 00 00 00 00 00 00 00 00 00 00 00 63辈泊...........c
1436cc3b 62 64 66 00 00 00 00 00 00 00 00 00 00 00 00 00bdf.............

 我们在1436cc3b这里点鼠标右键,下内存写入断点,不要问我为什么不在前两个地方下断点,这里为了简单些说明问题,就不一个试了,这是经验,因为我分析这个不下10来次,三个数据都下过断点,所以知道第三个数据是关键的数据,前两个中,地一个数据在以后的教程中会继续说到,第二个数据我也不能确切的知道是什么作用。

 现在在游戏中随便走一步,od立刻断在这里,取消断点,继续运行游戏:

004aa091 41inc ecx
004aa092 8858 f1 mov byte ptr ds:[eax-f],bl
004aa095 8a59 ff mov bl,byte ptr ds:[ecx-1]
004aa098 8818mov byte ptr ds:[eax],bl//断在这里,eax里的值就是1436cc3b,bl里的值就是我们刚才点的哪坐标。
004aa09a 40inc eax
004aa09b 33dbxor ebx,ebx
004aa09d 03d0add edx,eax


 看这里需要些汇编知识,如果不明白,还是去学一下汇编知识。这里我粗略解释一下吧,mov byte ptr ds:[eax],bl这句的意识,是把bl里的值按byte传到eax这个地址中,再看前一句,我们可以知道ecx-1这个地址里的值就是我们在游戏中鼠标点的y坐标。再上一句从格式看,可以猜到就是x坐标了。好的,我们把这里改成这样看看~~

004aa091 41inc ecx
004aa092 c640 f1 64mov byte ptr ds:[eax-f],64
004aa096 c600 64 mov byte ptr ds:[eax],64
004aa099 90nop
004aa09a 40inc eax

 0x64是十进制的100,现在我们走动一下看看,人物是不是自动走到100 100去了。ok,今天我们讲课就到这里,具体要实现瞬移已经找到一部分关键数据了,还需要的就是找到被巫师王拖动过程平移的哪一部份代码,不过在99j以后的版本我就发现巫师王都拖不动人了的,所以我也没找到这部分代码,也正因为这样,瞬移一直没加进去。

 这里我只是教大家些找数据的方法,具体要怎么写程序这个看个人的了。有些东西还是要*自己学习,别人无法代劳的。

()

下一篇:网吧任我行 >>
相关文章:
© 2006   www.java-asp.net