潍坊免费自助建站模板,域名怎么建设网站,wordpress有中文主题吗,旅游网站开发的意义相关资料教程背景
课程作业要求使用反编译技术#xff0c;在游戏中实现无碰撞。正常情况下碰撞后角色死亡#xff0c;修改为直接穿过物体不死亡。
需要准备的软件
il2CppDumper。DnSpy。IDA Pro。AndroidKiller。
一、使用il2CppDumper导出程序集
将{my_game}.apk后缀修改为{my_…教程背景
课程作业要求使用反编译技术在游戏中实现无碰撞。正常情况下碰撞后角色死亡修改为直接穿过物体不死亡。
需要准备的软件
il2CppDumper。DnSpy。IDA Pro。AndroidKiller。
一、使用il2CppDumper导出程序集
将{my_game}.apk后缀修改为{my_game}.zip使用解压工具解压至文件夹{my_game}。my_game为apk的文件名根据具体情况有所不同在桌面新建一个input文件夹和一个output文件夹。将{my_game}\lib\armeabi-v7a\libil2cpp.so和{my_game}\assets\bin\Data\Managed\Metadata\global-metadata.dat复制到桌面input文件夹。其中armeabi-v7a根据apk平台不同有所差异可能是arm64-v8a或其他 命令行运行il2CppDumper其中libil2cpp表示input中的libil2cpp.so路径global-metadata表示input中的global-metadata.dat的路径output为output文件夹路径。
Il2CppDumper.exe libil2cpp global-metadata output执行成功后output文件夹中文件如下图所示。
二、使用VS和DnSpy查看C#代码结构
使用VS打开.\output\dump.cs可以查看C#程序中的代码结构以及函数或类的逻辑地址。可以看到其中不包含函数的具体实现也有八万多行其中很多函数都是系统函数不是我们需要关注的。 将.\output\DummyDll\Assembly-CSharp.dll导入到DnSpy中可以清晰的看到不同的class和函数。
三、定位需要修改的函数
由于我们需要实现角色无碰撞所以我们定位到PlayerController中的OnTriggerEnter2D和OnCollisionEnter2D函数这两个函数用于处理与碰撞相关的逻辑。根据需要实现的功能定位到的函数和修改方式均有所差异 我们只需要在il2cpp.so中让OnTriggerEnter2D函数和OnCollisionEnter2D函数不处理任何逻辑直接return即可。我们需要记住OnTriggerEnter2D的地址0x5E2A70和OnCollisionEnter2D的地址0x5E30C8然后在IDA Pro中patch对应的十六进制代码。
四、使用IDA Pro修改十六进制代码
使用IDA Pro打开libil2cpp.so提示框全选是即可。分别跳转至0x5E2A70和0x5E30C8修改对应的字节为BX LR1E FF 2F E1其中BX LR是ARM中return的汇编指令。 保存patch后的libil2cpp.so为libil2cpp.so。
五、使用AndroidKiller打包运行
使用AndroidKiller打开{my_game}.apk打开后路径如下。 在文件夹中打开对应路径然后将第四步中patch好的libil2cpp.so复制到该路径下替换同名文件。 点击左上角的编译然后点击安装可以直接将修改版的app安装至已经用adb连接好的android设备。 运行测试无碰撞功能已经实现角色穿过物体不会死亡。