このプロジェクトについて

dearxanは、Arxan(現在はGuardIT)がバイナリに挿入するチェックを静的および実行時に解析・パッチするためのライブラリです。READMEによると、Arxanを使用するFromSoftwareゲームでArxanを完全に無力化できます。パッチ適用後は、Arxanコード(アンチデバッグや整合性チェックなど)は実行されず、暗号化された関数は復号されたままになります。 READMEには1つの注意点が記載されています。Arxanのエントリポイントスタブは依然として実行する必要があります。これらのスタブはアンチデバッグチェックを実行しませんが、一部のゲーム(例:Dark Souls Remastered)では整合性チェックを実行し、変更が検出されるとゲームがクラッシュする可能性があります。これは、neuter_arxanに渡すコールバックにフックを配置することで軽減できます。著者は、エントリポイントスタブが完全にリバースエンジニアリングされれば、これは不要になると述べています。 READMEに記載されているテスト済みゲーム: - Dark Souls Remastered - Dark Souls II SOTFS - Dark Souls III - Elden Ring - Armored Core VI - Elden Ring: Nightreign このクレートは、これらのFromSoftwareゲームの最新バージョンにおけるArxanの亜種に対してのみテストされており、他の開発者が使用するArxan構成では動作しない可能性があります。貢献は歓迎されます。 記載されている使用オプション: - Rustから(disabler機能を使用):Cargo.tomlにdearxanを追加し、理想的にはゲームのエントリポイントが実行される前に、dearxan::disabler::neuter_arxanを1回呼び出します。コールバックが結果を受け取り、フックをインストールする推奨場所です。 - C++から:Releasesから静的ライブラリをダウンロードし、同梱のWindowsインポートライブラリとリンクし、include/dearxan.hをインクルードしてdearxan::neuter_arxanを呼び出します。最小サポート標準はC++14で、C++17以上が推奨されます。 - Cから:同じライブラリとヘッダーを使用し、コールバック付きでdearxan_neuter_arxanを呼び出します。 - 他の言語から:include/dearxan.hからCバインディングを生成し、dearxan_neuter_arxanを呼び出します。 READMEは、多くのDLLインジェクターやMODランチャーがプロセスを生成時に一時停止しない、またはゲームのエントリポイントの前にコードを実行させないことを警告しています。クレートはそのようなローダーをベストエフォートでサポートしますが、エントリポイントの前にMODをロードするものを使用することを強く推奨します。me3と互換性のあるSoulsゲームの場合、クレートはdisable_arxanプロファイルオプションを通じてそのMODローダーにすでに統合されており、MODがすでにme3に依存している場合はそれを使用することを推奨します。 カスタムパッチャー(例:ディスク上の実行可能ファイルをパッチするため)を作成する場合、READMEはdearxan::analysis::analyze_all_stubsまたは同等のAPIでArxanスタブを分析し、結果のStubInfo値をdearxan::patch::ArxanPatch::build_from_stubsに渡し、パッチを手動で適用する必要があると述べています。一部のゲームには最初の分析パスで発見されない暗号化されたスタブがあるため、新しいスタブが見つからなくなるまでこれを繰り返す必要があります。ライブ実行可能イメージの場合、Arxanエントリポイントスタブが呼び出されていることが重要です。FromSoftwareバイナリはSteamStubでラップされている場合もあります。 READMEは、命令変異や制御フロー難読化、実行時に復号される機密関数の暗号化、アンチデバッグチェック、バッファにフラグを書き込んだり、スタックや制御フローの破壊でゲームをクラッシュさせたり、関数コードを修復したりできる整合性チェックなど、Arxanの機能を説明しています。Arxanロジックは、任意のゲーム関数に挿入されたスタブに含まれています。これらはコンテキストを保存し、Arxanロジックを実行し、コンテキストを復元してジャンプバックします。 クレートは、これらのスタブを見つけてその制御フローグラフを訪問することでArxanを無効化します。部分的な命令エミュレーションを使用し、分岐でプログラム状態をフォークして制御フロー難読化を処理し、スタブ構造を分析してパッチを抽出します。これらは通常、スタブのスタックを修正するトランポリンへのジャンプフックであり、復号されたコード領域を抽出してその内容を直接書き込むこともあります。 機能フラグ: - disabler(デフォルト):neuter_arxanを介してArxanを完全に無効化するパッチャーを提供します。 - rayon(デフォルト):rayonを使用してスタブ分析を並列化します。 - ffi:C関数dearxan_neuter_arxanをエクスポートします。 - instrument_stubs:disablerに基づき、各スタブが最初に呼び出されたときにメッセージをログに記録するように計測します。READMEは、レジスタの破壊により、現在これはDark Souls Remastered以外のゲームではクラッシュすることを警告しています。 - internal_api:dearxan::analysis::internalを通じてほとんどの内部バイナリ分析APIを公開します。これらは安定化されておらず、マイナーバージョン間で変更される可能性があります。 クレジットには、neuter_arxanのグローバル同期、Arxanが復号するメモリ領域の保存方法のリバースエンジニアリング支援、および暗号化アルゴリズム(32ラウンドTEA)の発見に対するdasaavへの謝辞が含まれています。