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

2024-04-10 1061阅读

教程背景

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

需要准备的软件

  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或其他)

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

  4. 命令行运行il2CppDumper,其中表示input中的libil2cpp.so路径,表示input中的global-metadata.dat的路径,为output文件夹路径。
Il2CppDumper.exe   
  1. 执行成功后,output文件夹中文件如下图所示。

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

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

  1. 使用VS打开.\output\dump.cs,可以查看C#程序中的代码结构,以及函数或类的逻辑地址。可以看到其中不包含函数的具体实现也有八万多行,其中很多函数都是系统函数,不是我们需要关注的。

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

  2. 将.\output\DummyDll\Assembly-CSharp.dll导入到DnSpy中,可以清晰的看到不同的class和函数。

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

三、定位需要修改的函数

  1. 由于我们需要实现角色无碰撞,所以我们定位到PlayerController中的OnTriggerEnter2D和OnCollisionEnter2D函数,这两个函数用于处理与碰撞相关的逻辑。(根据需要实现的功能,定位到的函数和修改方式均有所差异)

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

  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的汇编指令。

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

  3. 保存patch后的libil2cpp.so为libil2cpp.so。

五、使用AndroidKiller打包运行

  1. 使用AndroidKiller打开{my_game}.apk,打开后路径如下。

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

  2. 在文件夹中打开对应路径,然后将第四步中patch好的libil2cpp.so复制到该路径下,替换同名文件。

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

  3. 点击左上角的编译,然后点击安装,可以直接将修改版的app安装至已经用adb连接好的android设备。

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

  4. 运行测试,无碰撞功能已经实现,角色穿过物体不会死亡。
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]