
x64dbg を使用した Amadey Loader のリバースエンジニアリング: 動的 API 解決、トークン特権昇格、キーロガーフック、クリップボードキャプチャ、および窃取ツールのステージングのためのコマンドライン悪用。
Amadey Loaderのサンプルをx64dbgにロードした。エントリポイントで、ローダーはGetProcAddressForCallerとVirtualAllocを指すjmpサンクを介して動的API解決を実行する。以下のダンプビューは、ローダーのキーロガーおよび永続化ルーチンで使用される復号済み文字列とAPI名を明らかにしている。
jmp qword ptr ds:[] – 動的APIルックアップ、静的インポートを回避。 jmp qword ptr ds:[] – アンパックされたペイロード/シェルコード用にRWXメモリを割り当てる。 SetWindowsHookExW / CallNextHookEx / UnhookWindowsHookEx – キーロガーフックチェーン (WH_KEYBOARD_LL) GetForegroundWindow / GetWindowTextW / GetWindowThreadProcessId – 各キーストロークとともにアクティブウィンドウのタイトルを取得する。 GetKeyState / GetAsyncKeyState – 生のキー状態をポーリングする。 GetUserObjectInformationW / wndProc /UnregisterClassW – 隠しキーロガーウィンドウのウィンドウクラス処理。 GetTickCount / timeGetTime / GetSystemTimeAsFileTime – ビーコン間隔とキーストロークバッファリングに使用されるタイミングルーチン。
動的API解決: GetProcAddressForCallerは静的インポート分析を回避し、シグネチャベースの検出を無効化する。 キーロガーの確認: SetWindowsHookExW + CallNextHookExチェーンは、システム全体のすべてのキーストロークを傍受するために使用される古典的な低レベルキーボードフックである。 コンテキスト認識ログ記録: GetForegroundWindow + GetWindowTextWはアクティブウィンドウのタイトルを取得し、各キーストロークにコンテキスト (ユーザー名、パスワード、チャット) を与える。 RWX割り当て: VirtualAllocは次段階のペイロードをメモリ内でアンパックして実行するために使用され、ディスク上に痕跡を残さない。 Amadeyの挙動との一致: このAPIセットは、Amadeyの既知の認証情報窃取およびキーロギングの挙動と一致している。

同じx64dbgセッションを詳しく見ると、Amadey Loaderが特権昇格、トークン操作、およびプロセス列挙に焦点を当てた2番目のWindows API群を解決していることがわかる。逆アセンブリの先頭にあるVirtualAllocサンクは、解決されたAPIテーブル用のメモリを割り当てるために使用され、以下のダンプビューは、ペイロードを実行する前にSYSTEMレベルのアクセスへ昇格しようとするローダーの意図を明らかにしている。
OpenProcessToken / DuplicateTokenEx / ImpersonateLoggedOnUser – 特権昇格のためのトークン複製と偽装。 LookupPrivilegeValueW / AdjustTokenPrivileges – SeDebugPrivilegeおよびその他の機密特権を有効化する。 GetTokenInformation / SetTokenInformation – 現在のプロセストークンを読み取りおよび変更する。 OpenProcess / Process32FirstW / Process32NextW – 高価値ターゲット (例: lsass.exe、AVプロセス) を特定するためのプロセス列挙。 CreateFileW / CreateToolhelp32Snapshot / Module32FirstW – ファイル操作およびモジュール列挙に使用される。 RegCreateKeyExW / RegSetValueExW / 永続化: Runキー配下のRegCreateKeyExW + RegSetValueExWにより、Amadeyは再起動後に自動起動できる。 GetProcAddress / LoadLibraryW / GetModuleHandleW – 動的API解決。 CreateProcessW / ShellExecuteExW / WinExec – 次段階のペイロードを起動する。 IsDebuggerPresent / CheckRemoteDebuggerPresent – アンチデバッグチェック。
トークン偽装: DuplicateTokenEx + ImpersonateLoggedOnUser により、Amadey はより高い権限(多くの場合 SYSTEM)で実行でき、システムを完全に制御できます。 SeDebugPrivilege の悪用: LookupPrivilegeValueW + AdjustTokenPrivileges により SeDebugPrivilege が有効化され、lsass.exe のような保護されたプロセスへのインジェクションに必要となります。 プロセスの標的化: Process32FirstW / Process32NextW は、価値の高い標的(AV、ブラウザ、資格情報ストア)を列挙して選択するために使用されます。 アンチデバッグ: IsDebuggerPresent + CheckRemoteDebuggerPresent は解析環境を能動的に検出し、終了または動作を変更します。 連鎖実行: CreateProcessW / ShellExecuteExW は、Amadey がローダーとしての役割を果たすことを裏付けます — 次段階のペイロード(例: Lumma Stealer、Vidar、ランサムウェア)をドロップして実行します。

同じ x64dbg セッションの3番目のビューは、Amadey Loader がファイル I/O、タイマー管理、入力/キーボード処理のための API を解決している様子を示しています。ダンプされた文字列と合わせると、これは入力のキャプチャ、ログの書き込み、フットプリントを減らすためのタイマークリーンアップを行う、キーロガー/スティーラーのハイブリッドのように振る舞うペイロードを示唆しています。
jmp qword ptr ds:[] – キャプチャしたデータ / ドロップしたペイロードをディスクに書き込みます。 jmp qword ptr ds:[] – 非同期ファイル書き込み(ステルスなログのフラッシュに使用)。 jmp qword ptr ds:[] – 散在書き込み操作(断片化されたペイロードのドロップに使用)。 jmp qword ptr ds:[] – タイマーキューを削除し、タイミングに基づく痕跡を消去します。 SetSystemTime / SetLocalTime – タイムスタンプ操作の可能性。 SetWindowsHookEx / CallNextHookEx / UnhookWindowsHookEx – キーボードフックチェーン。 GetForegroundWindow / GetWindowTextW / GetClassNameW – アクティブウィンドウのコンテキストをキャプチャします。 GetSystemInfo / EnumWindows / EnumChildWindows – 環境の列挙。
キーロガーの確認(強化): SetWindowsHookEx、CallNextHookEx、ToUnicodeEx、GetForegroundWindow の組み合わせは、キーストロークとそれが入力されたウィンドウの両方を記録する、典型的なキーロガーの実装です。 スティーラー動作: WriteFile + WriteFileEx + WriteFileGather は、キャプチャしたデータ(キーストローク、資格情報)が検出を避けるために断片化された非同期チャンクでディスクに書き込まれることを示しています。 アンチフォレンジッククリーンアップ: DeleteTimerQueue と SetSystemTime は、ローダーが自身のタイミング痕跡を消去し、ファイルのタイムスタンプを変更する可能性を助けます。 合成入力: SendInput + RegisterHotKey は、ペイロードがキーストロークを注入できることも示唆します — 永続化やリモートでのアクションのトリガーに有用です。 Amadey ペイロードパターン: この API セットは、ローダーがキーロガー/スティーラーペイロード(一般に Vidar、Lumma、または類似のもの)を展開する準備をしていることを裏付けます。

4番目の x64dbg ビューは、Amadey Loader が kernelbase.dll 内で CommandLineToArgvW を積極的に使用し、実行時にコマンドライン引数を解析・操作している様子を示しています。これは、ローダーが細工された引数(例: rundll32、regsvr32、PowerShell)で子プロセスを起動していることを示す強い指標です。以下のダンプは、AV/EDR バイパスおよび OS バージョンの標的化(os.name、os.version、bypass、bypassUac、pitou)に関連する文字列も明らかにしています。
VerQueryValueW / GetFileVersionInfoSizeW / GetFileVersionInfoW – PEのバージョン情報を読み取り、OS / AVコンポーネントをフィンガープリントする。 CommandLineToArgvW – 子プロセス実行のためにコマンドラインを引数に分割する。 m.a.n.d./.c.o.m.m.a.n.d – 難読化された「mand/command」への参照(おそらくWMI / CMDの呼び出し) g.e.t.-.E.x.e.c.u.t.i.o.n.P.o.l.i.c.y – PowerShell ExecutionPolicyの照会(バイパスの準備)。 .r.e.f.l.e.c.t.i.o.n...A.s.s.e.m.b.l.y – .NETリフレクションによる読み込み(メモリ内でのアセンブリ実行)。 s.e.t.-.E.x.e.c.u.t.i.o.n.P.o.l.i.c.y. .B.y.p.a.s.s – PowerShell ExecutionPolicyバイパスコマンド o.p.e.n.-.P.r.o.c.e.s.s / .p.r.o.c.e.s.s. .B.y.p.a.s.s. – プロセスレベルのバイパスルーチン。 w.s.c.r.i.p.t. / .e.x.e.c.s.c.r.i.p.t. – WSH / スクリプト実行(例: .vbs、.js)。 m.s.h.t.a. / .e.x.e.c.u.t.i.o.n.P.o.l.i.c.y – Mshta / ExecutionPolicyの悪用
コマンドラインの悪用: CommandLineToArgvWはLOLBin(rundll32、mshta、wscript、PowerShell)の引数を動的に構築するために使用されており、これはAmadeyローダーの典型的な手法である。 AV/EDRバイパス: bypassUac、ExecutionPolicy Bypass、.Reflection.Assemblyといった文字列は、ローダーがPowerShellの制限をバイパスし、.NETアセンブリをメモリ内に読み込もうとしていることを裏付ける。 スクリプトベースのステージング: wscript.exe / mshta / .execscriptへの参照は、Amadeyが中間ステージとしてスクリプトをドロップして実行できることを示している。 リフレクティブ.NET読み込み: .Reflection.Assemblyにより、ペイロードはディスクに触れることなく完全にメモリ内で実行できる。 Amadeyローダーの役割: このセクションは、Amadeyがステージャー/ローダーとして機能していることを強く裏付ける — 環境を準備しているのである。

Amadey Loaderダンプの5番目のx64dbgビューでは、入力キャプチャ、クリップボード監視、ウィンドウフッキングのAPIが多数公開されている。以前のキーロガーの証拠と合わせると、ローダーがキーストローク、クリップボードの内容、アクティブウィンドウのアクティビティをキャプチャできる完全な監視ペイロードを準備していることが確認できる — これはAmadeyにバンドルされる情報窃取ツールに典型的な動作パターンである。