发布网友 发布时间:2024-05-13 13:58
共1个回答
热心网友 时间:2024-05-13 15:15
1、其实修改器原理很简单般来说在游戏运行时候我们对游戏内存空间中必要数据进行修改就可以了举个例子来说款拳皇模拟器里游戏人物“血”地址是&H567DC0当这个人物挨打时候这个地址数据就要减少只要我们把这个数据再改回去人物“血”就有了要是我们作个循环不断地保持这个地址得数不变化这个人就“百战不殆”了 :) 2、但是我们如何查找这个关键地址哪?可以用游戏修改器嘛,比如金山游侠,GM的类至于要改数据也同样啦 3、流程: 首先用FindWindow查找到游戏窗口再用GetWindowThreadProcessId获得进程标识符然后用OpenProcess取得游戏进程句柄最后WriteProcessMemory把数据写到相应地址要是需要读数据用ReadProcessMemory就可以了 我在这里以修改变脸王为例来介绍说明具体进入下面链接 值得注意2个问题: 1、无法使用FindWindow如何办? FindWindow需要提供窗体标题才可以使用但是有些游戏很难做到这点比如抢滩登陆它窗口标题很难查找到还有款日本鸟游戏窗口标题是日本话根本打不出来碰到这种情况如何办哪? 比较正式且常见思路方法是逐条查找当前所有进程找出来游戏进程就找到游戏进程句柄了这种思路方法别地方都有介绍我这里介绍种比较笨但比较简单思路方法 由于GetForegroundWindow可以找到桌面最上方窗口所以我们只要设定个时间比如在中设定3秒钟让用户在3秒钟以内进入游戏界面我们在3秒以后在这个获得自然就是游戏进程了呵呵.... 下面有个例子来演示这个原理 2、查出地址不断变化如何办? 有些游戏数据保存地址是随机变化比如红色警戒金钱这次查出来地址是这个下次不知道是什么这种问题遇到后你就不知道应该修改内存地址碰到这种情况如何办哪? 这种问题需要利用动态调试来解决我这里拿红色警戒来介绍说明下原理其他情况也类似红色警戒金钱存放地址是不断变化但是这个地址是由个确定地方产生就是说中有个确定地方这个地方每次随机产生个地址就把金钱放到这个地方我们只要找到那个地址来源就好办了 但如何找那个地方哪?先进入游戏,用金山游侠查出来钱地址,比如说是c16a0450H然后F5调入TRW2000,下命令bpm c16a0450 w ,就是说当写c16a0450H内存地址时候中断在这个中断地方比如说有个包含[eax]命令(具体命令我忘记了你再查下吧)然后查看d [eax] ,如果看到这里是c16a0450那就介绍说明找到地址来源了把这个地址记下来但是我们编写时候仍然无法读取[eax]这就需要使用SMC(self mody code)技术,可以编写个补丁在这个地址处写个跳转跳到另外个地方把[eax]内容写入个固定内存地址比如说 mov 005a627b,[eax] 这样写游戏修改器时候就可以用ReadProcessMemory直接读005a627b内容这个内容就是钱地址了以后修改思路方法就按照上面介绍思路方法修改就可以了 我没写过这样只不过动态调试了下实战证明这种思路方法是可行你要是不知道SMC的类可以去 www.pediy.com 论坛里问问并不是太麻烦