
ROPとハードウェアブレークポイントを使用してメモリアーティファクトを隠蔽します。
このツールは、ROPチェーンとハードウェアブレークポイントを組み合わせてメモリアーティファクトを隠す方法のシンプルなPoCです。ROPチェーンは、スリープ中(つまりSleep関数が呼び出されたとき)にメインモジュールのメモリページの保護をN/Aに変更します。このメモリスキャン回避技術の詳細については、元のプロジェクトGargoyleを参照してください。x64のみ。
アイデアは、kernel32!Sleepにハードウェアブレークポイントを設定し、例外を処理する新しいトップレベルフィルタを設定することです。Sleepが呼び出されると、事前に設定された例外フィルタ関数がトリガーされ、従来の関数フックを使用せずにROPチェーンを呼び出すことができます。これにより、既知のDLLに関連する奇妙で異常なプライベートメモリ領域をプロセス内に残すことを回避できます。
ROPチェーンは単純にVirtualProtect()を呼び出して現在のメモリページをN/Aに設定し、次にSleepExを呼び出し、最後にRXメモリ保護を復元します。
プロセスの概要は次のとおりです。
このプロセスは無期限に繰り返されます。
画像に示されているように、メインモジュールのメモリ保護はスリープ中にN/Aに変更され、実行権限のあるページを探すメモリスキャンを回避します。

文字列リテラルを難読化するためにLITCRYPTプラグインを使用しているため、コードをコンパイルする前に環境変数LITCRYPT_ENCRYPT_KEYを設定する必要があります。
C:\Users\User\Desktop\RustChain> set LITCRYPT_ENCRYPT_KEY="yoursupersecretkey"
その後、コードをコンパイルしてツールを実行するだけです。
C:\Users\User\Desktop\RustChain> cargo build
C:\Users\User\Desktop\RustChain\target\debug> rustchain.exe
このツールは単なるPoCであり、完全に機能するにはいくつかの追加機能を実装する必要があります。プロジェクトの主な目的は、ROPチェーンの実装方法を学び、それをRustに統合することでした。そのため、このツールは現状のまま使用した場合のみ動作し、他の方法(例えば、DLLにコンパイルしてリフレクティブロードして実行しようとするなど)で使用しようとすると失敗が予想されます。