Dengan sangat menyesal bahwa saya harus mengumumkan bahwa pekerjaan pengembangan pada IL2CPPInspector telah dihentikan untuk masa mendatang.
Alasan untuk ini adalah karena kesehatan dan perubahan dalam kehidupan pribadi saya, saya tidak punya waktu untuk berkomitmen untuk mengerjakan proyek lagi. Ini sangat membuat saya frustasi tetapi ada sedikit yang bisa saya lakukan.
Jangan ragu untuk membayar proyek dan melakukan perbaikan! Anda juga dapat terus memposting masalah karena saya ingin memiliki ringkasan bug dan masalah yang disimpan jika saya atau orang lain memiliki kesempatan untuk kembali mengerjakan ini. Harap dicatat, bahwa saya tidak akan menanggapi masalah atau PR ke depan untuk masa mendatang.
Jika Anda membutuhkan alat IL2CPP, saya merekomendasikan proyek teman dan kolega saya CPP2IL yang merupakan alat kerja-dalam-kemajuan untuk mengonversi binari IL2CPP langsung kembali ke kode IL yang dapat dengan mudah dilihat dalam DNSPY dll. Ini adalah tugas mammoth jadi harap lakukan dan mendukung pekerjaannya pada proyek yang luar biasa ini!
Selamat peretasan,
Katy.
IL2CPPInspector membantu Anda untuk merekayasa kembali aplikasi IL2CPP, memberikan analisis paling lengkap yang tersedia saat ini.

Output IL2CPP Jenis Definisi, Metadata dan Metode Pointer sebagai C# Stub Code
Buat .NET Assembly Shim DLL yang berisi struktur aplikasi IL2CPP dan metadata untuk digunakan dalam dekompilasi seperti ILSPY, DNSPY, Pemuatan Aset Unity dengan AssetStudio atau Generasi Proksi Dikelola dengan IL2CPPassemblyunhollower
Buat perancah C ++ untuk semua jenis, metode, pointer fungsi, dan fungsi API dalam aplikasi IL2CPP untuk digunakan di X64DBG, substrat Cydia dll.
Buat skrip Ida dan Ghidra Python untuk mengisi simbol, fungsi dan ketik informasi; Termasuk kait API untuk mengimplementasikan skrip untuk target lainnya
Buat Proyek Injeksi Visual Studio C ++ DLL langsung dari file IL2CPP
Buat Visual Studio C# Code Stub Solusi langsung dari file IL2CPP
Buat JSON Metadata dengan peta alamat lengkap langsung dari file IL2CPP.
Buat binari IL2CPP dari kode sumber C# sewenang -wenang tanpa proyek Unity
Tiga API utama untuk digunakan dalam proyek analisis statis khusus Anda sendiri untuk meminta metadata biner tingkat rendah, model tipe .NET dan seluruh aplikasi C ++. Ini juga tersedia sebagai paket Nuget.
Plugin SDK memungkinkan Anda membuat plugin khusus untuk memperluas kemampuan IL2CPPInspector
Mengalahkan jenis kebingungan tertentu
Mendukung semua format file utama dan arsitektur prosesor
Bekerja pada Windows, MacOS X dan Linux. GUI Terpadu untuk Pengguna Windows dengan Dukungan Seret & Jatuhkan
Diuji dengan setiap rilis IL2CPP sejak Unity 5.3.0
Anda dapat membaca lebih lanjut tentang cara kerja IL2CPP dalam serial Reverse Engineering IL2CPP saya:
Bagian 1: Halo Dunia dan Toolchain IL2CPP
Bagian 2: Tinjauan Struktural & Menemukan Metadata
IL2CPPINSEKTOR Plugin Development Wiki
Cara membuat, menggunakan, dan men -debug proyek injeksi IL2CPP DLL
Bekerja dengan kode dalam proyek injeksi IL2CPP DLL
Menggunakan model tipe IL2CPPInspector untuk mengekstrak definisi protobuf-net (Studi Kasus: Fall Guys)
Menemukan Loader untuk File Global-Metadata.DAT yang Dikalahkan-menjelaskan cara menemukan kode loader, deobfuscation dan/atau dekripsi untuk global-metadata.dat di hampir semua aplikasi IL2CPP
Aktifkan pemuatan League of Legends: Wild Rift - Meliputi Dekripsi XOR, Dekripsi String XOR, Dekripsi Rot Ekspor API, Kebingungan Data Metadata biner
Aktifkan pemuatan dampak honkai (3 bagian) - Meliputi fungsi menemukan dalam suatu gambar, kebingungan data dari global -metadata.dat, teknik dekompiler IDA, cara menulis plugin
VMProtect Kontrol Kebingungan dalam dampak honkai - mencakup mengekstrapolasi jalur kode dari fungsi dengan perataan aliran kontrol menggunakan X64DBG dan dekompiler IDA IDA dan IDA
Reverse Engineering Genshin Dampak dengan PowerShell - Meliputi Menulis Tes Harness untuk menemukan fungsi dalam biner yang dikalahkan melalui serangan brute -force / fuzzing terbalik
Format file dan dukungan arsitektur:
Senang memilikinya:
using yang diperlukan. Konflik ruang lingkup dan jenis nama diselesaikan secara otomatis untuk menghasilkan kode yang dikompilasi.Target Perpustakaan Kelas .NET Core 3.1. Dibangun dengan Visual Studio 2019.
Catatan : IL2CPPInspector bukan pembangkit. Ini dapat memberi Anda struktur aplikasi dan alamat fungsi untuk setiap metode sehingga Anda dapat dengan mudah melompat langsung ke metode yang menarik pada disassembler Anda. Itu tidak berusaha untuk memulihkan seluruh kode sumber aplikasi.
git clone --recursive https://github.com/djkaty/Il2CppInspector
cd Il2CppInspector
Bangun versi CLI dan Windows GUI:
dotnet publish -c Release
Dapatkan semua plugin saat ini (opsional):
powershell -f get-plugins.ps1
Bangun versi CLI:
cd Il2CppInspector.CLI
dotnet publish -r osx-x64 -c Release
Dapatkan semua plugin saat ini (opsional):
../get-plugins.sh
Bangun versi CLI:
cd Il2CppInspector.CLI
dotnet publish -r linux-x64 -c Release
Dapatkan semua plugin saat ini (opsional):
../get-plugins.sh
Untuk sistem operasi lain yang mendukung .NET Core, tambahkan -r xxx ke perintah akhir di mana xxx adalah singkirkan dari https://docs.microsoft.com/en-us/dotnet/articles/core/rid-catalog
Binary output untuk penggunaan baris perintah ditempatkan di Il2CppInspector/Il2CppInspector.CLI/bin/Release/netcoreapp3.0/[win|osx|linux]-x64/publish/Il2CppInspector.exe .
Biner output untuk Windows GUI ditempatkan di Il2CppInspector/Il2CppInspector.GUI/bin/Release/netcoreapp3.1/[win|osx|linux]-x64/publish/Il2CppInspector.exe .
Folder plugins harus ditempatkan di folder yang sama dengan Il2CppInspector.exe .
Jalankan Il2CppInspector.exe di prompt perintah.
Format file dan arsitektur terdeteksi secara otomatis.
Semua output dihasilkan secara default. Untuk hanya menghasilkan output spesifik, gunakan sakelar --select-outputs dalam kombinasi dengan sakelar pemilihan output.
-i, --bin (Default: libil2cpp.so) IL2CPP binary, APK, AAB, XAPK, IPA, Zip or Linux process map text input file(s) (single file or comma-separated list for split APKs)
-m, --metadata (Default: global-metadata.dat) IL2CPP metadata file input (ignored for APK/AAB/XAPK/IPA/Zip)
--image-base For ELF memory dumps, the image base address in hex (ignored for standard ELF files and other file formats)
--select-outputs Only generate outputs specified on the command line (use --cs-out, --py-out, --cpp-out, --json-out, --dll-out to select outputs). If not specified, all outputs are generated
-c, --cs-out (Default: types.cs) C# output file (when using single-file layout) or path (when using per namespace, assembly or class layout)
-p, --py-out (Default: il2cpp.py) Python script output file
-h, --cpp-out (Default: cpp) C++ scaffolding / DLL injection project output path
-o, --json-out (Default: metadata.json) JSON metadata output file
-d, --dll-out (Default: dll) .NET assembly shim DLLs output path
--metadata-out IL2CPP metadata file output (for extracted or decrypted metadata; ignored otherwise)
--binary-out IL2CPP binary file output (for extracted or decrypted binaries; ignored otherwise; suffixes will be appended for multiple files)
-e, --exclude-namespaces (Default: System Mono Microsoft.Reflection Microsoft.Win32 Internal.Runtime Unity UnityEditor UnityEngine UnityEngineInternal AOT JetBrains.Annotations) Comma-separated list of namespaces to suppress in C# output, or 'none' to include all namespaces
-l, --layout (Default: single) Partitioning of C# output ('single' = single file, 'namespace' = one file per namespace in folders, 'assembly' = one file per assembly, 'class' = one file per class in namespace folders, 'tree' = one file per class in assembly and
namespace folders)
-s, --sort (Default: index) Sort order of type definitions in C# output ('index' = by type definition index, 'name' = by type name). No effect when using file-per-class or tree layout
-f, --flatten Flatten the namespace hierarchy into a single folder rather than using per-namespace subfolders. Only used when layout is per-namespace or per-class. Ignored for tree layout
-n, --suppress-metadata Diff tidying: suppress method pointers, field offsets and type indices from C# output. Useful for comparing two versions of a binary for changes with a diff tool
--suppress-dll-metadata Diff tidying: suppress method pointers, field offsets and type indices attributes from DLL output. Useful for comparing two versions of a binary for changes
-k, --must-compile Compilation tidying: try really hard to make code that compiles. Suppress generation of code for items with CompilerGenerated attribute. Comment out attributes without parameterless constructors or all-optional constructor arguments. Don't emit
add/remove/raise on events. Specify AttributeTargets.All on classes with AttributeUsage attribute. Force auto-properties to have get accessors. Force regular properties to have bodies. Suppress global::Locale classes. Generate dummy parameterless
base constructors and ref return fields.
--separate-attributes Place assembly-level attributes in their own AssemblyInfo.cs files. Only used when layout is per-assembly or tree
-j, --project Create a Visual Studio solution and projects. Implies --layout tree, --must-compile and --separate-attributes
--cpp-compiler (Default: BinaryFormat) Compiler to target for C++ output (MSVC or GCC); selects based on binary executable type by default
-t, --script-target (Default: IDA) Application to target for Python script output (IDA or Ghidra) - case-sensitive
--unity-path (Default: C:Program FilesUnityHubEditor*) Path to Unity editor (when using --project). Wildcards select last matching folder in alphanumeric order
--unity-assemblies (Default: C:Program FilesUnityHubEditor*EditorDataResourcesPackageManagerProjectTemplateslibcachecom.unity.template.3d-*ScriptAssemblies) Path to Unity script assemblies (when using --project). Wildcards select last matching folder in
alphanumeric order
--unity-version Version of Unity used to create the input files, if known. Used to enhance Python, C++ and JSON output. If not specified, a close match will be inferred automatically.
--unity-version-from-asset A Unity asset file used to determine the exact Unity version. Overrides --unity-version.
--plugins Specify options for plugins. Enclose each plugin's configuration in quotes as follows: --plugins "pluginone --option1 value1 --option2 value2" "plugintwo --option...". Use --plugins <name> to get help on a specific plugin
--help Display this help screen.
--version Display version information.
Apple Universal Binaries dan APK/XAPK dengan binari untuk beberapa arsitektur : Saat menggunakan CLI, beberapa file output akan dihasilkan, dengan masing -masing nama file selain yang dimanja oleh indeks gambar dalam biner. Gambar yang tidak didukung akan dilewati.
Paket IPA : Yang dapat dieksekusi harus didekripsi terlebih dahulu. Biner yang dapat dienkripsi tidak didukung.
Paket APK Split : Saat menggunakan CLI, tentukan daftar file APK dengan koma antara setiap nama file.
ELF Binaries Dibuat dari Dump Memori : Tentukan basis gambar (dalam hex) menggunakan --image-base . Jika basis gambar yang disediakan tidak benar, aplikasi mungkin macet.
GameGuardian Dumps (dan Linux Process Map Dumps lainnya) : Anda dapat menggunakan file *-maps.txt sebagai pengganti biner IL2CPP. IL2CPPInspector akan memindai folder yang berisi file peta untuk mencocokkan file .bin dan menyusun kembali dan rebase libil2cpp.so secara otomatis. Karena itu Anda tidak perlu membuat file secara manual atau memberikan alamat basis gambar saat menggunakan tempat pembuangan ini. Agar ini berfungsi, baik file teks maupun file biner apa pun harus diganti namanya, dan semua harus berada di folder yang sama.
File PE yang dikemas (DLL) : PERINGATAN: Memuat file PE yang dikemas akan menyebabkan titik masuk DLL dan fungsi inisialisasi untuk dieksekusi. Jangan memuat DLL berbahaya dan tidak pernah menjalankan IL2CPPInspector sebagai administrator saat menangani file PE yang dikemas. Gunakan dengan risiko Anda sendiri.
IL2CPPInspector dapat membuat file rintisan C# dengan pointer metadata untuk memungkinkan Anda menjelajahi biner IL2CPP dalam format yang mudah dibaca.
Tentukan sakelar -c untuk memilih file atau path output C#.
Untuk mengecualikan tipe dari ruang nama tertentu dari yang dihasilkan dalam output file Sumber C#, berikan daftar namespaces yang dipisahkan secara koma di --exclude-namespaces . Namespaces berikut akan dikecualikan jika tidak ada argumen yang ditentukan:
System
Mono
Microsoft.Reflection
Microsoft.Win32
Internal.Runtime
Unity
UnityEditor
UnityEngine
UnityEngineInternal
AOT
JetBrains.Annotations
Memberikan argumen untuk --exclude-namespaces akan mengesampingkan daftar default. Untuk mengeluarkan semua ruang nama, gunakan --exclude-namespaces=none . Ini hanya berlaku untuk output C# prototipe.
Anda dapat menentukan tata letak output dengan sakelar --layout :
single - Semua jenis dalam satu filenamespace - satu namespace per file (setiap file akan diberikan nama namespace)assembly - Satu Perakitan per File (setiap file akan diberikan nama perakitan)class - satu kelas per filetree -Satu kelas per file dalam struktur folder seperti pohon dengan folder perakitan tingkat atas dan folder namespace tingkat kedua Anda dapat menentukan pemesanan tipe intra-file dengan sakelar --sort :
index - STRY BOLY DEFINISI INDEX Seperti yang ditemukan dalam metadata IL2CPPname - Urutkan Abjad berdasarkan Jenis Nama Sakelar ini tidak berpengaruh saat menggunakan tata letak class atau tree .
Sakelar --flatten memungkinkan Anda untuk meratakan hierarki namespaces bersarang ketika layout adalah class atau namespace , yaitu. Serangkaian Sub-Folders System/IO/Compression sebaliknya akan menjadi sub-level tunggal Sub-Folder System.IO.Compression .
Sakelar --suppress-metadata memungkinkan Anda untuk menekan output komentar termasuk pointer metode, offset lapangan dan indeks jenis. Ini berguna ketika Anda ingin membedakan perubahan antara dua versi aplikasi untuk hanya melihat jenis mana yang telah berubah.
--seperate-attributes mengarahkan IL2CPPInspector untuk menempatkan atribut tingkat perakitan di file AssemblyInfo.cs mereka sendiri daripada di bagian atas file pertama yang dihasilkan untuk setiap perakitan, ketika layout adalah assembly atau tree .
Cukup jalankan IL2CPPInspector dengan sakelar -p untuk memilih file output skrip IDA. Muat file biner Anda ke IDA, tekan Alt+F7 dan pilih skrip yang dihasilkan. Amati jendela output saat IDA menganalisis file - ini mungkin memakan waktu lama.
Tiga file dihasilkan oleh IL2CPPInspector untuk Idapython: Script Python itu sendiri, file metadata JSON dan file header tipe C ++ (ini adalah cpp/appdata/il2cpp-types.h Secara default jika Anda menggunakan CLI, atau il2cpp.h jika Anda menggunakan GUI). File -file ini harus hadir agar skrip berhasil dijalankan.
Jika Anda tahu versi Unity Binary yang dikompilasi dengan, Anda dapat meningkatkan output dengan menentukan ini dengan --unity-version , misalnya --unity-version 2019.3.1f1 . Anda juga dapat menyediakan file aset apa pun dari aplikasi untuk mendeteksi versi Unity dengan --unity-version-from-asset . Kalau tidak, IL2CPPInspector akan membuat tebakan yang berpendidikan berdasarkan isi biner.
IL2CPPInspector menghasilkan data berikut untuk proyek IDA:
Contoh dekompilasi IDA C ++ Setelah menerapkan IL2CPPInspector (kode inisialisasi dihilangkan untuk singkat):

Jalankan IL2CPPInspector dengan sakelar -p untuk memilih file output skrip Ghidra, dan -t Ghidra (peka case) untuk menentukan Ghidra sebagai jenis skrip yang ingin Anda hasilkan.
Tiga file dihasilkan oleh IL2CPPInspector untuk Ghidra: skrip Python itu sendiri, file metadata JSON dan file header tipe C ++. File -file ini harus hadir agar skrip berhasil dijalankan.
Jika Anda tahu versi Unity Binary yang dikompilasi dengan, Anda dapat meningkatkan output dengan menentukan ini dengan --unity-version , misalnya --unity-version 2019.3.1f1 . Anda juga dapat menyediakan file aset apa pun dari aplikasi untuk mendeteksi versi Unity dengan --unity-version-from-asset . Kalau tidak, IL2CPPInspector akan membuat tebakan yang berpendidikan berdasarkan isi biner.
Catatan: Untuk hasil terbaik, pilih tidak ketika Ghidra bertanya apakah Anda ingin melakukan analisis otomatis ketika biner pertama kali dimuat. Jika Anda menerima Conflicting data exists at address saat menjalankan skrip di bawah ini, muat ulang biner ke dalam proyek dan pilih tidak pada prompt analisis otomatis.
Catatan: Untuk secara signifikan mempercepat analisis untuk file ELF, atur basis gambar ke nol ( 0x00000000 ) di opsi beban untuk biner. Untuk alasan kompatibilitas, mengeksekusi skrip Ghidra Python pada file ELF akan mengubah basis gambar file menjadi nol untuk Anda jika perlu, namun jika basis gambar saat ini bukan nol, ini mungkin membutuhkan waktu yang sangat lama untuk diselesaikan. Format file lainnya akan mempertahankan basis gambar yang sama.
Untuk mengimpor metadata ke proyek Ghidra yang ada:
Dari browser kode , pilih File -> Parse C Sumber ...
Buat profil baru dan tambahkan file header tipe C ++ yang dihasilkan. Ini adalah cpp/appdata/il2cpp-types.h secara default jika Anda menggunakan CLI, atau il2cpp.h jika Anda menggunakan GUI.
Pastikan opsi parse diatur persis seperti berikut:
-D_GHIDRA_
Klik Parse untuk memprogram dan terima peringatan apa pun. Ini mungkin butuh waktu lama untuk diselesaikan.
Buka manajer skrip dan tambahkan folder output yang Anda pilih di IL2CPPInspector sebagai folder skrip.
Jika Anda telah menggunakan skrip dari IL2CPPInspector untuk biner lainnya, pastikan file Python dinamai secara berbeda, atau nonaktifkan penggunaan folder skrip sebelumnya.
Klik Refresh untuk membuat skrip muncul di manajer skrip .
Klik kanan skrip dan pilih jalankan . Ini mungkin membutuhkan waktu untuk menyelesaikannya.

IL2CPPInspector menghasilkan data yang identik untuk proyek GHIDRA seperti halnya untuk IDA - lihat bagian di atas untuk detailnya.
Contoh dekompilasi Ghidra C ++ Setelah menerapkan IL2CPPInspector:

IL2CPPInspector menghasilkan serangkaian file sumber C ++ yang dapat Anda gunakan dalam berbagai cara, misalnya:
Jalankan IL2CPPInspector dengan sakelar -h untuk memilih folder output C ++.
Jika Anda tahu versi Unity Binary yang dikompilasi dengan, Anda dapat meningkatkan output dengan menentukan ini dengan --unity-version , misalnya --unity-version 2019.3.1f1 . Anda juga dapat menyediakan file aset apa pun dari aplikasi untuk mendeteksi versi Unity dengan --unity-version-from-asset . Kalau tidak, IL2CPPInspector akan membuat tebakan yang berpendidikan berdasarkan isi biner.
Anda dapat menargetkan kompiler C ++ mana yang ingin Anda gunakan file output dengan: Tentukan --cpp-compiler MSVC untuk Visual Studio dan --cpp-compiler GCC untuk GCC atau Clang.
IL2CPPInspector melakukan resolusi konflik nama otomatis untuk menghindari penggunaan simbol dan kata kunci yang telah ditentukan sebelumnya dalam C ++, dan untuk menangani definisi ulang simbol bernama yang sama dalam aplikasi.
Beberapa file biner IL2CPP hanya berisi sebagian set ekspor API, atau tidak sama sekali. Untuk kasus -kasus ini, IL2CPPInspector akan membangun perancah hanya menggunakan ekspor yang tersedia untuk memastikan bahwa proyek berhasil dikompilasi.

File -file berikut dihasilkan:
appdata -Folder ini berisi deklarasi spesifik biner-agnostik proyek: ilc2pp-types.h :
il2cpp-functions.h :
MethodInfo ** ) il2cpp-types-ptr.h :
Il2CppClass ** ) il2cpp-api-functions.h :
il2cpp-api-functions-ptr.h :
il2cpp_ ) il2cpp-metadata-version.h :
#define untuk versi IL2CPP yang digunakan oleh biner targetFile di atas berisi semua data yang diperlukan untuk analisis dinamis dalam debugger.
Selain itu, file -file berikut dihasilkan untuk injeksi DLL:
framework -Kode boilerplate dan perancah dan perancah biner-agnostik proyek-agnostik:
dllmain.cpp :
init_il2cpp() (lihat di bawah) dan mulai Run() (lihat di bawah) di utas baru helpers.cpp and helpers.h :
helpers.h untuk detailnya. il2cpp-init.cpp , il2cpp-init.h dan il2cpp-appdata.h :
void init_il2cpp() yang menggunakan semua header di atas untuk menghasilkan pointer fungsi yang dapat digunakan dan pointer kelas yang dipetakan ke tempat yang benar pada gambar dalam memori saat runtime pch-il2cpp.cpp dan pch-il2cpp.h :
appdata user -Kode Pengguna Binary-Agnostik Spesifik Proyek yang dapat Anda modifikasi sesuai keinginan:
main.cpp dan main.h :Run() yang menunjukkan titik masuk untuk kode yang disuntikkan khusus Anda. Fungsi dijalankan dalam utas baru dan karenanya tidak memblokir DllMain .Ini adalah satu -satunya folder yang file yang harus Anda edit .
Untuk pengguna Visual Studio, file -file berikut juga dihasilkan:
IL2CppDLL.vcxproj , Il2CppDLL.vcxproj.filters dan Il2CppDLL.sln : main.cpp default termasuk kode yang dikomentari untuk memungkinkan Anda menulis ke log atau membuka konsol baru menggunakan fungsi dari helpers.h . Untuk menentukan target file log dalam kode sumber Anda, gunakan extern const LPCWSTR LOG_FILE = L"my_log_file.txt" .
Kiat: Ketika versi baru dari aplikasi target dirilis, Anda dapat meng-output proyek perancah C ++ di tempat. Folder appdata dan framework akan ditimpa tetapi folder user dan file proyek/solusi tidak akan diubah. Ini membuatnya mudah untuk memperbarui proyek Anda ketika aplikasi target telah diperbarui!
Kompatibilitas: Disarankan untuk menggunakan Visual Studio 2019 (MSVC ++ Build Tools v142 atau lebih baru). Proyek perancah telah diuji dengan Visual Studio 2019 dan Visual Studio 2017 (MSVC ++ Build Tools V141), namun beberapa kode helper dihilangkan saat menggunakan Visual Studio 2017 untuk memungkinkan kompilasi berhasil.
Il2CppDLL.sln ) ke Visual StudioRun() di main.cppAnda memiliki akses ke semua jenis dan metode C#-Equivalent dalam aplikasi, ditambah semua fungsi API IL2CPP yang tersedia. Tidak diperlukan penunjuk fungsi tambahan atau jenis deklarasi.
Contoh (Buat Vector3 dan Catat Koordinatnya ke File):
// in main.cpp
void Run ()
{
// Vector3 example
// (Call an IL2CPP API function)
Vector3__Boxed* myVector3 = (Vector3__Boxed*) il2cpp_object_new ((Il2CppClass*) *Vector3__TypeInfo);
// (Call an instance constructor)
Vector3__ctor (myVector3, 1 . 0f , 2 . 0f , 3 . 0f , NULL );
// (Access an instance field)
il2cppi_log_write ( to_string (myVector3-> fields . y ));
}Tutorial yang lebih rinci dapat ditemukan di sini:
Cara membuat, menggunakan, dan men -debug proyek injeksi IL2CPP DLL
Bekerja dengan kode dalam proyek injeksi IL2CPP DLL
IL2CPPInspector dapat membuat ruang kerja Visual Studio lengkap dengan file solusi (.sln), file (.csproj) file dan struktur folder seperti pohon-seperti perakitan-kelas-kelas. Setiap proyek membuat satu perakitan.
Gunakan sakelar --project untuk menghasilkan ruang kerja solusi.
Agar IL2CPPInspector dapat membuat file .csproj yang berisi referensi Unity Assembly yang benar, Anda harus menyediakan jalur ke editor Unity yang diinstal dan templat proyek atau folder ScriptAssemblies dari proyek Unity yang ada.
Catatan: Pengaturan default akan memilih versi Unity terbaru yang diinstal dan versi terbaru dari templat proyek 3D default, jika telah diinstal di lokasi default.
Lokasi Editor Unity Khas (ditentukan dengan --unity-path ): C: Program Files Unity Hub Editor 20xx.yz
Lokasi Templat Proyek Unity Khas (Ditentukan dengan --unity-assemblies ): C: Program Files Unity Hub Editor 20xx.yz Editor Data Resources Packagemanager ProjectTemplates libcache <name-of-template>
Lokasi Rakitan Skrip Unity Khas dalam proyek yang ada (ditentukan dengan --unity-aseemblies ): x: myproject library scriptAssemblies
Ganti x , y dan z dengan nomor versi persatuan Anda. Ganti <name-of-template> dengan templat yang diinginkan.
CATATAN: Anda dapat menggunakan kartu wildcard asterisk (*) satu kali atau lebih saat menentukan jalur ini. IL2CPPInspector akan memilih folder pencocokan terakhir dalam urutan alfanumerik. Ini berguna jika Anda memiliki beberapa instalasi unity berdampingan dan ingin selalu memilih versi atau templat terbaru.
Jika referensi perakitan tidak diselesaikan dengan benar saat pertama kali Anda memuat solusi, cukup tutup dan buka kembali solusi untuk memaksa mereka untuk diselesaikan.

IL2CPPInspector dapat membuat file JSON yang berisi berbagai metadata tentang aplikasi.
Gunakan sakelar -o untuk menentukan jalur output JSON.
Skema output adalah sebagai berikut:
addressMap (objek)
Peta alamat semua konten terkait IL2CPP dalam biner
methodDefinitions (array) Alamat virtual, simbol biner, tanda tangan fungsi C ++ dan tanda tangan metode .NET dari setiap metode .NET-setara dalam biner
constructedGenericMethods (Array) Alamat virtual, simbol biner, tanda tangan fungsi C ++ dan tanda tangan metode .NET dari setiap metode generik beton yang setara dengan biner dalam biner
customAttributesGenerators (Array) Alamat virtual, nama, dan tanda fungsi C ++ dari setiap fungsi generator atribut khusus dalam biner
methodInvokers (Array) Alamat virtual, nama, dan tanda tangan fungsi C ++ dari setiap metode. Menginvoke fungsi thunk dalam biner
stringLiterals (array) untuk versi persatuan lebih rendah dari 5.3.2: ordinal, nama dan teks dari setiap string literal dalam biner for unity versi 5.3.2 dan lebih baru: alamat virtual, nama dan teks dari setiap string literal dalam biner
typeInfoPointers (Array) Alamat virtual, nama, c ++ nama tipe turunan dan .NET Jenis Nama setara dari setiap penunjuk definisi kelas ( Il2CppClass * ) dalam biner
typeRefPointers (Array) Alamat virtual, nama, dan nama .NET Jenis nama setara dari setiap tipe referensi pointer ( Il2CppType * ) di biner
methodInfoPointers (Array) Alamat virtual, nama, dan tanda tangan metode .NET dari setiap pointer definisi metode runtime ( MethodInfo * ) dalam biner
functionAddresses (array) Alamat virtual dari awal setiap fungsi yang diketahui dalam biner, termasuk semua yang di atas ditambah yang lain yang terdeteksi tetapi tidak termasuk dalam kategori di atas
typeMetadata (array) Alamat virtual, nama dan c ++ jenis nama item metadata kunci dalam biner. Ini termasuk Il2CppCodeRegistration dan Il2CppMetadataRegistration , dan tergantung pada versi biner juga dapat menyertakan pointer untuk setiap Il2CppCodeGenModule
arrayMetadata (Array) Alamat virtual, nama, jenis C ++ Nama dan ukuran array metadata kunci dalam biner
functionMetadata (array) Alamat virtual, nama, dan tanda -tanda fungsi C ++ dari fungsi metadata kunci dalam biner. Bergantung pada bagaimana biner dianalisis oleh IL2CPPInspector, ini mungkin termasuk il2cpp_codegen_register .
apis (Array) Alamat virtual, nama, dan tanda tangan fungsi C ++ dari setiap fungsi API IL2CPP yang diidentifikasi dalam biner
exports (Array) Alamat virtual dan nama setiap ekspor dalam biner
symbols (Array) Alamat virtual, nama dan simbol jenis dari setiap namanya (panjang nama non-nol) dan definisi fungsi alamat non-nol, jenis, nama bidang dan impor (untuk elf) yang didefinisikan dalam biner. Saat ini tidak didukung untuk file PE.
Tiga skrip PowerShell disediakan untuk memungkinkan membangun dan pengujian biner IL2CPP yang mudah:
il2cpp.ps1 adalah pekerja keras utama dan mengkompilasi masing -masing file sumber C# yang ditentukan dalam TestSources (atau semuanya jika tidak ada yang disediakan) sebagai perakitan terpisah, dan mengeluarkannya ke TestAssemblies . Kemudian mengambil setiap perakitan yang ditentukan dalam TestAssemblies dan mengkompilasi masing -masing sebagai proyek IL2CPP terpisah untuk masing -masing arsitektur ini:
Ini ditempatkan ke dalam folder TestBinaries . Kode sumber C ++ untuk setiap bangunan ditempatkan ke folder TestCpp . Itu kemudian panggilan generate-tests.ps1 .
Tentukan daftar file sumber yang dipisahkan koma (tanpa ekstensi .cs ) untuk diproses sebagai argumen pertama (atau -assemblies ).
Anda secara opsional dapat menentukan versi Unity atau Unity Instal Path dengan argumen ke -2 (atau -unityVersion ). Jika tidak ada yang disediakan, versi Unity terpasang terbaru akan digunakan. Anda juga dapat menentukan wildcard, misalnya. 2019* akan menggunakan versi terbaru yang diinstal dari Unity 2019, 2018.3* akan menggunakan versi terbaru dari Unity 2018.3 dll. Gunakan Unity Hub untuk menginstal versi yang diinginkan.
Oleh karena itu dengan satu perintah Anda dapat menghasilkan DLL perakitan, kode sumber C ++ dan biner IL2CPP untuk setiap arsitektur untuk setiap daftar file sumber yang diberikan, satu set output per file sumber, untuk versi Unity yang ditentukan.
generate-tests.ps1 menghasilkan file yang disebut Tests.cs dalam proyek Il2CppTests , berisi satu tes per proyek IL2CPP di TestBinaries . File ini akan disusun oleh proyek Il2CppTests . Anda kemudian dapat melihat satu tes per proyek IL2CPP di Explorer Tes Visual Studio.
Tes yang dihasilkan secara otomatis menghasilkan file header C#, JSON dan C dalam folder Binary IL2CPP Test di TestBinaries (masing-masing nama file diawali dengan test ) dan membandingkannya (whitespace-sensitive) dengan file nama proyek yang sesuai di TestExpectedResults . Dengan cara ini, Anda dapat memeriksa file dengan struktur yang diketahui bahwa analisis dilakukan dengan benar, atau melangkah melalui analisis biner spesifik di debugger tanpa harus mengubah argumen baris perintah proyek.
update-expected-results.ps1 Menyalin semua hasil tes output dari TestBinaries ke TestExpectedResults , oleh karena itu memperbarui file yang akan digunakan untuk memverifikasi hasil tes yang benar.
Contoh Penggunaan:
./il2cpp.ps1
Membangun Setiap File Sumber C# ìnto a .net Assembly Dll, folder sumber C ++ dan satu biner IL2CPP per arsitektur yang didukung
./il2cpp.ps1 MyFirstTest
Membangun MyFirstTest.cs ke MyFirstTest.dll , membuat folder sumber C ++ bernama MyFirstTest dan biner IL2CPP untuk setiap arsitektur yang didukung
./il2cpp.ps1 MyFirstTest,MySecondTest 2019.3.1f1
Membangun MyFirstTest.cs dan MySecondTest.cs ke dalam DLL perakitan individu, folder sumber C ++ dan binari IL2CPP, menggunakan Unity 2019.3.1f1
./il2cpp.ps1 MyFirstTest,MySecondTest F:UnityHubEditor2019.3.1f1
Seperti di atas tetapi menentukan jalur khusus untuk instalasi persatuan Anda.
Versi Unity yang didukung minimum adalah 2017.1.0f3.
Untuk mempelajari lebih lanjut tentang fitur -fitur ini, lihat bagian yang berjudul Menggunakan IL2CPPInspector untuk menghasilkan kode IL2CPP di IL2CPP Reverse Engineering Bagian 1.
Catatan: API IL2CPPInspector juga tersedia sebagai paket Nuget! (Cari: noisycowstudios.il2cppinspector)
IL2CPPInspector menawarkan API perpustakaan kelas yang dapat digunakan kembali berikut ini:
Gunakan API ini untuk dengan mudah meminta tipe IL2CPP, membuat modul output baru dan mengintegrasikan IL2CPPInspector dengan aplikasi analisis statis Anda sendiri.
Untuk memanfaatkan IL2CPPInspector dalam proyek Anda sendiri, tambahkan referensi ke Il2CppInspector.Common.dll .
Include the following using directives:
using Il2CppInspector to use Il2CppInspector .using Il2CppInspector.Reflection to use TypeModel .using Il2CppInspector.Model to use AppModel .See the source code for further details or the tutorials above.
Plugins should be placed in the plugins folder in the same folder as Il2CppInspector.exe . Each plugin should be placed into its own sub-folder with any dependencies or configuration files needed.
From the GUI you can enable and disable plugins, change the execution order and configure individual plugin settings via the Manage plugins... button.
From the CLI you can specify which plugins and settings to use as follows.
For one plugin:
Il2CppInspector.exe --plugins "myplugin --firstOption value1 --secondOption value2"
For multiple plugins:
Il2CppInspector.exe --plugins "plugin1 --option1 ..." "plugin2 --option2 ..." ...
Plugins will be executed in the order specified.
Core plugins (those that are part of Il2CppInspector's base functionality) are always enabled when using the CLI, but can be disabled in the GUI.
When using the CLI, core plugins always execute first by default. You can force the core plugins to execute in a different order by specifying their names in the desired execution order. Misalnya:
Il2CppInspector.exe --plugins "analytics --output foo.csv"
will run the core plugins first then the analytics example plugin, but:
Il2CppInspector.exe --plugins "analytics --output foo.csv" "xor"
will cause the xor core plugin to run after analytics .
For help on a specific plugin, specify the plugin name with no arguments:
Il2CppInspector.exe --plugins myplugin
To get more plugins, click Get Plugins in the Manage Plugins window in the GUI, visit the Il2CppInspectorPlugins repository or use the get-plugins.ps1 or get-plugins.sh scripts to update to the latest plugin releases.

Plugins let you extend the functionality of Il2CppInspector. For example you can pre and post-process metadata and binaries to enable inspection of IL2CPP applications that Il2CppInspector cannot handle automatically.
Plugin support is currently experimental and has limited functionality.
Details on how to create your own plugins can be found in the Il2CppInspector Plugin Development Wiki.
You can find out more about plugins, and browse the source code of current plugins and examples in the Il2CppInspectorPlugins repository.
The current version of Il2CppInspector can output Python scripts targeting the IDA and Ghidra disassemblers.
When Il2CppInspector generates such a script, it generates a concatenation of a shared block of code ( Outputs/ScriptResources/shared-main.py ) which parses the JSON metadata and dispatches it to a set of implementation-specific functions to be processed, and a block of code specific to the target application which implements these functions (a file from Outputs/ScriptResources/Targets ).
If you would like to add support for a new target application, create a new Python script in Outputs/ScriptResources/Targets with the nane <target-name-without-whitespace>.py and implement the following functions:
CustomInitializer() - perform any custom initialization required for the target before applying the metadataDefineCode(code) - parse and apply the specified C++ declaration text (this is not required for Unity 5.3.2 and later; if you don't need to support earlier versions, just specify pass as the implementation)GetScriptDirectory() - retrieve the directory that the Python script is running in. This will normally be os.path.dirname(os.path.realpath(__file__))MakeFunction(start, name=None) - define address start as the start of a function, optionally with name nameSetComment(addr, text) - place the comment text at address addrSetFunctionType(addr, sig) - parse the C++ function signature in sig and apply it to the function at address addrSetHeaderComment(addr, text) - place the header/plate/pre-item comment text at address addrSetName(addr, name) - set the symbol (or label or name) of address addr to nameSetType(addr, type) - define address addr to be an item of the C++ type type Refer to the source code of IDA.py and Ghidra.py for examples.
When you add a new target and re-compile Il2CppInspector:
-t ( --script-target ) switch via the CLIIf you develop an API for a target that you think might be useful to others, please feel free to submit a PR with the code!
| Unity version | IL2CPP version | Mendukung |
|---|---|---|
| 4.6.1+ | First release | Unsupported |
| 5.2.x | 15 | Unsupported |
| 5.3.0-5.3.1 | 16 | Bekerja |
| 5.3.2 | 19 | Bekerja |
| 5.3.3-5.3.4 | 20 | Bekerja |
| 5.3.5-5.4.6 | 21 | Bekerja |
| 5.5.0-5.5.6 | 22 | Bekerja |
| 5.6.0-5.6.7 | 23 | Bekerja |
| 2017.1.0-2018.2.21 | 24 | Bekerja |
| 2018.3.0-2018.4.x | 24.1 | Bekerja |
| 2019.1.0-2019.3.6 | 24.2 | Bekerja |
| 2019.3.7-2019.4.14 | 24.3 | Bekerja |
| 2019.4.15-2019.4.20 | 24.4 | Bekerja |
| 2019.4.21-2019.4.x | 24.5 | Bekerja |
| 2020.1.0-2020.1.10 | 24.3 | Bekerja |
| 2020.1.11-2020.1.17 | 24.4 | Bekerja |
| 2020.2.0-2020.2.3 | 27 | Bekerja |
| 2020.2.4-2020.3.x | 27.1 | Bekerja |
| 2021.1.0-2021.1.x | 27.2 | Sebagian |
Please refer to the companion repository https://github.com/nneonneo/Il2CppVersions if you would like to track the changes between each IL2CPP release version.
If you have files that don't work or are in an unsupported format, please open a new issue on GitHub and attach a sample with details on the file format, and I'll try to add support. Include both the IL2CPP binary and global-metadata.dat in your submission.
Please check the binary file in a disassembler to ensure that it is a plain IL2CPP binary before filing an issue. Il2CppInspector is not intended to handle packed, encrypted or obfuscated IL2CPP files.
If you found Il2CppInspector useful, you can really help support the project by making a small donation at http://paypal.me/djkaty!
You can also donate with bitcoin: 3FoRUqUXgYj8NY8sMQfhX6vv9LqR3e2kzz
Much love! - Katy
Thanks to the following major contributors!
This project uses:
Thanks to the following individuals whose code and research helped me develop this tool:
The following books and documents were also very helpful:
Pizza spinner animation in the GUI made by Chris Gannon - https://gannon.tv/
This software is licensed under AGPLv3.