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

news2024/10/6 10:36:26

前言

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

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

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

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

准备工作

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

我的设备

  • 安卓真机 - Redmi Note 8
  • 电脑 - Win10 专业版 22H2

推荐使用 scrcpy ,可以将手机画面投屏到电脑,延迟低

开始操作

注入 frida-gadget

介绍

可以手动操作去理解原理,参考这篇文章 Using Frida on Android without root

当然我这种懒汉肯定是选用自动化方案啦,使用 objection 来自动化patch apk

安装 objection

  • python版本 3.4+
  • pip3版本 9.0+
  • (可选)virtualenv版本 15+
全局安装

1

$ pip3 install -U objection

虚拟环境安装

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

1

2

3

4

5

6

# 创建虚拟环境

$ virtualenv myenv

# 激活虚拟环境

$ .\myenv\Scripts\activate

# 安装objection

$ pip3 install -U objection

patch apk

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

  • aapt - Android aapt - eLinux.org
  • adb - https://developer.android.com/studio/command-line/adb.html
  • jarsigner - http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jarsigner.html
  • apktool - Apktool | Apktool

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

1

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

 

安装测试

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

1

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

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

1

2

3

4

$ frida-ps -U

  PID  Name

-----  ------

21709  Gadget

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

1

2

3

4

Java.perform(function() {

    var module = Process.getModuleByName("libil2cpp.so");

    console.log(module.base);

})

注入js

1

$ frida -U Gadget -l .\hook.js

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

 

 

frida-il2cpp-bridge

很好用,不多解释了

安装测试

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

1

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

修改 package.json

1

2

3

4

5

6

7

8

9

10

{

  "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版本

1

2

3

4

5

import "frida-il2cpp-bridge";

Il2Cpp.perform(() => {

    console.log("Unity version: " + Il2Cpp.unityVersion);

});

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

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

 

开始修改

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

现在来跟踪一下这个类

1

2

3

4

5

6

7

8

9

10

11

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 这个方法

 

 

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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;

    };

});

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

 

 

完结撒花

感谢开源项目的维护者们

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

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

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1502342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何压缩PDF文件大小?看完这篇文章,即可实现无损压缩!

平时工作或生活中&#xff0c;很多小伙伴是不是经常喜欢用PDF格式进行文件的保存&#xff0c;毕竟它具有较高的兼容性&#xff0c;且在不同设备中打开也不会出现排版错乱的情况。不过有时候PDF文件会因为内容过大&#xff0c;占用的内存过多&#xff0c;从而导致电脑卡顿的情况…

大路灯哪个牌子好?五大品质大路灯盘点,体验超赞!

在这个生活水平不断提高的时代&#xff0c;大路灯作为一款能够帮助孩子解决不少用眼是的光线问题的电器&#xff0c;有着比较高的优势&#xff0c;但关于它的伤眼案例却频频发生。之所以如此矛盾&#xff0c;主要是市场上的不专业大路灯泛滥成灾&#xff0c;就比如一些所谓的网…

Word中的文档网格线与行距问题

在使用Word编辑文档时&#xff0c;经常会发生以下动图展示的这种情况&#xff1a; 上面的动图里&#xff0c;将文字大小放大到某个字号时&#xff0c;单倍行距的间距突然增加很多。造成这种情况的原因是文档中定义了网格线&#xff0c;并且设置了对齐到网格线。如果取消文档中…

Centos安装Jenkins

1、更新系统 &#xff08;1&#xff09;更新下系统 sudo yum -y update 安装用于下载java 17二进制文件的wget命令行工具 sudo yum -y install wget vim 2、卸载centos自带的jdk 由于我们安装的版本比较高&#xff0c;需要jdk17&#xff0c;卸载centos自带的jdk。用 下面的…

分布式定时任务调度xxl-job

1. xxl-job基本介绍 1.1 Quartz的体系结构 Quartz中最重要的三个对象:Job&#xff08;作业&#xff09;、Trigger&#xff08;触发器&#xff09;、Scheduler&#xff08;调度器&#xff09;。 xxl-job的调度原理:调度线程在一个while循环中不断地获取一定数量的即将触发的Tr…

用 ChatGPT 搭配 STAR 原则,准备英文面试超轻松

用 ChatGPT 搭配 STAR 原则&#xff0c;准备英文面试超轻松 ChatGPT 除了可以帮忙改简历&#xff0c;在你的求职历程中&#xff0c;ChatGPT 也可以帮忙练英文面试。在我们实测之后&#xff0c;发现 ChatGPT 在练习英文面试上&#xff0c;不仅能针对你的回答给予回馈&#xff0…

汽车大灯汽车尾灯破裂裂纹破损破洞掉角崩角等问题能修复吗?修复后需要注意什么?

汽车灯罩破损修复后&#xff0c;车主需要注意以下几点&#xff1a; 检查修复效果&#xff1a;修复完成后&#xff0c;车主应该仔细检查灯罩的修复效果&#xff0c;确保破损部分已经被填补并恢复原有的透明度和光泽。如果修复效果不理想&#xff0c;需要及时联系维修店进行处理…

快乐数---链表的入口点

文章目录 一、鸽巢原理二、环的入口点分析题目思路代码 三、快乐数分析题目思路代码 在刷题中&#xff0c;遇到这样两道类似知识点的题目&#xff0c;下面是两道题的链接&#xff0c;感兴趣的朋友可以去尝试一下。力扣链接: 快乐数力扣链接: 环形链表。 一、鸽巢原理 这两道题…

Elastic Stack--04--ES中的检索方式、Query DSL

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.ES中的检索方式第一种方式GET bank/_search # 检索bank下的所有信息&#xff0c;包括 type 和 docsGET bank/_search?q*&sortaccount_number:asc 第二种方式…

生产管理MES系统在卫浴企业中的应用

在卫浴企业的制造过程中&#xff0c;实现透明车间管理是一个旨在提升效率、质量和可视性的重要目标。MES系统可以在卫浴企业中帮助打造透明车间&#xff0c;提升生产管理的效率和可视性。具体能实现哪些管理呢&#xff1f; 实时监控生产状态&#xff1a; MES系统可以实时监控车…

指针运算题

题目一&#xff1a; #include <stdio.h> int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);printf( "%d,%d", *(a 1), *(ptr - 1));return 0; } //程序的结果是什么&#xff1f; 答案&#xff1a; 2&#xff0c;5 详解&#xff1a; …

Kubesphere前端项目分析

1 KubeSphere console功能导图 模块&#xff1a; 命令行工具 (kubectl) 日志&#xff08;Logging&#xff09; 平台设置&#xff08;Platform Settings&#xff09; 服务组件&#xff08;Service Components&#xff09; 监控和警报&#xff08;Monitoring & Alerting&…

javascript:void(0);用法及常见问题解析

在Web开发中&#xff0c;javascript:void(0);是一个经常被用到的代码片段&#xff0c;特别是在一些老式的网页中。这个代码片段的作用是执行一个空操作&#xff08;null operation&#xff09;&#xff0c;即不执行任何操作。它的主要用途是在JavaScript代码中创建一个空链接&a…

JavaScript数组常见实例方法:forEach、filter、map、reduce、find、every等

博客背后的故事 其实我23年7月就学过这些数组方法了&#xff0c;但是为什么24年3月才做笔记呢&#xff1f;这就要讲一个小故事了&#xff08;不想听故事的同学自行拖动滚动条&#xff09; 24年年初我和两个队友合作开发一个小程序。JavaScript中数组的实例方法我已经学了很久…

阿波罗登月需要解决飞行控制问题,数学家卡尔曼在维纳控制的基础上提出了卡尔曼滤波

说到登月&#xff0c;很多人只想到和火箭以及航天器相关的技术&#xff0c;其实登月离不开信息技术的革命。因为从飞行控制到远程通信&#xff0c;都需要解决很多过去从未遇到过的难题。 登月首先要保证在月球上着陆的地点准确&#xff0c;而且要保证返回火箭和飞船能够在月球轨…

sizeof和strlen的详细万字解读

sizeof和strlen的对比 sizeof不是函数 侧面证明sizeof不是函数 如果是函数 应该需要有括号 不能落下来 strlen 只针对字符串 包含头文件 string.h 并且这个是个函数 随机数值 sizeof里面有表达式的话 表达式里面是不参与计算的 下面的s求出的是4 就是因为是不参与计算的 不…

opencv dnn模块 示例(24) 目标检测 object_detection 之 yolov8-pose 和 yolov8-obb

前面博文【opencv dnn模块 示例(23) 目标检测 object_detection 之 yolov8】 已经已经详细介绍了yolov8网络和测试。本文继续说明使用yolov8 进行 人体姿态估计 pose 和 旋转目标检测 OBB 。 文章目录 1、Yolov8-pose 简单使用2、Yolov8-OBB2.1、python 命令行测试2.2、opencv…

图机器学习(3)-面向节点的人工特征工程

0 问题引入 地铁导航图 计算机是看不懂这些图&#xff0c;计算机只能看懂向量、矩阵。 传统图机器学习只讨论连接特征。 构造一个新的特征 x 1 x 2 x_1x_2 x1​x2​&#xff0c;有利于分开这种数据。 人需要去翻译这些计算机不懂的特征&#xff0c;变成计算机可以懂…

数据结构之栈详解(C语言手撕)

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…

「2024指南」tf卡格式化了数据怎么恢复?

咨询&#xff1a;我把TF卡插入了我的安卓手机并将其设为内部存储&#xff0c;然后保存了大量重要资料。不久后&#xff0c;我无意中将TF卡拔出。当我再次插入时&#xff0c;手机提示必须格式化TF卡。我不小心点击了格式化选项&#xff0c;导致里面所有重要的资料都不见了。请问…