标签:字节 文件 target 部分 usermode evel 反编译 pre 要求
注意:本文章修改的版本是1.2.008,经测试高于该版本号的不可以使用这个方法。不接受要求更新的留言或者私信。
扫雷嘛,大家都爱玩,不爱玩的也可以试一下Windows自带或者商店里的那个,本质上其实是个推理游戏。如果有经验的话,不妨挑战一下今天的主角:《Zombie Sweeper》。在这里贴几张网上扒来的图:
当然这不是简单的换皮,这里还有一些特别的通关条件让你不能完美通关思考良久。而这个游戏的缺点是:作为一个单机游戏需要联网玩,因为使用了网络存档。这个缺点同时让不熟练打包应用的我做出的修改版,在第二次打开就因为无法加载存档而卡加载……我自己是没这个精力研究为什么不行啦。
因为我没找到应用安装释放的 ZombieSweeper.zs 文件在哪里,所以使用了运行时用GameGuadian修改代码的方法。如果有人发现文件的位置,欢迎留言。
好了,废话这么多,我们开始正题吧。这个游戏实际上是一个Adobe AIR应用,没听过的可以看成你小时候玩的Flash小游戏的进化版。而Flash可以用免费的JPEXS Free Flash Decompiler(下称FFDec)反编译。至于具体的文件……刚就说了啊,ZombieSweeper.zs,自己打开安装包能找到的。
我们的目标有两个:
但是游戏里对于金钱,不仅使用了一种加密的存储方式,还拆分为两个部分:fg(free gold)和pg(paid gold?),两个值的和才是最后的金钱数量,所以直接改数字会有点难。具体的实现方式可以查看UserModel和SecretValue这两个package。虽然FFDec有可以直接以ActionScript修改的方式,但是因为我们没换文件,如果有插入/删除字节的情况会有点难办。所以这里我们改变一下思路:金钱不减反增,也是一个常见的修改思路。
现在我们去搜索在哪里减少了这两个值,因为FFDec给我们反编译出了ActionScript,所以搜索并不费劲。最后可以找到在ModelWorker的consumeGoldFromUserModel函数里,对fg和pg有减法操作。注意到右边的PCode,这个对应着最终的字节,所以我们需要看这些值是多少。点击上面的按钮可以看到这些指令对应的字节,我们待会需要用到。
这里我已经改过了,71行的subtract(A1)我给改成了add(A0)。这样减法操作就会变成加法。当然,仅仅是A1是不能准确定位我们想改的位置的,所以我们需要记下这条指令以及前几条指令对应的字节,到时候我们搜索的时候就是需要搜这些字节。
接下来看零件数量,同样是改升级的代码,升级的时候增加零件。这里测试的时候发现只加是不够下次升级的,至少需要增加两倍的数量,但是我们还没学怎么乘以2啊?看了代码你就发现这个担心是多余的。搜索完我们还是在ModelWorker里找到levelUpItem函数,里面有一行:
updateItemCount(_loc5_.partsIdList[_loc4_],ItemType.PARTS_NEED_COUNT_BY_LEVEL_LIST[_loc5_.level - 1] * -1);
懂了吧,这里关键在于乘以-1。如果说我们把这个-1改成2,那就能完成目标了。改这个更简单了,我就不细说了。
记录下来之后,我们打开游戏和GameGuardian。然后搜索刚才的一串字节,比如金钱我们可以搜:609B74 A1 60B320,左右扩充的范围随意,只要能搜出唯一结果就可以了。然后我们把搜索结果的A1改为A0就完成了。同理,零件数量就靠你们自己举一反三啦。
当然这个修改只在这一次游戏运行的时候有效,所以有能力的话建议写成GameGuardian支持的lua代码,或者直接修改源文件重新打包。Enjoy~
使用GameGuardian修改Zombie Sweeper的金钱和零件
标签:字节 文件 target 部分 usermode evel 反编译 pre 要求
原文地址:https://www.cnblogs.com/DIYSoft/p/13192583.html