
このツールは、Windows 11のRecall機能からデータを抽出して表示し、PCのアクティビティスナップショットに関する情報に簡単にアクセスできるようにします。
Breaking Windows Recall. Again.
image
Microsoft が Recall を再設計 し、VBS エンクレーブ、AES-256-GCM 暗号化、Windows Hello 認証、Protected Process Light ホストを導入したとき、そのメッセージは明確でした。データは金庫に鍵をかけられている、と。
金庫は頑丈です。しかし配達トラックは違います。
AIXHost.exe は Recall のタイムラインをレンダリングするプロセスですが、PPL も AppContainer もコード整合性の強制もありません。ログイン中のユーザーとして実行されているプロセスは、コードを注入し、正当な UI が使用するのと同じ COM API を呼び出すことができます。ユーザーが Windows Hello で認証すると、復号されたスクリーンショット、OCR テキスト、メタデータがライブの COM オブジェクトとして AIXHost.exe を流れます。TotalRecall Reloaded はそのプロセス内部に潜み、すべてを抽出します。
管理者権限は不要。標準ユーザー。カーネルエクスプロイトも暗号の迂回もなし。COM 呼び出しだけです。
TotalRecall Reloaded は2つのファイルで構成されています。インジェクター (totalrecall.exe) とペイロード DLL (totalrecall_payload.dll) です。
インジェクターは CreateToolhelp32Snapshot で AIXHost.exe を見つけ、VirtualAllocEx でターゲットにメモリを割り当て、WriteProcessMemory で DLL パスを書き込み、LoadLibraryW を指すリモートスレッドを生成します。古典的な DLL インジェクションです。特別なことは何も必要ありません。なぜなら AIXHost.exe にはそれに対する防御が一切ないからです。
これは 標準ユーザー 権限で機能します。昇格も SeDebugPrivilege も不要です。デフォルトの Windows DACL は、同一ユーザーのプロセスが互いにフルアクセスできるようにしています。確認済み: トークンは Medium 必須レベルで実行され、BUILTIN\Administrators は拒否専用に設定されています。
VBS エンクレーブは、Windows Hello なしでは何も復号しません。このツールはそれを回避しません。ユーザーに実行させ、その際に静かに同乗するか、ユーザーが実行するのを待ちます。
--launch は keybd_event を介して Win+J (Recall タイムラインを開くキーボードショートカット) をシミュレートします。ユーザーは Hello プロンプト (顔、指紋、または PIN) を確認し、認証すると、エンクレーブは復号されたデータの提供を開始します。ユーザーから見れば、Recall が通常通り開いただけです。私たちから見れば、ペイロードはすでに内部にあり、待機しています。
--stealth は完全にサイレントなモードです。次のように動作します:
AIXHost.exe (常に実行中) に注入し、DiscardDataAccess を NOP にパッチAIXHost.exe が終了し、再起動。ツールは再起動を検出し、新しいプロセスに再注入aihost.exe に残る (取り消しがブロックされたため)。即座に抽出を開始--wait は --launch の受動的な対応版です。Win+J をシミュレートする代わりに、ツールはユーザーが自分で Recall を開くのを待ちます (タスクバー、ショートカット、その他の経路)。AIXHost.exe が現れ、ユーザーが自然に Hello を完了すると、ペイロードが注入され抽出が開始されます。監視下にあるマシンや、Recall セッションが完全にユーザー主導で見える必要がある場合に便利です (合成キーボード入力なし)。
AIXHost.exe 内部に入ると、ペイロードは CoInitializeEx(COINIT_APARTMENTTHREADED) で COM アパートメントを初期化し、CoSetProxyBlanket(EOAC_DYNAMIC_CLOAKING) でプロキシ ID 転送を設定します。これは重要です。動的クローキングがないと、COM プロキシは認証済みの ID をサーバーに伝えません。
抽出は、正規の Recall UI が使用するのと同じ経路をたどります:
エンクレーブ初期化 : DataManager.Load() がエンクレーブキーのロードをトリガー。DataStoreManager.DecryptDatabase() (スロット 37) が復号されたビューを準備。ペイロードは DataManager.DataStatus が 3 (ロック解除) を返すまでポーリング。
エンティティ列挙 : MemoryEntityStatics.GetLightMemoryItemsBefore() (スロット 9) が軽量エンティティ参照のベクターを返す。各参照はオフセット +8 にコンテキスト ID を持つ。一般的なマシンでは、数日から数週間のアクティビティにわたる数百のエンティティが返される。
エンティティごとの抽出 : 各コンテキスト ID について、ペイロードは ContextEngine2.TryGetEntityForId() (スロット 6) で完全なエンティティをロードし、IEntityWrapper (スロット 6) でラップを解除し、IMemoryEntity に QueryInterface する。そこから:
IMemoryEntity2/3 への QI 経由: 復元機能、アプリ滞在時間、Web 滞在時間TryGetBitmapCaptureAsync() (スロット 19) が SoftwareBitmap を返す。ISoftwareBitmapNative に QueryInterface し、GetData(IID_IWICBitmap) を呼び出して WIC ビットマップを取得し、IWICBitmapEncoder で PNG としてエンコードContextEngine2.TryGetMemoryEntityDetailsForIdAsync() (スロット 8) がエンティティ詳細を返す。IMemoryEntityDetails に QI して OcrLines (スロット 7)、IMemoryEntityDetails2 に QI して NER テキストエンティティ (人物、メール、住所)、IMemoryEntityDetails4 に QI して AI アクティビティ説明リトライラウンド : Baker.dll (Recall UI ライブラリ) は ContextEngine キャッシュを非同期に設定する。最初のパスの後、ペイロードは3秒間 Windows メッセージをポンプし (PeekMessage/DispatchMessage ループ)、利用できなかったエンティティを再試行。各ラウンドで通常約12の追加エンティティが得られる。最大10リトライラウンド。
すべての呼び出しは __try/__except でラップされている。COM プロキシ呼び出しでの1回のアクセス違反が aihost.exe への RPC チャネルを恒久的に破壊するからだ。復旧はできない。AIXHost.exe を再起動する必要がある。SEH ラッパーは間違ったパラメータ型によるクラッシュをキャッチし、セッションを維持する。
いくつかの操作は、Hello 認証なしで機能します:
スクリーンショット抽出 : RecallPrivacyIndicatorSettings (CLSID {42C63551-...}) は スロット 13 で GetRecentCaptureThumbnail(width, height) を公開する。メソッド名は "thumbnail" だが、サーバーは解像度の上限を強制しない。3840x3840 を渡すと、最新の Recall キャプチャがフル解像度で返される。IRandomAccessStream の結果は CreateStreamOverRandomAccessStream (shcore.dll) で IStream に変換され、BMP としてダンプされる。
データ破壊 : IDataStoreManager::DeleteEvents() (スロット 12) はキャプチャ履歴全体を消去する。パラメータも認証も不要。Ghidra 分析により確認: FUN_1802ddd10 にある削除ハンドラには、認証ゲート関数への呼び出しがゼロ。認証チェックはそもそも配線されていなかった。
メタデータ漏洩 : ストレージパス (ユーザー固有の UKP GUID を含む)、データベースサイズ、保持ポリシー、キャプチャ状態、最新のキャプチャコンテキスト ID はすべて、IDataStoreManagerStatics と RecallPrivacyIndicatorSettings を介して認証なしで読み取り可能。
image``` totalrecall.exe --launch Open Recall, trigger Hello, extract everything totalrecall.exe --stealth Silent extraction (patches auth revocation, waits) totalrecall.exe --wait Wait for user to manually open Recall totalrecall.exe --preauth Grab latest screenshot + settings (no Hello) totalrecall.exe --search "password" Search OCR text in latest extraction totalrecall.exe --destroy Wipe all Recall data (confirmation required, no Hello)
| モード | 認証必須 | 機能 |
|------|:---:|-------------|
| `--launch` | Hello | Win+Jをシミュレート、ユーザーが認証、完全抽出 |
| `--stealth` | Passive | 認証取り消しをパッチし、ユーザーがRecallを認証するのを待ち、静かに抽出 |
| `--wait` | Hello | ユーザーが自然にRecallを開くのを待ち、その後抽出 |
| `--preauth` | **No** | 最新のスクリーンショット + すべての設定 |
| `--search` | No | 最新の抽出全体での大文字小文字を区別しないOCRテキスト検索 |
| `--destroy` | **No** | `DeleteEvents()`、不可逆、確認のためにDESTROYと入力する必要がある |
### 出力例
**`--stealth` (初回実行、ユーザーを待機中):**```
[+] Target: AIXHost.exe PID 8648 (stealth mode)
[*] Patching auth revocation...
[+] Waiting for Recall session...
[+] Recall session detected
[*] Waiting for user to close Recall...
[*] Recall closed, waiting for AIXHost to respawn...
[+] Extracting from AIXHost PID 26208
[+] Payload active
[*] Extracting
[##############################] 384/384 entities
EXTRACTION COMPLETE 6 min 51 sec
Screenshots 192 328.8 MB
OCR Text 184 535.2 KB
Metadata (CSV) 384 97.4 KB
--stealth (後続の実行、キャッシュされたセッション):```
[+] Target: AIXHost.exe PID 27532 (stealth mode)
[] Patching auth revocation...
[+] Waiting for Recall session...
[+] Cached session found, extracting...
[] Extracting
[##############################] 398/398 entities
**`--launch`:**```
[+] Target: AIXHost.exe PID 14636 Memory 60 MB
[*] Triggering Recall via Win+J...
[*] Waiting for Hello authentication authenticating
[+] Recall ready PID 14636 Memory 242 MB
[*] Extracting
[##############################] 212/212 entities
EXTRACTION COMPLETE 3 min 59 sec
Screenshots 104 184.0 MB
--preauth (ハロー不要):```
[+] Target: AIXHost.exe PID 27532 (pre-auth mode)
[*] Injecting payload (pre-auth only)...
[+] Payload active
PRE-AUTH EXTRACTION COMPLETE 0 min 1 sec
Screenshot 4K (3840x2464) 36.1 MB
Settings Storage Path C:\Users<user>\AppData\Local\CoreAIPlatform.00\UKP{...} Storage Size 178.3 MB Capture Count 0 Retention Days 90
**`--search`:**```
Searching for: "password"
In: extraction_20260406_152736