您的位置:首页资讯知识加油站 → gdb修改游戏方法分享

gdb修改游戏方法分享

时间:2012/3/1 9:10:59来源:www.pc6.com作者:lff我要评论(0)

4 页 第 3 页

  这个程序的开头是4AB88, 那就在GDB 里面设置 break *0x4ab88, 然后运行程序,购买,果然断点跳出了,这说明有戏。那么下面就是一步一步跟着程序走,同时每走一步都查看下那些寄存器的值。单步走的调试语句是 si. 查看寄存器一直就用i r $r0 $r1 $r2 $r3 $r4 $r5 $r6 $r7 $r8 $r9 $r10 $r11 $r12。 这时候你要自己判断每步的语句是不是关键的,可以结合IDA的那个流程图。这段子程序特别长,流程图也很复杂,那也只能这样一步一步看了。调试里面有些技巧,自己做多了才能有经验。

  我现在游戏停在买大包的地方,大包的价格是800, 也就是说如果寄存器的值变成了800, 那就是关键了。这样知道运行完4b18c, 后再执行下条的时候,R4寄存器值就变为了800,这就是说基本成功了,因为你已经找到了最关键的LOAD价格的语句。

  

  这里的语句是:

  4b18c ldr r4, [r2, #0x20] - 从内存地址 r2+#0x20 里面读取物品的需要的COIN数

  4b18e cmp r4, lr -比较你的COIN和所需要的COIN是否足够。这点也是靠猜的,因为这时候你手上的COIN为0, lr 寄存器的值也显示为0 。现在你们看到我的是59是后来自己改的。

  

  ldr r4, [r2, #0x20],就是关键的地方了。那么如何看内存地址里面的值呢? i r 命令只能查看寄存器的值,要看内存地址里面的值需要用 x/uh 0x地址。这时候你可以看到r2寄存器的值为0x166410, +0x20= 0x166430. 注意这里2个都是是16进制的加法,不要弄错了。那么就用命令 x/uh 0x166430, 查看到他的内存值为800,就是大包的钱。

  

  所以到这里基本上就知道了,那么你把R4的值改为0, set $r4=0, 然后C, 大包就这样买成了。

  

  用这种办法修改是最安全的,因为游戏商不会知道你改内存的。除非每次联网的时候,他会查你的库存,然后发现你拥有需要靠COIN才能买到的物品,但是你却没有任何的COIN的购买记录,那么他才有可能封号。但是这不排除你是在游戏中合成这些物品的,所以他也不敢随便封号。象和风物语为什么你修改了钻石他能知道然后让你联不上网呢,我想就是这样的道理。其实和风物语我早就能改钻石无限了,只是发现改了以后就不能联网,所以就不准备放出了,否则一早就分享给大家了。网络游戏有些是改不了,想很久以前的werule, MOJO数都是存放在网络服务器的,每次你联网他才下载到你本地,用完一个,他就立即上传更新服务器上的数据,你即使改了本地的MOJO, 下次用到MOJO的时候i,他还是从服务器上读取,不理会你本地的值。所以那些需要联网才能玩的游戏基本是不可能修改的。但是只要能脱机玩,而且脱机时候能买东西,那一定就可以改。例如GUNBROS, 永恒战士都是这样的列子。除非你的绿币值或者钻石值留在手上的大得离谱,而且你又没有任何购买绿币,钻石的记录,那么他绝对会怀疑你作弊然后封号或者不让联网。其实GUNBROS, 永恒战士那个需要3000多绿币才能买的顶级武器,如果你有,却没有购买绿币钻石的记录,他已经可以知道你作弊了,因为这个武器是没有办法脱机合成或者别人送给你。因此游戏商是可以通过一些手段来防止他的赚钱损失的,只是看他愿不愿意这样弄。所以说任何作弊都有风险,除非这个游戏是彻底不用联网玩的纯单机GAME.

  那么到这里你已经可以自己爽歪歪了,只是你很难把这分享出来,或者你只能提供GDB的断点这些地址分享给会用GDB的人。当然你也可以分享你的存档,但是现在的存档很多都和你的账号,机器的UDID相绑定,所以你的档案别人一般不能用。除非你用UDIDFAKER把你的机器码改为40个7,8,9什么的,然后把存档分享,告诉别人用UDIDFAKER改他机器的UDID和你的40个7,8,9什么的一样。正因为这样,我几乎很少分享我自己的存档,万一别人不能用,烦得要死, 你还要承担骂名,因为也许他把自己的存档给干掉了,你的又用不了。在这坛子这么久,很多人的回帖是不能理解的,呵呵,你相信不,至少我相信。

  那么怎么分享你的成果呢?唯一的办法就是做补丁。所谓的补丁就是修改程序代码。补丁很多人还是不会用,那你只能把补丁放入IPA, 然后直接放出作弊版的IPA让大家直接下载安装。这样的话,虽然简单,但是有可能会冲掉他原来的记录。最安全的办法是用CHRONuS备份存档,这样你装好了作弊游戏后,再用CHRONUS恢复备份即可。既然补丁改动了原始程序,所以开发商完全可以在程序运行的时候加语句判断是否有程序的改动,如果有的话就秒退,那这样的话,补丁也就BYEBYE了。除非你牛到可以找到这些判断的程序段然后绕过他。俺就木有这个本事了。所以只能希望游戏商不要这么绝啦。哈哈。我曾经就遇到过这样的一个游戏,忘记名字了,一改就秒退,牛爆了。还有一个游戏,里面所有的子程序都是SUB后面跟个数字,一点提示也没有,那么这样的游戏几乎没法改,因为你无从下手。不过那个游戏商也真牛,他自己以后读程序更新什么的,还要一个个SUB对照表去改,呵呵,真是佩服他了。所以魔高一尺道高一丈,破解和反破解永远都是循环上升的。游戏商要防作弊,还是有很多办法的。真到了那天,作弊就难了。

  哦哦,扯远了。

  那么怎么样才能做出免费购买的补丁呢?你最先想到一定是,既然这里他读取0x166430里面的值,那么我把这句 LDR r4, [R2, #0x20] 改为 movs r4, #0 不就行了吗?这样每次程序到这里,R4就只会是0,不会再读取真正的COIN数了。你想的非常正确,我也是这样想的。但是你会发现你的剩余的COIN会变成 -800. 这样人家游戏商是不是很容易就知道你作弊了啊!所以游戏一定有个地方计算了你手上的COIN减去你买的东西钱,那就是0-800的地方。怎么找?还记得他比较LR寄存器的值了吗?LR寄存器就是你手上的COIN值。回到子程序那,你可以发现上面有一句

  _text:0004B188 LDR.W LR, [R12]

  这就是说R12寄存器里面的值所代表的地址就是你手头COIN的内存地址。 r12 当时的值为0x16d49c, 还是用老办法查看这个内存地址里面的值,x/uh 0x16d49c. 这时候你应该会显示为0如果你手头没有COIN的话。那么这个地址的值由0变为-800是那句语句干的呢?很简单,你要用监视断点命令,watch *0x16d49c 注意有个星号。然后C 继续运行程序。这个语句可以在内存0X16D49C里面的值发生变化的时候跳出断点来。不过这时候一般来讲游戏速度会被拖慢很多,因为它在监视内存地址的数值变化。

  

相关视频

    没有数据

相关阅读 使用GDB调试RB-tree的问题总汇流浪先知游戏攻略 流浪先知新手入门指南LOL小游戏指尖召唤师测试资格怎么获得 LOL指尖召唤师小游戏预约方lol指尖召唤师小游戏怎么玩 英雄联盟指尖召唤师小游戏介绍Wegame电脑游戏怎么用手机玩 Wegame手机玩电脑游戏教程Steam免费游戏怎么领 Steam免费游戏一键领取教程dnf防沉迷怎么解除 dnf防沉迷身份证修改教程战锤混沌祸根游戏攻略 战锤混沌祸根剧情流程攻略

文章评论
发表评论

热门文章 携号转网什么时候实行谷歌浏览器“Adobe Fl2015双11怎么抢红包_2odysseusota4win图文教

最新文章 2022蚂蚁庄园6月22日今2022蚂蚁庄园6月21日今 2022蚂蚁庄园6月20日今日答案 度量衡是我国2022蚂蚁庄园6月17日今日答案 夏季甜品烧仙2022蚂蚁庄园6月16日今日答案 为了减肥每天2022蚂蚁庄园6月15日今日答案 卫生纸和面巾

人气排行 B站答题答案大全 哔哩哔哩答题答案2019弹幕ipad3和ipad2的8大区别nfc功能是什么 nfc怎么用 NFC功能的手机有哪全国青少年禁毒知识竞赛在线答题 全国青少年bd版是什么意思?bd版和dvd版哪个好?手机cpu天梯图2020最新版11月 手机cpu性能天BD职位是什么?BD职业解析!硬盘划分主分区、扩展分区、逻辑分区、活动