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

【软件逆向】如何逆向Unity3D+il2cpp开发的安卓app【IDA Pro+il2CppDumper+DnSpy+AndroidKiller】

教程背景

课程作业要求使用反编译技术,在游戏中实现无碰撞。正常情况下碰撞后角色死亡,修改为直接穿过物体不死亡。

需要准备的软件

  1. il2CppDumper。
  2. DnSpy。
  3. IDA Pro。
  4. AndroidKiller。

一、使用il2CppDumper导出程序集

  1. 将{my_game}.apk后缀修改为{my_game}.zip,使用解压工具解压至文件夹{my_game}。(my_game为apk的文件名,根据具体情况有所不同)
  2. 在桌面新建一个input文件夹,和一个output文件夹。
  3. 将{my_game}\lib\armeabi-v7a\libil2cpp.so和{my_game}\assets\bin\Data\Managed\Metadata\global-metadata.dat复制到桌面input文件夹。(其中armeabi-v7a根据apk平台不同有所差异,可能是arm64-v8a或其他)
    在这里插入图片描述
  4. 命令行运行il2CppDumper,其中<libil2cpp>表示input中的libil2cpp.so路径,<global-metadata>表示input中的global-metadata.dat的路径,<output>为output文件夹路径。
Il2CppDumper.exe <libil2cpp> <global-metadata> <output>
  1. 执行成功后,output文件夹中文件如下图所示。
    在这里插入图片描述

二、使用VS和DnSpy查看C#代码结构

  1. 使用VS打开.\output\dump.cs,可以查看C#程序中的代码结构,以及函数或类的逻辑地址。可以看到其中不包含函数的具体实现也有八万多行,其中很多函数都是系统函数,不是我们需要关注的。
    在这里插入图片描述
  2. 将.\output\DummyDll\Assembly-CSharp.dll导入到DnSpy中,可以清晰的看到不同的class和函数。
    在这里插入图片描述

三、定位需要修改的函数

  1. 由于我们需要实现角色无碰撞,所以我们定位到PlayerController中的OnTriggerEnter2D和OnCollisionEnter2D函数,这两个函数用于处理与碰撞相关的逻辑。(根据需要实现的功能,定位到的函数和修改方式均有所差异)
    在这里插入图片描述
  2. 我们只需要在il2cpp.so中让OnTriggerEnter2D函数和OnCollisionEnter2D函数不处理任何逻辑,直接return即可。
  3. 我们需要记住OnTriggerEnter2D的地址0x5E2A70和OnCollisionEnter2D的地址0x5E30C8,然后在IDA Pro中patch对应的十六进制代码。

四、使用IDA Pro修改十六进制代码

  1. 使用IDA Pro打开libil2cpp.so,提示框全选是即可。
  2. 分别跳转至0x5E2A70和0x5E30C8,修改对应的字节为BX LR(1E FF 2F E1),其中BX LR是ARM中return的汇编指令。
    在这里插入图片描述
  3. 保存patch后的libil2cpp.so为libil2cpp.so。

五、使用AndroidKiller打包运行

  1. 使用AndroidKiller打开{my_game}.apk,打开后路径如下。
    在这里插入图片描述
  2. 在文件夹中打开对应路径,然后将第四步中patch好的libil2cpp.so复制到该路径下,替换同名文件。
    在这里插入图片描述
  3. 点击左上角的编译,然后点击安装,可以直接将修改版的app安装至已经用adb连接好的android设备。
    在这里插入图片描述
  4. 运行测试,无碰撞功能已经实现,角色穿过物体不会死亡。
http://www.lryc.cn/news/220670.html

相关文章:

  • vue3ref和reactive
  • [架构之路-244]:目标系统 - 设计方法 - 软件工程 - 软件开发方法与软件开发模型
  • Matter 系列 #10|Matter 的证书吊销机制
  • mybatis动态表名
  • 高校为什么需要大数据挖掘平台?
  • @Value的使用
  • 用 Wireshark 在 Firefox 或 Google Chrome 上使用 SSLKEYLOGFILE 环境变量解密 SSL 流量
  • 京东大数据:2023年Q3美妆行业数据分析报告
  • [题] 改革春风吹满地 #图论 #多边形面积
  • FPGA时序分析与约束(2)——时序电路时序
  • 明御安全网关任意文件上传漏洞复现
  • JVM虚拟机:如何查看自己的JVM默认的垃圾回收器
  • 目标检测YOLO系列从入门到精通技术详解100篇-【目标检测】机器视觉
  • 设计模式——建造者模式
  • Go语言用Colly库编写的图像爬虫程序
  • 14.2 并发与竞争实验
  • 【MediaTek】T750实现Host 网络和Guest 网络隔离以及各个连接终端间隔离功能
  • 数字滤波器之高通滤波器设计
  • 【leetcode】58.最后一个单词的长度
  • 用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组
  • antd本地上传excel文件并读取文件的数据转为json
  • BI数据可视化:不要重复做报表,只需更新数据
  • fiddler抓包拦截请求转发到其他地址
  • 【Shell编程】| if 判断
  • Java手动引入Maven依赖的Jar包
  • 计算机毕设 基于大数据的社交平台数据爬虫舆情分析可视化系统
  • conda取消自动进入base环境
  • 【文生图】Stable Diffusion XL 1.0模型Full Fine-tuning指南(U-Net全参微调)
  • STM32笔记—DMA
  • 机器学习概论