Flydragon's Blog
563 words
3 minutes
Unity 逆向入門第二篇:反編譯

visitor badge

前言#

這篇是用 DnSpy 反編譯 Mono Build 的 Unity App
還有用 Il2CppDumper 反編譯 IL2CPP Build

DnSpy 反編譯 Mono Build#

一樣用我高一的物理作業當例子

用 DnSpy 打開 Assembly-CSharp.dll (File > Open)

<app目錄>\<app名稱>_Data\Managed\Assembly-CSharp.dll

alt text

打開後可以在 Assembly Explorer 看到 ball 這個 Script
alt text

反編譯的結果是這樣的:

using System; using UnityEngine; // Token: 0x02000002 RID: 2 public class ball : MonoBehaviour { // Token: 0x06000001 RID: 1 RVA: 0x00002050 File Offset: 0x00000250 private void Start() { Object.Instantiate<GameObject>(this.self); } // Token: 0x06000002 RID: 2 RVA: 0x00002060 File Offset: 0x00000260 private void FixedUpdate() { this.timer += Time.deltaTime; if (this.timer >= 0.4f && !this.Grounded) { this.timer = 0f; Object.Instantiate<GameObject>(this.self, base.transform.position, base.transform.rotation); } } // Token: 0x06000003 RID: 3 RVA: 0x000020C1 File Offset: 0x000002C1 private void OnCollisionEnter(Collision collision) { this.Grounded = true; } // Token: 0x04000001 RID: 1 public GameObject self; // Token: 0x04000002 RID: 2 private float timer; // Token: 0x04000003 RID: 3 private bool Grounded; }

不能說很像,只能說一模一樣

試玩一下這個 App,按下 Drop 後會放掉球
alt text

假設我覺得這個軌跡不夠密集,該怎麼 Patch 呢?

很簡單,對著你想修改的部分按右鍵就好了
alt text

原本是每 0.4 秒產生一次,現在我改成每 0.1 秒產生一次
alt text

Compile 可能會報錯,照著錯誤訊息修改一下就可以了 alt text alt text

成功 Compile 之後可以看到我們做的修改 alt text

修改完成後記得要存檔(ctrl + shift + s)

存檔完就可以去看看效果
alt text

接下來就可以發揮你的想像力了,例如我想修改球的大小
alt text

那結果就會是這樣的
alt text

IL2CPP#

前面說到如果是 Mono Build 可以直接用 DnSpy,但遊戲廠商也不傻,基本上都會用上 IL2CPP
有的還會加殼,不過那應該可以再寫一篇了

總之想要逆向 IL2CPP 可以用 Il2CppDumper + IDA

  1. Il2CppDumper

執行 Il2CppDumper.exe 依序選擇 GameAssembly.dllglobal-metadata.dat

<app目錄>\GameAssembly.dll
<app目錄>\<app名稱>_Data\il2cpp_data\Metadata\global-metadata.dat

alt text

alt text

  1. DnSpy Assembly-CSharp.dll
Il2CppDumper\DummyDll\

可以看到函數名稱和變數等,接下來還需要反編譯出內部邏輯 alt text

  1. IDA GameAssembly.dll
<app目錄>\GameAssembly.dll

接下來要用到 ida_with_struct_py3.py 這個腳本

在 IDA 裡按 Alt + F7 或是 File > Script File 選擇腳本
alt text

再來是 script.json
alt text

最後是 il2cpp.h
alt text

  1. 成功ㄌ

alt text

後記#

沒想到 Il2CppDumper 跟 AssetStudio 的作者是同個人

Unity 逆向入門第二篇:反編譯
https://flydragonw.github.io/posts/unity_reverse_2/
Author
FlyDragon
Published at
2024-07-24