UnityのIL2CPPビルドプロセスを元の管理DLLに戻すWIPツール。
以下の情報は、GitHubリリースで利用可能なCLIアプリケーションにほぼ完全に適用されます。 CLIが単なるラッパーである「コア」モジュールの使用に関するドキュメントについては、独自のプロジェクトでは、readme_core.mdを参照してください。
メタデータ構造の最初の解析と負荷にlibcpp2ilを使用します。 libcpp2ilは、IL2CPPメタデータで自分で何かをしたい場合は、ビルドアーティファクトから取得でき、MITライセンスの下でリリースされます。上記のリンクは、libcpp2ilのドキュメントに移動します。
CPP2ILは現在、主要な書き直しを受けています。このブランチは、進行中の作業を表しており、変更される可能性があります。
開発者向けのCIビルドは、Nugetフィードから取得できます。
コマンドラインインターフェイスは簡素化されており、多くのコマンドラインオプションから出力形式と処理層の概念に移行しています。ただし、これらの形式とレイヤーの多くはまだ実装されていないため、以前にリリースされたバージョンと比較して機能が制限されています。
--analysis-level 、 --skip-analysisなどの多くのオプションが削除されています。分析がまだ実装されていないという事実を無視すると、これらのオプションは戻ってきません。分析はデフォルトでオフになり、処理層の使用によって有効になります。
同様に、以前にCPP2ilinject属性を抑制した--supress-attributesなどのオプションはプロセスレイヤーに置き換えられました - これは実際に実装されており、 attributeinjectorと呼ばれます。 --use-processorオプションを使用してこのレイヤーを有効にすることができ、 --list-processorsを使用して他のオプションをリストできます。
メタデータのダンプとメソッドダンプは、デフォルトオンではなく、独自の出力形式でもあり、専用オプションを介して制御されます。現在、これは、両方のダンプが必要な場合はCPP2ILを複数回実行する必要があることを意味しますが、複数の形式への出力のサポートを同時に追加すると、これは将来変更される可能性があります。処理レイヤーと同様に、出力形式は、 --list-output-formatsオプションを介してリストすることができ、 --output-asオプションで選択されます。
ボンネットの下で、アプリケーションはほぼ完全に書き直されています。主に、これはCPP2ILがいくつかの制限があるMono.Cecilライブラリに依存していたため、必要でした。切り替えを検討したとき、私たちは図書館にどれほど依存しているかに気付きました。これはもはやそうではありません - アプリケーションはlibcpp2ilタイプと新しい分析コンテキストオブジェクトを中心に記述され、mono.cecilライブラリはもはや使用されず、asmresolver.dotnetに置き換えられました。
それに加えて、私たちは現在、ISIL(命令セット非依存言語)と呼ばれる中間表現に基づいて分析を再実装する過程にあります。これにより、新しい命令セットをはるかに容易にサポートできます。次に、ISILはコントロールフローグラフに変換され、これは生の分解よりもインテリジェントに分析できます。
また、サードパーティの開発者がプラグインを作成してカスタム命令セット、バイナリ形式のサポートを追加し、最終的には難読化または暗号化されたメタデータまたはバイナリファイルをロードできるプラグインシステムにも取り組んでいます。
このアプリケーションの最も単純な使用法は、Windows X86またはX64 Unityゲーム用です。その場合Cpp2IL-Win.exe --game-path=C:PathToYourGameとcpp2ilを実行するだけで、Unityバージョンが検出され、必要なファイルが見つかり、コマンドを実行した場合はcpp2il_outフォルダーに出力をダンプできます。
単一のAPKファイル(APKMまたはXAPKではなく)があり、少なくともCPP2IL 2021.4.0を実行していると仮定すると、上記と同じ引数を使用できますが、APKへのパスで渡すことができ、CPP2ILはAPKから必要なファイルを抽出します。
| オプション | 引数の例 | 説明 |
|---|---|---|
| - ゲームパス | c: path to ゲーム | ゲームフォルダーへのパスを指定します。必須。 |
| -exe-name | testgame | 自動検出が失敗した場合にゲームのEXEファイルの名前を指定します(ゲームディレクトリに他のEXEファイルがあるため) |
| --verbose | <なし> | 私たちがしていることの詳細情報を記録します |
| - リストプロセッサ | <なし> | 利用可能な処理レイヤーをリストしてから終了します。 |
| - 使用プロセッサ | AttributeInjector | 使用する処理層を選択します。これにより、出力前に生データを変更できます。このオプションは複数回表示できます。 |
| --Processor-config | key = value | 選択した処理層に構成オプションを提供します。これらは、処理層を追加するプラグインによって文書化されます。 |
| - リスト出力フォーマット | <なし> | 利用可能な出力形式をリストしてから終了します。 |
| -output-as | dummydll | 使用する出力形式を指定します。 |
| -Output-to | cpp2il_out | 出力へのルートディレクトリ。このパスは、選択した出力形式に渡され、この場所内にサブディレクトリなどが作成される場合があります。 |
| -wasm-framework-file | c: path to webgl.framework.js | WASMバイナリと組み合わせてのみ使用されます。これらのいくつかは難読化されたエクスポートを持っていますが、framework.jsファイルを介して回復することができます。これは、この引数を使用するためのパスを提供できます。 |
すべてのコミットは、GitHubアクションを使用してCIビルドに構築されます。アクションファイルは、ビルドを自分で再現したい場合は、.githubフォルダーにあります。これらが最も安定していないかもしれないことに注意してください - さまざまなゲームとの互換性を確保するためのテストがありますが、時には物事が壊れることがあります!これらは、彼らが構築されたコミットによってバージョンされています。
GitHubに署名されている場合、[アクション]タブからリリースファイルをダウンロードすることも、最新のCIビルドを常に指し示す次のリンクを使用できます。 .NETフレームワークビルドは、ワイン/プロトンとの互換性のために提供されていることに注意してください。
これに加えて、私は手動で「Milestone」リリースをリリースします。これらはGitHubでのプレレアスとしてマークされておらず、(少なくとも理論的には)安定していて、さまざまなゲームでの使用に適している必要があります。
最初のMilestone Build 2021.0から、以降、CPP2ILはコンソールにより厳格に構築されたデータを出力します。これには、ログレベル(動詞、情報、警告、失敗)と関連する色(動詞の場合は灰色、情報のための青、警告用の黄色、失敗のための赤)が含まれます。
マイルストーン2021.1の時点で、CPP2ILがワイン/プロトンで走っていることを検出できる場合、これらのANSIカラーコードはワインでサポートされておらず、ひどく見えるため、無効になります。
動詞メッセージは、CPP2ILが--verboseオプションで起動された場合にのみログに記録され、このフラグが有効になっている問題を報告できれば役立ちます。通常の操作のためには、あなたが興味を持っていない限り、それらは必要ではありません。
出力を色付けしたくない場合は、環境変数NO_COLOR=trueを設定します。
このアプリケーションは主に.NET 9.0を使用して構築されていますが、.NETフレームワーク4.7.2ビルドもレガシー目的で公開されています。
次のライブラリを使用しています。
(すべてがapache 2.0+mitであるxunit以外にライセンスされています)
WasmDisassemblerサブディレクトリにあります。Net472ビルドは、次の追加ライブラリを使用します。
一部のプラグインは追加のライブラリも使用します。
CPP2ILは(この時点で非常にゆるく)IL2CPPDUMPERに基づいています。これは2018年にフォークし、多くのコードを削除し、多くの書き換えを行い、さらに多くを追加しました。しかし、その核心には、主にlibcpp2ilで、まだいくつかのダンパーが残っています。
それは、Djkatyの許可を得て撮影されたIL2CPPINSPECTORのビットとピースを含んでおり、私は彼女の貴重な助けに彼女に感謝を表明したいと思います。
このプロジェクトの最初のインスピレーション、初期の多くのサポート、そして最近の機能のリクエストについて、Audica Modding CommunityとDiscordに感謝したいと思います。
そして最後に、これとリンクする他のクールなプロジェクトをチェックしてください。もちろん、IL2CPPINTEROPについてさらに述べましたが、ダミーDLL生成にCPP2ILを使用するMelonloaderもチェックしています。