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

本文主要是介绍【软件逆向】如何逆向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. 运行测试,无碰撞功能已经实现,角色穿过物体不会死亡。

这篇关于【软件逆向】如何逆向Unity3D+il2cpp开发的安卓app【IDA Pro+il2CppDumper+DnSpy+AndroidKiller】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/347964

相关文章

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

Ubuntu 怎么启用 Universe 和 Multiverse 软件源?

《Ubuntu怎么启用Universe和Multiverse软件源?》在Ubuntu中,软件源是用于获取和安装软件的服务器,通过设置和管理软件源,您可以确保系统能够从可靠的来源获取最新的软件... Ubuntu 是一款广受认可且声誉良好的开源操作系统,允许用户通过其庞大的软件包来定制和增强计算体验。这些软件

Ubuntu 24.04 LTS怎么关闭 Ubuntu Pro 更新提示弹窗?

《Ubuntu24.04LTS怎么关闭UbuntuPro更新提示弹窗?》Ubuntu每次开机都会弹窗提示安全更新,设置里最多只能取消自动下载,自动更新,但无法做到直接让自动更新的弹窗不出现,... 如果你正在使用 Ubuntu 24.04 LTS,可能会注意到——在使用「软件更新器」或运行 APT 命令时,

最便宜的8口2.5G网管交换机! 水星SE109 Pro拆机测评

《最便宜的8口2.5G网管交换机!水星SE109Pro拆机测评》水星SE109Pro价格很便宜,水星SE109Pro,外观、接口,和SE109一样,区别Pro是网管型的,下面我们就来看看详细拆... 听说水星SE109 Pro开卖了,PDD卖 220元,于是买回来javascript拆机看看。推荐阅读:水

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char