我的单机游戏破解之路

目标:破解这个单机游戏,实现无线资源和无限金币和star (金幣 coin,經驗 exp, 星星 star, 商品 shop)

实际:进入游戏后金币越消耗越多,金币越多,经验就越多,star重置为80,刚好够用,商店商品设置为99,消耗之后不减

 

破解后:

image

image

image

 此时虽然不是无限,但是你只要打一两把,经验再消耗都不会减少,足以可以买到所有武器,至于后边打多了经验值是否会因为太大导致游戏闪退或显示负值,那我就不清楚了

 

工具安装:

apk解压打包签名: apktool 和uber-apk-signer-1.3.0.jar

反编译查看伪代码并修改二进制文件: ghidra, java ,hxd

解压apk到xxx

apktool d xxx.apk -o xxx

将xxx下的所有文件打包成xxx1unsign.apk
apktool b xxx -o xxx1unsign.apk

对xxx1unsign.apk签名
java -jar uber-apk-signer-1.3.0.jar --apks xxx1unsign.apk

电脑上的安卓模拟器我用的是夜神模拟器

 

地址          机器码 汇编指令 伪代码注释

0015a3d0 f7 b5 push {this,param_1,r2,r4,r5,r6,r7,lr} 0015a3d2 07 1c adds r7,this,#0x0

image

 

 

踩坑之路:

GG修改器,精确和模糊搜索改了都不生效,有些甚至是闪退

\assets\data\config.bin 用AI分析这里边的内容,发现确实是一些初始值,但改了之后打开游戏闪退,或者报错闪退,用ghidra搜索config.bin,然后点开搜索出来的内容,在此搜索报错的信息The file xxx,用AI分析代码,校验config.bin失败后忽略错误继续,但之后还是进不去游戏

lib\armeabi\libgame.so用AI分析ghidra反编译这个之后的伪代码,搜索coin,然后修改getcoin个getexp函数对应地址的物理地址的值,模拟器里金币修改成功,经验却无法使用,真机全是负值

最终,由于getcoin里金币已经修改成功,修改getexp,改为金币的偏移地址,实际效果就是只要经验有变动,经验就会变为和金币数量一样

 

如何使用ghidra

参考反编译 -ghidra - 我的腹肌不见了 - 博客园

image

 

image

 

image

 我们要修改的是金币,所以搜coin即可,搜到相关函数后将搜索结果和部分伪代码贴给AI让他帮忙分析你的需求,然后修改测试

注意:ghidra里的偏移地址跟HXD里的偏移地址是不一样的,我都是在HXD里搜ghidra里偏移地址右侧的值然后修改保存.so的,保存好之后上边的步骤重新生成apk并修改签名

 

如何修改star?

这部分我找了好几天star相关函数,改了都没用或者闪退

导出所有伪代码,分析目标函数

Ghidra里File->Export program

Format:C\C++

Output:xxx.c

在.c搜索star可以搜到好多,其中IUpgradeMenu::UpdateStar()是控制游戏页面显示,GameData::UpdateStar()是实际star数量

然后在Listing这个窗口ctrl+f搜索这两个函数,找到Listing窗口的代码,比如

**************************************************************
* GameData::UpdateStar() *
**************************************************************
UpdateStar:00161e9c(c)
0013d224 f0 b5 push {r4,r5,r6,r7,lr}
0013d226 03 1c adds r3,this,#0x0

然后将这两部分都喂给AI,让他帮忙把star修改为80,然后参考AI提供的思路用HXD去修改.so文件,之后重新打包签名,模拟器里安装后,只要通关游戏第一关后就会触发更新star为80,即可对所有舰船全部完成升级

image

 

image

 

如何修改無限商品?

在僞代碼裏搜索shop,會找到好多,UIShopMenu::RefreshItemNum 和 ItemsBar::RefreshItemNum,

  • GameData::GetItemHp

  • GameData::GetItemShip

  • GameData::GetItemNuke然後詢問AI如何設置成數量99,消耗之後數量不會減少,注意,修改的字節位數要和原先的位數一致,否則會閃退

  • 如修改 GetItemNuke (地址 0013d894)可以實現無限核彈

    原 10 字节:08 b5 4c 30 f9 f7 93 fa 08 bd
    改为:63 20 70 47 00 00 00 00 00 00

  • image

     

posted @ 2026-02-18 20:02  我的腹肌不见了  阅读(128)  评论(0)    收藏  举报