
Dynamic Indirect Syscalls を使用して実装された Reflective x64 PE/DLL Loader
Atlasは、以下の機能を備えたリフレクティブx64ローダーです:
Atlasが正しく動作するには、以下のパラメータが必要です:
Usage: atlas_x64.exe [Process name / PID] [Cleanup] [Server] [Port] [AtlasPatcher DLL] [DLL/PE to inject] <Entrypoint>
| パラメータ | 説明 |
|---|---|
| 名前 / PID | ターゲットプロセスの名前またはPID |
| クリーンアップ | 完了時にターゲットプロセスから注入されたDLLを削除するかどうかを指定します(クリーンアップは値として1または0をサポートします) |
| サーバー | DLLを配置したリモートサーバーのIPアドレス |
| ポート | サーバーが使用するポート |
| AtlasPatcher DLL | サーバー上でホストされているAtlasPatcher DLLの名前(デフォルトはatlas_patcher.dll)(コンパイル後、DLLは/AtlasLdr/binの下にあります) |
| 注入するDLL/PE | サーバー上でホストされている、注入したいDLLまたはPEの名前 |
| エントリポイント | 任意の引数。DLLが注入されたときにエントリポイントとして使用するエクスポート関数の名前 |

ローダーの従来のアプローチでは、通常、ターゲットとするリモートプロセスにローダーを含むDLLを注入するインジェクターを用意し、注入後、実行がローダーに渡され、ローダーが悪意のあるDLLのマッピングを担当します。対照的に、Atlasは少し異なるアプローチを取り、Import Address Table(IAT)パッチ適用(後回しにされます)を除いて、マッピングプロセス全体を自身のコンテキスト内で実行します。
悪意のあるDLLがAtlasコンテキストにマッピングされると、リモートプロセス内で事前に確保されたメモリにコピーされます。この時点で、悪意のあるDLLはリモートプロセスにマッピングされていますが、IATはまだパッチ適用されていません。これを修正するため、AtlasLdrは依存関係が最小のDLL(atlas_patcher.dll)を悪意のあるプロセスに注入し、悪意のあるDLLのIATのパッチ適用を処理してから、実行コンテキストをそれに移します。
このアプローチにより、リモートプロセスに注入するローダーDLLのサイズと複雑さを軽減でき、ローダー自体でDLLを読み込めるため、インジェクターが検出される可能性も最小限に抑えられます。
Atlasは x86_64-w64-mingw32-g++ を使用してコンパイルする必要があります。システムにインストールしたら、プロジェクトフォルダーでmake(またはmingw32-make.exe)を実行するだけです。
