WIP工具將Unity的IL2CPP構建過程逆轉到原始的託管DLL。
下面的信息幾乎完全適用於GitHub版本上可用的CLI應用程序。有關使用“核心”模塊的文檔 - CLI只是包裝器 - 在您自己的項目中,請參見readme_core.md
使用libcpp2il進行元數據結構的初始解析和加載。如果您想用IL2CPP元數據自己做某事,並且根據MIT許可發布,則可以從構建工件中獲得libcpp2il。上面的鏈接將帶您到libcpp2il的文檔。
CPP2IL目前正在進行重大重寫。該分支代表正在進行的工作,並且可能會發生變化。
可以從我的Nuget Feed獲得開發人員的CI構建。
命令行接口已簡化,從許多命令行選項到輸出格式和處理層的概念。但是,許多此類格式和層尚未實現,因此與先前發布的版本相比,功能受到限制。
已刪除了許多選擇,例如--analysis-level , --skip-analysis等。忽略了尚未實施分析的事實,這些選項將不會回來。默認情況下,分析將停止,並將通過處理層的使用來啟用。
同樣,以前抑制CPP2ILINDED屬性的選項已被過程層替換為--supress-attributes ,它實際上已實現,稱為attributeinjector 。您可以使用--use-processor選項啟用此層,並且可以使用--list-processors列出其他選項。
元數據轉儲和方法轉儲也將是其自己的輸出格式,而不是默認為單位,並通過專用選項進行控制。當前,這意味著如果您需要兩個轉儲,則需要多次運行CPP2IL,儘管如果我們同時增加對多種格式的支持,將來可能會發生變化。與處理層一樣,可以通過--list-output-formats選項列出輸出格式,並可以通過--output-as選項選擇。
在引擎蓋下,該應用程序幾乎已經完全重寫。首先,由於CPP2IL學位取決於單聲道庫,這是必要的,這有一些局限性。當我們研究切換時,我們意識到自己在圖書館的依賴程度。不再是這樣 - 該應用程序是圍繞libCPP2IL類型和新的分析上下文對象編寫的,並且不再使用Mono.Cecil庫,已被Asmresolver.dotnet替換。
最重要的是,我們目前正在基於稱為ISIL的中間表示(指令集獨立的語言)進行重新進化分析,這將使對新指令集的支持更加容易。然後將伊黎伊斯蘭國轉換為控制流程圖,與原始拆卸相比,它可以更智能地分析。
我們還在插件系統上工作,該系統將允許第三方開發人員編寫插件,以增加對自定義指令集,二進制格式的支持,並最終加載混淆或加密的元數據或二進製文件。
此應用程序的最簡單用法是Windows X86或X64 Unity遊戲。在這種情況下,您只需運行Cpp2IL-Win.exe --game-path=C:PathToYourGame ,而cpp2il將檢測您的統一版本,找到所需的文件,然後將輸出轉儲到CPP2IL_OUT文件夾中,無論您從任何地方傳遞命令。
假設您有一個APK文件(不是APKM或XAPK),並且至少運行CPP2IL 2021.4.0,則可以使用與上述相同的參數,但可以傳遞到APK的路徑,並且CPP2IL將從APK中提取所需的文件。
| 選項 | 參數示例 | 描述 |
|---|---|---|
| - 遊戲路徑 | c: path to game | 指定遊戲文件夾的路徑。必需的。 |
| - exe-name | 測試遊戲 | 如果自動檢測失敗,則指定遊戲的EXE文件的名稱(因為遊戲目錄中還有其他EXE文件) |
| - verbose | <none> | 記錄有關我們正在做什麼的更多信息 |
| - 列表處理器 | <none> | 列出可用的處理層,然後退出。 |
| - 使用處理器 | attributeInjector | 選擇要使用的處理層,該處理層可以在輸出之前更改原始數據。此選項可以多次出現。 |
| - 處理器 - 企業 | 鍵=值 | 為所選的處理層提供配置選項。這些將由添加處理層的插件記錄。 |
| - 列表輸出格式 | <none> | 列出可用的輸出格式,然後退出。 |
| - 輸出 - 是 | Dummydll | 指定要使用的輸出格式。 |
| - 輸出 | cpp2il_out | 根目錄到輸出。此路徑將傳遞到所選的輸出格式,然後可以在此位置內創建子目錄等。 |
| - - 弗拉姆工廠 | c: path to webgl.framework.js | 僅與WASM二進制組合使用。其中一些已經混淆了導出,但可以通過框架文件恢復,您可以提供使用此參數的路徑。 |
每個提交都使用github操作構建在CI構建中 - 如果您想自己複製構建,則可以在.github文件夾中找到該操作文件。請注意,這些可能不是最穩定的 - 儘管有測試可以確保與一系列遊戲的兼容性,但有時事情會破裂!這些是由它們建立的提交版本的版本。
如果您登錄到GitHub,則可以從“操作”選項卡下載發行文件,也可以使用以下鏈接,該鏈接始終指向最新的成功CI構建。請注意,為.NET框架構建提供了與葡萄酒/質子的兼容性。
最重要的是,每當我認為已經進行了重大改進時,我都會手動發布“ Milestone”發行版。這些不被標記為GitHub上的預釋放,並且(至少在理論上)應該穩定且適合在一系列遊戲中使用。
從第一個里程碑構建2021.0及以後,CPP2IL現在將更僵化的數據輸出到控制台。這包括日誌級別(動詞,信息,警告,失敗)和相關的顏色(灰色的動詞,藍色,info for Info,warn for Warn,Red for Fail)。
從Milestone 2021.1開始,如果CPP2IL能夠檢測到您正在葡萄酒/質子中運行,則這些ANSI顏色代碼將被禁用,因為它們不受葡萄酒的支持並看起來很糟糕。
只有在使用--verbose選項啟動CPP2IL時,動詞消息才會記錄下來,如果您可以報告啟用此標誌的問題,這將很有幫助。對於正常操作,除非您很好奇,否則不需要它們。
如果您不希望彩色輸出,請設置環境變量NO_COLOR=true 。
該應用程序主要是使用.NET 9.0構建的,但是也出於遺產目的發布了.NET Framework 4.7.2構建。
它使用以下庫,我非常感謝:
(除了Xunit(Apache 2.0+MIT)之外,全部均獲得MIT許可)
WasmDisassembler子目錄中找到。Net472構建使用以下其他庫:
一些插件還使用其他庫:
CPP2IL(在這一點上非常寬鬆)基於IL2CppDumper,我在2018年分配了它,並刪除了大量代碼,重寫了很多,並添加了更多。但是從本質上講,它仍然剩下一些笨蛋,主要是在libcpp2il中。
它包含來自djkaty許可的IL2Cppinspector的碎片和碎片,我想在這裡向她表示感謝,以尋求她的寶貴幫助。
我要感謝Audica Modding社區和Discord為該項目提供的最初靈感,在早期的大量支持以及這些天的功能請求。
最後,查看其他一些很酷的項目,這些項目與此相關。當然,我進一步提到了IL2Cppintop,但也請查看使用CPP2IL進行虛擬DLL生成的Melonloader。