免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 各类编程 > 利用Dll注入制作魔兽争霸外挂(3)

利用Dll注入制作魔兽争霸外挂(3)

时间:2012-02-17 18:22来源:未知 整理:寂涯网络 点击:

找出游戏数据基址
得到金钱值的地址后,我们就可以用Cheat Engine来修改这个地址中的值来达到修改游戏金钱值的目的,但当你重新运行游戏的话,会发现这个地址中存放的值已经不再是金钱 值了。如果我们在外挂程序中修改这个地址的值,很明显不会达到修改游戏金钱的目的。接下来要做的就是对游戏进行逆向分析,通过这个地址得到游戏的数据基址。何为数据基址? 根据游戏开发的原理,在游戏代码区中都会存在一个固定的内存地址,这个地址不会随游戏 的运行环境的变化而变化。游戏在运行时,可以通过对这个地址进行一些固定的变换得到游 戏中某个数值(如金钱值)。如果我们得到这个值,并且知道变换法则,就可以得到存放金 钱值的地址。由于基址不会变,变换法则也是固定的,所以通过这种方法得到的金钱值地址 虽然每次都不一样,但都是正确的。
首先运行游戏,按上一节的方法得到存放游戏金钱值的地址,笔者得到的地址为07B30190o打开Ollydbg,点击文件_>附加,选择游戏进程,并点击附加。运行起来 后,在最下面的命令对话框中输入“此07830190”,按回车键后,在数据窗口中就会列出地 址为07830190处的值。在这个位置点右键->断点_>内存写入,即下内存写入断点,这样当 游戏修改这个内存的值时,0117此8就会中断在修改这个值的代码处。切换到游戏中,当金 钱值发生改变时,Ollydbg发生了中断,删除内存写入断点。现在分析发生中断的地方的代码,代码为:
6F088E00 |. 8950 78 MOV DWORD PTR DS:[EAX+78],EDX
根据这行代码我们可以得到EAX+78是游戏金钱值的地址,即EAX的值为07B30190_78=07B30118,那么£狀的值从哪里来的呢?向上查找修改EAX的代码,最近的代码如下:
6F088DE0 |> \8B56 0C MOV EDX, DWORD PTR DS:[ESI+C]
6F088DE3 | > 8B54C2 04 MOV EDX, DWORD PTR DS:[EDX+EAX*8+4]
6F088DE7 | .8B42 18 MOV EAX, DWORD PTR DS:[EDX+18]
6F088DEA | .2B41 0C SUB EAX, DWORD PTR DS:[ECX+C]
6F088DED | .F7D8 NEG EAX  
6F088DEF | .1BC0 SBB EAX, EAX  
6F088DF1 | .F7D0 NOT EAX  
6F088DF3 | .23C2 AND EAX, EDX  

上面八行代码是数据变换的关键代码,先看后三行,SBB EAX, EAX相当于把EAX的值清 空,NOT EAX把EAX的每一位都置为1,最后一行EAX与EDX取并,这三行作用相当于把EDX 的值赋给£八乂,现在的任务就是分析£0义从何而来。上面代码第二行是一句关键代码,有逆 向分析经验的人都知道,[EDX+EAX*8+4]对应到高级语言里是通过下标对数组取值的操作, 其中£0乂是数组基址,£八乂为数组下标。通过这句话我们可以推测,代码运行到这一句时, EDX中存放的是游戏数据数组的基址。
在这一行下断点,运行游戏,游戏会重新中断在这一行。此时查看寄存器窗口,得到 EDX的值为0F880010。在该值上点右键的数据窗口中跟随,此时数据窗口中显示出了地址为0880010处的数据。如下所示: 
0F880010 FE FF FF FF 18 00 B1 07 FE FF FF FF 98 00 B3 07 0F880020 FE FF FF FF 18 01 B3 07 FE FF FF FF 98 01 B3 07 0F610030 FE FF FF FF 18 02 B3 07 FE FF FF FF 98 02 B3 07
这些数据有相同的格式:FE FF FF FF XX XX XX 07,我们可以断定这里存放着游戏中 关键数据的地址。第二行的5到8个字节转化为正常字节序后为07B30118,正好是上面我们要得到的EAX的值。这意味着,只要是我们得到了 EDX的值,然后加上14H的偏移,就可以得到£八乂的值,即真正存放金钱值的地址为:[EDX+14]+78。现在的任务为跟踪£0义的来 源。上面代码的第一句可以发现EDX来源于[ESI+C],即刚刚得到的存放金钱的地址可以修 改为:[[ESI+C]+14]+78。那么£51又是从何而来呢?继续向上查找代码,寻找修改£51的 地方,发现有一句代码为:
6F088D98 |. 8B35 44C7876F MOV ESI,DWORD PTR DS:[6F87C744]
从这句代码我们可以惊喜的发现ESI来源于地址为6F87C744处的一个值,所以游戏中 存放金钱的地址为:[[[6F87C744]+C]+14]+78。到此为止我们的跟踪查找结束了。
完成外挂。
走到这一步,我们的工作已经完成了 90%了,接下来的工作是在远程线程的代码中修 改上面得到的地址中的值。本部分的源代码位于Dll工程目录下,该工程编译后生成一个 0&文件。在0111^!1函数中新创建一个专门用于修改游戏数据的线程。新线程代码如下:
DWORD WINAPI ChangData(LPVOID lpParameter)

本页地址 http://www.jybase.net/biancheng/20120217776.html

百度搜索更多

谷歌搜索更多

顶一下
(1)
50%
踩一下
(1)
50%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com