首页
社区
课程
招聘
[练手]某单机游戏简易作弊
2022-12-10 15:10 58802

[练手]某单机游戏简易作弊

2022-12-10 15:10
58802

如侵犯该游戏的权益,随时可删。

一、游戏简介

最近上手了一个单机动作类肉鸽游戏,游戏玩法比较简单。默认会给一个角色,其他角色可氪金购买,或者通过完成任务获得角色碎片,要么肝,要么氪。
图片描述

 

角色有血量,护甲和技能,以及在闯关过程中产生的金币,金币可购买道具。
图片描述

二、作弊

准备:安卓安装包(1.14.3_19331版本),root的Android手机,GG(GameGuardian),frida,Il2CppDumper

1、修改金币

初始默认金币50,打开GG,搜索50,类型选择Dword,点击新搜索
图片描述
然后去打一个关卡,让金币数量发生改变,我这里变成了70,再次搜索70,点击改善
图片描述
此时只有3个地址了,再去打一次关卡,金币变成了88,搜索88,点击改善
图片描述
此时只有两处地址了,都修改成999,查看效果
图片描述
金币已经修改成功,去购买商品
图片描述
可被正常消费,修改成功。

2、解锁全部角色

(1) 获取游戏安装包
(2) 将安装包中的 libil2cpp.so 和 global-metadata.dat 提取出来
(3) 运行 Il2CppDumper.exe,得到 dump.cs
(4) 打开 dump.cs,搜索 HeroArchive,找到该类,找到该类中 get_isUnlock()
图片描述
注释中的 0x2F40E50 即代表函数偏移
(5) 编写frida脚本,hook该函数,始终返回1即可
(6) 可看到角色已全部解锁
图片描述

 

最后附上简陋的frida脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function hook_dlopen() {
    const dlopen = Module.findExportByName(null, "dlopen");
    if (dlopen != null) {
        Interceptor.attach(dlopen, {
            onEnter: function (args) {
                var l_soName = args[0].readCString();
                console.log(l_soName);
                if (l_soName.indexOf("libil2cpp.so") != -1) {
                    this.hook = true;
                }
            },
            onLeave: function (retval) {
                if (this.hook) {
                    console.log("\nLoaded libil2cpp.so add break points");
                    var base_addr = Module.findBaseAddress("libil2cpp.so");//获取 so的基址
                    console.log("base_addr = " + base_addr);
                    var unlock_addr = base_addr.add(0x2F40E50);
                    console.log("unlock_addr : " + unlock_addr);
                    Interceptor.attach(unlock_addr, {
                        onEnter : function(args) {
                        },
                        onLeave:function(retval){
                            // console.log('isUnlock = ' + retval)
                            retval.replace(1);
                        }
                    });
                }
            }
        });
    }
}
 
setImmediate(hook_dlopen);

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2022-12-10 15:10 被mb_gbtepwge编辑 ,原因:
收藏
点赞4
打赏
分享
最新回复 (6)
雪    币: 839
活跃值: (5004)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
suuuuu 2022-12-12 10:48
2
0
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_水山 2022-12-16 17:12
3
1
游戏如果加壳了和反调试了,就不太好用这些手段了
雪    币: 12040
活跃值: (15364)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2022-12-16 17:55
4
0
手机游戏里的植物大战僵尸外挂练习
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_xjahbpjy 2023-1-14 14:22
5
0
你好,你的测试环境是真机吗?我用模拟器找不到libil2cpp.so,用真机加载frida so成功,也监听端口了,就是一附加就崩溃
雪    币: 5068
活跃值: (4369)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
gamehack 2023-1-14 14:36
6
0
感谢分享代码!
雪    币: 352
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_gbtepwge 2023-1-16 09:24
7
0
mb_xjahbpjy 你好,你的测试环境是真机吗?我用模拟器找不到libil2cpp.so,用真机加载frida so成功,也监听端口了,就是一附加就崩溃
是真机,可以看看是什么原因导致的崩溃
游客
登录 | 注册 方可回帖
返回