安卓真机无root环境下的单机游戏修改-IL2CPP




前言


之前在研究手游的il2cpp修改,选取了Mine Survival作为研究对象,由于手上没有root的机子,于是安装在了MuMu模拟器上。


但是很快发现了问题,游戏只有arm的lib,由于一系列原因,导致我无法获取到libil2cpp.so的基址。


安卓真机无root环境下的单机游戏修改-IL2CPP

在尝试了很多方法后都无法完美的解决这个问题,最终只能考虑安装在真机上了。


但是目前并没有对机子root的打算,于是选取了注入frida-gadget的方案,这样没有root也可以对游戏进行修改了。





准备工作


基础工作不做过多介绍,学这个的应该都懂一点。


我的设备

◆安卓真机 – Redmi Note 8

◆电脑 – Win10 专业版 22H2


推荐使用scrcpy(https://github.com/Genymobile/scrcpy),可以将手机画面投屏到电脑,延迟低。





开始操作


注入 frida-gadget


介绍


可以手动操作去理解原理,参考这篇文章Using Frida on Android without root(https://koz.io/using-frida-on-android-without-root/)。


当然我这种懒汉肯定是选用自动化方案啦,使用objection(https://github.com/sensepost/objection)来自动化patch apk。


安装 objection


◆python版本 3.4+

◆pip3版本 9.0+

◆(可选)virtualenv版本 15+


全局安装


$ pip3 install -U objection


虚拟环境安装


为了防止冲突,推荐安装在虚拟环境里。


# 创建虚拟环境
$ virtualenv myenv
# 激活虚拟环境
$ .myenvScriptsactivate
# 安装objection
$ pip3 install -U objection


patch apk


确定以下命令安装并且可用,将其添加到环境变量中。

◆aapt –http://elinux.org/Android_aapt

◆adb –https://developer.android.com/studio/command-line/adb.html

◆jarsigner –http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jarsigner.html

◆apktool –https://ibotpeaches.github.io/Apktool/


adb连接上安卓设备,执行下面的命令,就可以自动化的帮你patch好apk了。


$ objection patchapk --source '.Mine Survival_v2.5.3.apk'

安卓真机无root环境下的单机游戏修改-IL2CPP


安装测试


Mine Survival_v2.5.3.objection.apk安装到手机。


$ adb install '.Mine Survival_v2.5.3.objection.apk'


然后执行一下frida-ps -U,有如下回显就是成功了。


$ frida-ps -U
PID Name
----- ------
21709 Gadget


测试一下,写个获取libil2cpp.so基址的脚本。


Java.perform(function() {
var module = Process.getModuleByName("libil2cpp.so");
console.log(module.base);
})


注入js。


$ frida -U Gadget -l .hook.js


可以看到成功获取到了libil2cpp.so的基址。


安卓真机无root环境下的单机游戏修改-IL2CPP


frida-il2cpp-bridge


很好用,不多解释了。


安装测试


执行下面的命令来安装 frida-il2cpp-bridge。


$ npm install --save-dev frida-il2cpp-bridge


修改package.json。


{
"main": "index.ts",
"scripts": {
"prepare": "npm run build",
"watch": "frida-compile index.ts -w -o hook.js"
},
"dependencies": {
"frida-il2cpp-bridge": "^0.9.0"
}
}


新建一个index.ts,测试一下输出unity版本。


import "frida-il2cpp-bridge";

Il2Cpp.perform(() => {
console.log("Unity version: " + Il2Cpp.unityVersion);
});


执行npm run watch编译一下,然后再开个console执行frida -U Gadget -l .hook.js。


可以看到成功输出了unity的版本。


安卓真机无root环境下的单机游戏修改-IL2CPP


开始修改


通过分析il2cppdumperdump后得到的Assembly-CSharp.dll,发现了Inventory这个类,可以看到他有一个AddItems的方法,那我们就可以想办法调用他来添加物品。


安卓真机无root环境下的单机游戏修改-IL2CPP


现在来跟踪一下这个类。


import "frida-il2cpp-bridge";

Il2Cpp.perform(() => {
console.log("Unity version: " + Il2Cpp.unityVersion);

const AssemblyCSharp = Il2Cpp.domain.assembly("Assembly-CSharp").image
const Inventory = AssemblyCSharp.class("Inventory");

Il2Cpp.trace(true).classes(Inventory).and().attach();

});


拾取一个物品,可以看到他调用了Inventory::AddDropItem这个方法。


安卓真机无root环境下的单机游戏修改-IL2CPP


那么就可以hook他来调用Inventory::AddItems。


import "frida-il2cpp-bridge";

Il2Cpp.perform(() => {
console.log("Unity version: " + Il2Cpp.unityVersion);

const AssemblyCSharp = Il2Cpp.domain.assembly("Assembly-CSharp").image
const Inventory = AssemblyCSharp.class("Inventory");
const AddDropItem = Inventory.method("AddDropItem");

// Il2Cpp.trace(true).classes(Inventory).and().attach();

AddDropItem.implementation = function (item): boolean {
// bool AddItems(int id, int amount)
this.method("AddItems").invoke(115, 999);

const result = this.method<boolean>("AddDropItem").invoke(item);
return result;
};
});


拾取物品,可以看到我们拥有了许多核导弹。


安卓真机无root环境下的单机游戏修改-IL2CPP





完结撒花


感谢开源项目的维护者们!

frida-il2cpp-bridge还是很强大的,可以去学习一下。

写的可能有点乱,有问题还请指出!




安卓真机无root环境下的单机游戏修改-IL2CPP


看雪ID:TubituX

https://bbs.kanxue.com/user-home-958990.htm

*本文为看雪论坛优秀文章,由 TubituX 原创,转载请注明来自看雪社区

安卓真机无root环境下的单机游戏修改-IL2CPP


# 往期推荐

1、区块链智能合约逆向-合约创建-调用执行流程分析

2、在Windows平台使用VS2022的MSVC编译LLVM16

3、神挡杀神——揭开世界第一手游保护nProtect的神秘面纱

4、为什么在ASLR机制下DLL文件在不同进程中加载的基址相同

5、2022QWB final RDP

6、华为杯研究生国赛 adv_lua


安卓真机无root环境下的单机游戏修改-IL2CPP

安卓真机无root环境下的单机游戏修改-IL2CPP

球分享

安卓真机无root环境下的单机游戏修改-IL2CPP

球点赞

安卓真机无root环境下的单机游戏修改-IL2CPP

球在看


安卓真机无root环境下的单机游戏修改-IL2CPP

点击阅读原文查看更多

原文始发于微信公众号(看雪学苑):安卓真机无root环境下的单机游戏修改-IL2CPP

版权声明:admin 发表于 2024年2月26日 下午6:06。
转载请注明:安卓真机无root环境下的单机游戏修改-IL2CPP | CTF导航

相关文章