当前位置: 首页 > news >正文

安卓U3D逆向从Assembly-CSharp到il2cpp

随着unity技术的发展及厂商对于脚本源码的保护,很大一部分U3D应用的scripting backend已经由mono转为了il2cpp,本文从unity简单应用的制作讲起,介绍U3D应用脚本的Assembly-CSharp.dll的逆向及il2cpp.so的逆向分析。

目录如下:

0x1.U3D应用制作 → 输出两个apk,分别为mono和il2cpp

0x2.mono后台apk的逆向分析 → Assembly-CSharp.dll 逆向修改

0x3.il2cpp后台apk的逆向分析 → il2cpp.so逆向修改

正文内容:

0x1.U3D应用制作

工具:Unity最新版本 2017.2.1f1

1.1 创建Project

新建一个Unity3D Project,Project name为UnityTest,如下图
在这里插入图片描述
1.2 创建script定义界面元素

创建GameObject和C# Script,均命名为Sample, 同时创建两个UI Text,分别命名为HP和Attack。打开C# Script,进行界面元素的义,创建三个矩形按钮分别为HP,ATK和LevelUP,设置点击HP显示100,点击ATK显示50,点击LevelUP后HP和ATK的值都翻倍。

代码如下:

using UnityEngine;using UnityEngine.UI;public class Sample : MonoBehaviour{public Text _hp;public Text _attack;private Rect _healRect = new Rect(10f, 20f, 300f, 100f);private Rect _attackRect = new Rect(10f, 170f, 300f, 100f);private Rect _LevelUpRect = new Rect(10f, 320f, 300f, 100f);public void SetHp(int hp){_hp.text = hp.ToString();}public void SetAttack(int attack){_attack.text = attack.ToString();}public void OnGUI(){int hp_value = 100;int attack_value = 50;if (GUI.Button(_healRect, "HP")){SetHp(hp_value);}if (GUI.Button(_attackRect, "ATK")){SetAttack(attack_value);}if (GUI.Button(_LevelUpRect, "LevelUp")){SetHp(hp_value * 2);SetAttack(attack_value * 2);}}}

代码和界面完成后,我们设置包名(com.test.test)进行打包,分别输出mono后台和il2cpp后台的apk。
在这里插入图片描述
点击Player Setting进行后台设置,可点击Scripting Backend选择mono或者il2cpp。
在这里插入图片描述
得到的apk我们分别命名为Sample-mono.apk和Sample-il2cpp.apk。

安装测试正常,界面如下:

初始界面
在这里插入图片描述
点击HP和ATK后界面
在这里插入图片描述
点击LevelUp后界面
在这里插入图片描述
至此,我们完成了两种后台的apk的创建,接下来先对mono后台的apk进行逆向分析。

0x2.mono后台apk的逆向分析

工具:Android Killer,DnSpy

思路:将Sample-il2cpp.apk拖拽进Android Killer进行反编译,获取到脚本文件/Assets/bin/Data/Managed/Assembly-CSharp.dll,dll拖进DnSpy进行反编译分析,修改关键method后,保存并重新打包运行。

Android Killer部分不再上图,Assembly-CSharp.dll拖拽进DnSpy,我们可以很轻易的找到我们需要的关键函数,如图:
在这里插入图片描述
根据代码信息,我们可以确定,num为初始HP,num2为初始ATK,我们在此通过编辑IL指令将他们的值分别改为1000和500,如图:
在这里插入图片描述
确认后C#编码变更如下:
在这里插入图片描述
保存后,重新打包apk安装测试结果如下:
在这里插入图片描述
至此,我们的mono后台apk修改已经完成,接下来我们进行il2cpp后台apk的修改。

0x3.il2cpp后台apk的逆向分析

工具:Android Killer,il2cppDumper,IDA,010Editor

思路:利用il2cppDumper获取到关键函数的offset后,使用IDA找到关键函数,分析汇编语言逻辑后,利用010Editor进行16进制文件编辑来实现修改。

Android Killer相关操作再次不做赘述,反编译后我们得到的Project中,lib目录如图:
在这里插入图片描述
在此我们只分析armeabi-v7a文件夹下的libil2cpp.so,x86为intel架构,暂不做分析处理。

将il2cpp.so连同assets\bin\Data\Managed\Metadata 目录下的global-metadata.dat 文件一起放进il2cppDumper目录。
在这里插入图片描述

http://www.lryc.cn/news/327367.html

相关文章:

  • 计算机网络——30SDN控制平面
  • Obsidian插件-高亮块(Admonition)
  • jHipster 之 webflux-前端用EventSource处理sse变成了批量处理而非实时处理
  • 原型链-(前端面试 2024 版)
  • 网络套接字补充——UDP网络编程
  • 自动化测试 —— Pytest fixture及conftest详解
  • Scala第十四章节(隐式转换、隐式参数以及获取列表元素平均值的案例)
  • VsCode的json文件不允许注释的解决办法
  • 利用图像识别进行疾病诊断
  • 大数据学习-2024/3/28-excel文件的读写操作
  • k8s 如何获取加入节点命名
  • 黑群晖基于docker配置frp内网穿透
  • 多线程基础:线程通信内容补充
  • 使用Jenkins打包时执行失败,但手动执行没有问题如ERR_ELECTRON_BUILDER_CANNOT_EXECUTE
  • OpenCV图像滤波、边缘检测
  • 前端项目在本地localhost可以调取到拍照或麦克风等设备,但是在局域网内IP+端口号访问项目时访问不到设备
  • flutter生成二维码并截图保存到图库
  • EasyExcel Converter实现java对象和excel单元格转换
  • stamac Ethernet DTS配置
  • Svg Flow Editor 原生svg流程图编辑器(四)
  • Verilog语法之assign语句学习
  • Cocos2dx-lua ScrollView[三]高级篇
  • 后端之卡尔曼滤波
  • Docker 夺命连环 15 问
  • 2024最新版克魔助手抓包教程(9) - 克魔助手 IOS 数据抓包
  • Spring Boot 防止XSS攻击
  • aidl文件生成Java、C++[android]、C++[ndk]、Rust接口
  • 多源统一视频融合可视指挥调度平台VMS/smarteye系统概述
  • PyTorch简介:与TensorFlow的比较
  • 虚拟机-从头配置Ubuntu18.04(包括anaconda,cuda,cudnn,pycharm,ros,vscode)