
यह उपकरण Windows 11 में Recall feature से डेटा निकालता और प्रदर्शित करता है, जो आपके PC की गतिविधि स्नैपशॉट्स के बारे में जानकारी तक पहुँचने का आसान तरीका प्रदान करता है।
विंडोज रिकॉल को फिर से तोड़ना।
image
जब माइक्रोसॉफ्ट ने VBS एन्क्लेव, AES-256-GCM एन्क्रिप्शन, विंडोज हैलो ऑथेंटिकेशन और प्रोटेक्टेड प्रोसेस लाइट होस्ट के साथ रिकॉल को फिर से डिज़ाइन किया, तो संदेश स्पष्ट था: डेटा एक तिजोरी में बंद है।
तिजोरी ठोस है। डिलीवरी ट्रक नहीं है।
AIXHost.exe, वह प्रक्रिया जो रिकॉल टाइमलाइन प्रस्तुत करती है, में PPL, AppContainer, या कोड इंटीग्रिटी प्रवर्तन नहीं है। लॉग-इन उपयोगकर्ता के रूप में चलने वाली कोई भी प्रक्रिया इसमें कोड इंजेक्ट कर सकती है और वही COM API कॉल कर सकती है जो वैध UI उपयोग करता है। एक बार जब उपयोगकर्ता विंडोज हैलो के साथ प्रमाणित हो जाता है, तो डिक्रिप्टेड स्क्रीनशॉट, OCR टेक्स्ट और मेटाडेटा AIXHost.exe के माध्यम से लाइव COM ऑब्जेक्ट के रूप में प्रवाहित होते हैं। टोटलरिकॉल रीलोडेड उस प्रक्रिया के अंदर बैठता है और सब कुछ निकालता है।
कोई एडमिन आवश्यक नहीं। मानक उपयोगकर्ता। कोई कर्नेल शोषण नहीं। कोई क्रिप्टो बाईपास नहीं। सिर्फ COM कॉल।
टोटलरिकॉल रीलोडेड दो फाइलें हैं: एक इंजेक्टर (totalrecall.exe) और एक पेलोड DLL (totalrecall_payload.dll)।
इंजेक्टर CreateToolhelp32Snapshot के माध्यम से AIXHost.exe ढूंढता है, VirtualAllocEx के साथ लक्ष्य में मेमोरी आवंटित करता है, WriteProcessMemory के साथ DLL पथ लिखता है, और LoadLibraryW पर इंगित एक रिमोट थ्रेड उत्पन्न करता है। क्लासिक DLL इंजेक्शन। कुछ फैंसी नहीं, क्योंकि कुछ फैंसी की आवश्यकता नहीं है। AIXHost.exe के पास इसके खिलाफ शून्य सुरक्षा है।
यह मानक उपयोगकर्ता विशेषाधिकार से काम करता है। कोई एलिवेशन नहीं, कोई SeDebugPrivilege नहीं। डिफ़ॉल्ट विंडोज DACL एक ही उपयोगकर्ता की प्रक्रियाओं को एक-दूसरे तक पूर्ण पहुंच की अनुमति देता है। सत्यापित: टोकन मीडियम अनिवार्य स्तर पर चलता है जिसमें BUILTIN\Administrators केवल-अस्वीकार पर सेट है।
VBS एन्क्लेव विंडोज हैलो के बिना कुछ भी डिक्रिप्ट नहीं करेगा। उपकरण उसे बायपास नहीं करता। यह उपयोगकर्ता को ऐसा करने के लिए मजबूर करता है, जब उपयोगकर्ता ऐसा करता है तो चुपचाप साथ चलता है, या उपयोगकर्ता के ऐसा करने की प्रतीक्षा करता है।
--launch keybd_event के माध्यम से Win+J का अनुकरण करता है, वह कीबोर्ड शॉर्टकट जो रिकॉल टाइमलाइन खोलता है। उपयोगकर्ता एक हैलो प्रॉम्प्ट (चेहरा, फिंगरप्रिंट या PIN) देखता है, प्रमाणित करता है, और एन्क्लेव डिक्रिप्टेड डेटा परोसना शुरू कर देता है। उपयोगकर्ता के दृष्टिकोण से, रिकॉल सामान्य रूप से खुला। हमारे दृष्टिकोण से, पेलोड पहले से अंदर है, प्रतीक्षा कर रहा है।
--stealth पूरी तरह से मूक मोड है। यह इस प्रकार काम करता है:
AIXHost.exe (हमेशा चल रहा) में इंजेक्ट करता है और DiscardDataAccess को नो-ऑप में पैच करता हैAIXHost.exe बंद हो जाता है और पुनः शुरू होता है। उपकरण पुनःआरंभ का पता लगाता है और नई प्रक्रिया में पुनः इंजेक्ट करता हैaihost.exe में बना रहता है (रद्दीकरण अवरुद्ध हो गया था)। निष्कर्षण तुरंत शुरू होता है--wait --launch का निष्क्रिय समकक्ष है। Win+J का अनुकरण करने के बजाय, उपकरण निष्क्रिय बैठता है जबकि उपयोगकर्ता स्वयं रिकॉल खोलता है — टास्कबार से, शॉर्टकट से, या किसी अन्य पथ से। जब AIXHost.exe प्रकट होता है और उपयोगकर्ता स्वाभाविक रूप से हैलो पूरा करता है, तो पेलोड इंजेक्ट किया जाता है और निष्कर्षण शुरू होता है। निगरानी में रखे जा रहे मशीन पर उपयोगी, या जब रिकॉल सत्र को पूरी तरह से उपयोगकर्ता द्वारा शुरू किया गया दिखने की आवश्यकता होती है, बिना किसी सिंथेटिक कीबोर्ड इनपुट के।
एक बार AIXHost.exe के अंदर, पेलोड CoInitializeEx(COINIT_APARTMENTTHREADED) के साथ एक COM अपार्टमेंट प्रारंभ करता है और CoSetProxyBlanket(EOAC_DYNAMIC_CLOAKING) के साथ प्रॉक्सी पहचान अग्रेषण सेट करता है। यह महत्वपूर्ण है। गतिशील क्लोकिंग के बिना, COM प्रॉक्सी सर्वर तक प्रमाणित पहचान नहीं ले जाता है।
निष्कर्षण उसी पथ का अनुसरण करता है जो वैध रिकॉल UI उपयोग करता है:
DataManager.Load() एन्क्लेव कुंजी लोडिंग को ट्रिगर करता है। DataStoreManager.DecryptDatabase() (स्लॉट 37) डिक्रिप्टेड व्यू तैयार करता है। पेलोड DataManager.DataStatus को तब तक पोल करता है जब तक यह 3 (अनलॉक) न लौटाए।MemoryEntityStatics.GetLightMemoryItemsBefore() (स्लॉट 9) हल्के एंटिटी संदर्भों का एक वेक्टर लौटाता है। प्रत्येक में ऑफसेट +8 पर एक संदर्भ ID होती है। एक सामान्य मशीन पर, यह गतिविधि के दिनों या हफ्तों तक फैली सैकड़ों एंटिटी लौटाता है।ContextEngine2.TryGetEntityForId() (स्लॉट 6) के माध्यम से पूर्ण एंटिटी लोड करता है, IEntityWrapper (स्लॉट 6) के माध्यम से इसे अनरैप करता है, और IMemoryEntity के लिए QueryInterface करता है। वहां से:
TryGetBitmapCaptureAsync() (स्लॉट 19) एक लौटाता है। पर , WIC बिटमैप प्राप्त करने के लिए कॉल करें, के माध्यम से PNG के रूप में एनकोड करेंप्रत्येक कॉल __try/__except में लपेटा जाता है क्योंकि COM प्रॉक्सी कॉल पर एक भी एक्सेस उल्लंघन aihost.exe के लिए RPC चैनल को स्थायी रूप से मार देता है। कोई पुनर्प्राप्ति नहीं है। आपको AIXHost.exe को पुनरारंभ करना होगा। SEH रैपर गलत पैरामीटर प्रकारों से क्रैश को पकड़ते हैं और सत्र को जीवित रखते हैं।
कई ऑपरेशन बिना किसी हैलो प्रमाणीकरण के काम करते हैं:
स्क्रीनशॉट निष्कर्षण: RecallPrivacyIndicatorSettings (CLSID {42C63551-...}) स्लॉट 13 पर GetRecentCaptureThumbnail(width, height) को उजागर करता है। विधि का नाम "thumbnail" कहता है लेकिन सर्वर रिज़ॉल्यूशन कैप लागू नहीं करता है। 3840x3840 पास करने से पूर्ण रिज़ॉल्यूशन पर सबसे हालिया रिकॉल कैप्चर लौटता है। 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` | नमस्ते | Win+J का अनुकरण करें, उपयोगकर्ता प्रमाणित करता है, पूर्ण निष्कर्षण |
| `--stealth` | निष्क्रिय | प्रमाणीकरण निरस्तीकरण को पैच करता है, Recall को प्रमाणित करने के लिए उपयोगकर्ता की प्रतीक्षा करता है, चुपचाप निकालता है |
| `--wait` | नमस्ते | उपयोगकर्ता के स्वाभाविक रूप से Recall खोलने की प्रतीक्षा करें, फिर निकालें |
| `--preauth` | **नहीं** | नवीनतम स्क्रीनशॉट + सभी सेटिंग्स |
| `--search` | नहीं | नवीनतम निष्कर्षण में केस-असंवेदनशील OCR टेक्स्ट खोज |
| `--destroy` | **नहीं** | `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 (कोई Hello आवश्यक नहीं):```
[+] 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
[1] === [12] ctxId=90443 Settings | Chrome ===
Saved passwords and passkeys
[2] === [47] ctxId=91201 inbox | Thunderbird ===
Your temporary password has been reset
extraction_20260404_143052/ screenshots/ Full-resolution decrypted PNGs screenshots/*.txt Per-image OCR text thumbnails/ Thumbnail PNGs (fallback when full screenshot unavailable) ocr_text.txt Combined OCR text for all captures recall_data.csv Structured metadata settings.txt Storage path, size, retention, capture state latest_capture_4k.bmp Pre-auth screenshot of most recent capture extraction.log Detailed extraction log with timing
## निर्माण
**आवश्यकताएँ:** Visual Studio with ARM64 C++ tools, Windows 11 ARM64 with Recall enabled.```
make.bat
उत्पन्न करता है totalrecall.exe और totalrecall_payload.dll। दोनों को चलाते समय एक ही निर्देशिका में होना चाहिए।
VTL1 (Secure World) +--------------------------------------------------+ | VBS Enclave: AES-256-GCM, sealed keys | | snapshot_support.dll / storage_support.dll | | Keys never leave here. Crypto is sound. | +--------------------------------------------------+ ^ CallEnclave | VTL0 (Normal World) +--------------------------------------------------+ | aihost.exe (PPL, Signer=5) | | +-- Microsoft.Windows.AI.Platform.dll (6.9 MB) | | 44 methods on IDataStoreManager alone | | Enclave bridge. Protected. Can't touch it. | | | | AIXHost.exe (NO PROTECTION) | | +-- Baker.dll: OCR, NER, AI classification | | +-- Receives decrypted data for rendering | | +-- CreateRemoteThread = game over | +--------------------------------------------------+
The key hierarchy: Hello -> NGC ECDH P-384 (TPM-backed) -> VTL1 mutual auth -> enclave-sealed key material -> per-page AES-256-GCM with random nonces and page-number AAD. Six layers of key derivation. The cryptography is genuinely solid.
The problem is what happens after decryption. The plaintext crosses into `AIXHost.exe`, an unprotected, injectable, same-user process. The enclave doesn't distinguish between `Baker.dll` and injected code. It can't.
---
## Key Findings
### The Trust Boundary Ends Too Early
Microsoft's [architecture blog](https://blogs.windows.com/windowsexperience/2024/09/27/update-on-recall-security-and-privacy-architecture/) states that "VBS एन्क्लेव के बाहर की प्रक्रियाएं स्नैपशॉट या एन्क्रिप्शन कुंजियों तक कभी सीधे एक्सेस नहीं पाती हैं" और यह डिज़ाइन "लैटेंट मैलवेयर द्वारा उपयोगकर्ता प्रमाणीकरण के साथ चुपके से डेटा चुराने के प्रयासों को प्रतिबंधित करता है।"
In practice, `AIXHost.exe` receives every decrypted screenshot and OCR result as a live COM object. There's no per-caller verification inside the process. No "are you Baker.dll?" check. If you're in the process, you're trusted. The security boundary is the VBS enclave and the PPL, not the rendering process. Decrypted data is one `CreateRemoteThread` away from any same-user application.
### The IResponse4 Access Control Bypass
A direct authorization gap.
When you call `ContextDataSource.Search()` and get back an `IResponse`, the natural path is `IResponse.get_Items()` (slot 9) to get the results. On a fresh session, this returns `0x80005473`, a custom Recall-specific error code. The server is deliberately rejecting the call. `IResponse2.ItemsAfterIndex()` returns the same error. Access control is working.
But the `IResponse` object implements four interface versions. `IResponse4.get_UnfilledItems()` (slot 9 on a different IID) returns the same underlying data collection with no access check at all.```
IResponse.get_Items() -> 0x80005473 (ACCESS DENIED)
IResponse2.ItemsAfterIndex() -> 0x80005473 (ACCESS DENIED)
IResponse4.get_UnfilledItems() -> S_OK (all entities returned)
Same data. Different interface version. No authorization. The method was intended for internal lazy-loading in the search pipeline. The security review caught get_Items and ItemsAfterIndex, but missed get_UnfilledItems. This is the pattern that makes security engineering hard: the check exists on one code path (which means someone decided it was needed), and is missing on another.
उन वस्तुओं से, प्रत्येक इकाई का संदर्भ ID ContextEngine2.TryGetEntityForId() की ओर ले जाता है, जो स्क्रीनशॉट, OCR और मेटाडेटा सहित पूर्ण इकाई को लोड करता है। एन्क्लेव अनुरोध पर सब कुछ डिक्रिप्ट करता है।
जब उपयोगकर्ता Recall विंडो बंद करता है, तब Baker.dll IDataProtectionManager3::DiscardDataAccess() को कॉल करता है ताकि aihost.exe में डेटा एक्सेस अनुदान को स्पष्ट रूप से रद्द किया जा सके। इसीलिए प्रमाणीकरण उपयोगकर्ता के सामान्य Recall सत्र के बाद बना नहीं रहता: Baker.dll स्वयं के बाद सफाई करता है।
बाईपास: AIXHost.exe के अंदर इंजेक्ट किया गया कोड COM प्रॉक्सी vtable को पैच कर सकता है ताकि DiscardDataAccess (स्लॉट 8) को एक no-op फ़ंक्शन से बदल दिया जाए। एक VirtualProtect कॉल, एक पॉइंटर लेखन। जब उपयोगकर्ता Recall बंद करता है, Baker.dll पैच किए गए स्लॉट को कॉल करता है, कुछ नहीं होता है, और अनुदान aihost.exe में सक्रिय रहता है। कोई भी बाद का AIXHost.exe इंस्टेंस चुपचाप कैश किए गए अनुदान को प्राप्त कर लेता है।
व्यवहार में, --stealth AIXHost.exe (जो हमेशा चल रहा होता है) में पैच तैनात करता है और प्रतीक्षा करता है। अगली बार जब उपयोगकर्ता सामान्य रूप से Recall खोलता और बंद करता है, तो सफाई दबा दी जाती है और डेटा एक्सेस अनुदान बना रहता है। उपकरण एक्सेस का पता लगाता है, स्वचालित पुनः-इंजेक्शन (प्रत्येक नए इंस्टेंस को फिर से पैच करना) के माध्यम से AIXHost प्रक्रिया पुनर्प्रारंभ को संभालता है, और चुपचाप सब कुछ निकाल लेता है। पैच प्रति-प्रक्रिया और प्रति-रन है: यह वर्तमान निष्कर्षण सत्र की रक्षा करता है। उपकरण से बाहर निकलने के बाद बाद में Recall का उपयोग सामान्य व्यवहार पर लौट आता है।
IDataStoreManager::DeleteEvents() बिना Windows Hello के पूरे कैप्चर इतिहास को मिटा देता है। Ghidra ने पुष्टि की: डिलीट हैंडलर में प्राधिकरण गेट फ़ंक्शन के लिए शून्य कॉल हैं। प्रमाणीकरण जांच को कभी भी डिलीट पथ में तार नहीं किया गया था। एक हमलावर जो डेटा नहीं पढ़ सकता, वह फिर भी उसे नष्ट कर सकता है। मानक उपयोगकर्ता से एंटी-फोरेंसिक्स।
RecallPrivacyIndicatorSettings.GetRecentCaptureThumbnail आपके अनुरोधित रिज़ॉल्यूशन पर सबसे हालिया Recall स्क्रीनशॉट लौटाता है। यह विधि टास्कबार में छोटे प्राइवेसी इंडिकेटर के लिए अभिप्रेत है। किसी ने भी रिज़ॉल्यूशन को सीमित नहीं किया। कोई भी समान-उपयोगकर्ता प्रक्रिया चुपचाप वह ले सकती है जो अंतिम बार स्क्रीन पर था, बिना Hello की आवश्यकता के।
GetWindowCaptureCount (स्लॉट 26) Hello के बिना E_ACCESSDENIED लौटाता है। लेकिन GetSecureStorageInfo (स्लॉट 27) एक StorageInfo संरचना लौटाता है जिसमें बिल्कुल वही डेटा होता है, बिना प्रमाणीकरण की आवश्यकता के। संरचना में NumberOfItems (कैप्चर गणना) और Size (एन्क्रिप्टेड स्टोरेज का कुल बाइट्स) शामिल हैं। एक हमलावर बिना किसी प्रमाणीकरण के वास्तविक समय में Recall गतिविधि को ट्रैक करने के लिए इसकी निगरानी कर सकता है।
एक बार Hello पूरा हो जाने के बाद, प्रमाणीकरण स्थिति पूरे Windows सत्र के लिए aihost.exe (PPL) में कैश हो जाती है। AIXHost.exe को मारने और पुनरारंभ करने से यह साफ़ नहीं होता है। एक हमलावर उपयोगकर्ता के स्वाभाविक रूप से Recall खोलने की प्रतीक्षा कर सकता है, फिर घंटों बाद चुपचाप डेटा निकाल सकता है। कोई अतिरिक्त संकेत नहीं, कोई दृश्य विंडो नहीं, कोई उपयोगकर्ता जागरूकता नहीं के साथ असीमित पुनः-निष्कर्षण।
Recall सिर्फ स्क्रीनशॉट नहीं लेता। यह आपके कंप्यूटर पर आपके द्वारा किए जाने वाले हर काम का एक व्यापक व्यवहार प्रोफ़ाइल बनाता है। हर कुछ सेकंड, यह एक स्क्रीनशॉट लेता है, उस पर OCR और (माना जाता है) AI वर्गीकरण चलाता है, और परिणाम को एन्क्रिप्टेड SQLite डेटाबेस में संग्रहीत करता है।
नीचे की सभी चीज़ें दो स्वतंत्र स्रोतों से पुष्टि की गई हैं: निजी WinRT मेटाडेटा (Microsoft.Windows.AI.Platform.winmd, cppwinrt.exe के माध्यम से पार्स किया गया) और VBS एन्क्लेव बाइनरी (storage_support.dll, जिसमें पूरा डेटाबेस स्कीमा सादे टेक्स्ट स्ट्रिंग्स में है)।
नोट: नीचे दिए गए फ़ील्ड नाम WinRT मेटाडेटा और एन्क्लेव बाइनरी स्ट्रिंग्स से पुष्टि किए गए हैं। प्रत्येक फ़ील्ड में क्या है इसका विवरण API नामों और प्रकारों से अनुमानित किया गया है, और रनटाइम पर सभी की गतिशील रूप से पुष्टि नहीं की गई है।
नोट: उपरोक्त के समान चेतावनी। क्लास और एनम नाम WinRT मेटाडेटा और एन्क्लेव DLL स्ट्रिंग्स से गणना किए गए हैं; प्रत्येक का प्रतिनिधित्व करने वाले विवरण नामों और संदर्भ से अनुमानित किए गए हैं और प्रत्येक प्रविष्टि के लिए गतिशील रूप से सत्यापित नहीं किए गए हैं।
कच्चे कैप्चर के शीर्ष पर, Recall AI वर्गीकरण चलाता है जो उत्पन्न करता है:
PersonName, Organization, Product, Address, Location, DateTime, Event, Duration, WebUrl, EmailAddress। प्रत्येक स्रोत स्थिति के साथ OCR टेक्स्ट से निकाला गया।Topic, Person, Emoji, App, FileKind, , , , , , , , , , , , , , , , , , । प्रत्येक में आत्मविश्वास स्कोर और वैकल्पिक बाउंडिंग बॉक्स।हर कुछ सेकंड, Recall की कैप्चर सेवा स्क्रीनशॉट लेने से पहले 12 नीतियों का मूल्यांकन करती है:
GameModeActive, BatterySaverActive, UserActivityIdle, UserPresenceIdle, StorageLow, PrivateWindow, BlockedByContentProtection, BlockedAppId, BlockedExecutable, BlockedURL, BlockedContentFilePath, BitLockerDisabled
यदि इनमें से कोई भी ट्रिगर नहीं होता है, तो यह कैप्चर करता है। प्रति-कैप्चर इनपुट संरचना (WinRT मेटाडेटा से):``` WindowData { WindowId, Foreground, Title, Bounds, Minimized, PrivateState, InputScopePrivacy AppData { AppUserModelId, ProcessPath, IconUri, AppName, TileId RemoteClient, IsBrowserWindow } RestoreData { WebUrl, FilePath, ActivationUri, ActivityId, WebIconUri FileObjectId, VolumeId // NTFS persistent file identifiers SensitivityLabelData { State, Labels } } }
### The Database
The main database (`ukg.db`) uses SQLite SEE with AES-256-GCM encryption. Schema confirmed from `storage_support.dll` (the VBS enclave binary that contains the CREATE TABLE statements in plaintext):
**Core tables (17):**```
WindowCapture Id, Name, ImageToken, IsForeground, WindowId, WindowBounds,
WindowTitle, Properties, IsProcessed, Retry, ActivationUri,
ActivityId, FallbackUri, TimeStamp, DwellTime
WindowCaptureAppRelation WindowCaptureId, AppId, IsBackground
WindowCaptureWebRelation WindowCaptureId, WebId, IsBackground
WindowCaptureFileRelation WindowCaptureId, FileId
WindowCaptureTopicRelation WindowCaptureId, TopicId, Score (float)
WindowCaptureTextIndex FTS5 virtual table (WindowCaptureId, WindowTitle, OcrText)
App Id, WindowsAppId, IconUri, Name, Path, TileId, Properties
Web Id, Domain, Uri, IconUri, Properties
File Id, Path, Name, Extension, Kind, Type, ObjectId, VolumeId
Topic Id, Title, Properties
ScreenRegion Id, WindowCaptureId, RegionKind, OcrText, Bounds
AppDwellTime Id, WindowsAppId, HourOfDay, DayOfWeek, HourStartTimestamp, DwellTime
WebDomainDwellTime Domain, HourOfDay, DayOfWeek, HourStartTimestamp, DwellTime
SearchHistory SessionId, CorrelationId, TimeStamp, Kind, Text, Language
SearchFeedback SessionId, CorrelationId, TimeStamp, Kind, Text, Language,
ItemChosenEventId, FeedbackType
IdTable NextId
_MigrationMetadata Id, Version
सिमैंटिक खोज सूचकांक (SemanticTextStore.sidb / SemanticImageStore.sidb):``` si_items Core embedding storage si_embedding_metadata Embedding type and source mapping si_diskann_graph DiskANN approximate nearest neighbor graph si_diskann_references Graph edge references si_diskann_config Index configuration si_diskann_info Index statistics si_application_values Application-level settings
एक सामान्य कार्यदिवस में, सैकड़ों कैप्चर जमा होते हैं। डिफ़ॉल्ट प्रतिधारण 90 दिन है जिसमें 75 GB स्टोरेज सीमा है। हर खोला गया ईमेल, हर संपादित दस्तावेज़, हर देखी गई वेबसाइट, स्क्रीन पर हर टर्मिनल कमांड, हर दिखाई देने वाली संदेश वार्तालाप। सभी OCR-प्रसंस्कृत, इकाई-निकाले गए, विषय-वर्गीकृत, और अर्थगत रूप से अनुक्रमित।
आपका संपूर्ण डिजिटल जीवन, अनुक्रमित और खोजने योग्य। जैसा इरादा था।
---
## माइक्रोसॉफ्ट को क्या सही लगा
VBS enclave बिल्कुल मजबूत है। की सामग्री कभी VTL1 नहीं छोड़ती। प्रति-पृष्ठ AES-256-GCM यादृच्छिक nonces के साथ पाठ्यपुस्तक के अनुसार सही है। `aihost.exe` PPL सुरक्षा प्रभावी है, कर्नेल इंजेक्शन को रोकता है। CFG ARM64 पर व्यापक है। SQL क्वेरी पूरी तरह से पैरामीटराइज़्ड हैं (दस इंजेक्शन पेलोड, शून्य दुष्प्रभाव)। प्रमाणीकरण मॉडल स्टेटलेस और रेस-फ्री है (हजारों प्रोब, शून्य बाईपास)।
मूलभूत समस्या क्रिप्टो, enclave, प्रमाणीकरण, या PPL नहीं है। यह डिक्रिप्टेड सामग्री को रेंडरिंग के लिए एक असुरक्षित प्रक्रिया में भेजना है। तिजोरी का दरवाजा टाइटेनियम है। इसके बगल की दीवार ड्रायवॉल है।
---
## जिम्मेदार प्रकटीकरण
यह शोध Microsoft Security Response Center (MSRC) को जिम्मेदारी से प्रकट किया गया था।
### समयरेखा
| दिनांक | घटना |
|------|-------|
| 2024-06-07 | मूल [TotalRecall](https://github.com/xaitax/TotalRecall) जारी (पूर्व-एन्क्रिप्शन Recall) |
| 2024-06-13 | माइक्रोसॉफ्ट ने Recall लॉन्च में देरी की, VBS enclaves के साथ पुनर्डिज़ाइन की घोषणा की |
| 2025-04 | Recall VBS enclaves, एन्क्रिप्शन, Hello प्रमाणीकरण के साथ फिर से लॉन्च हुआ |
| 2026-03-06 | MSRC रिपोर्ट प्रस्तुत: पूरा लेख, स्रोत कोड, बिल्ड निर्देश |
| 2026-03-09 | MSRC ने केस 109586 खोला, स्थिति: समीक्षा / पुनरुत्पादन |
| 2026-03-27 | MSRC: 'इंजीनियरिंग टीम वर्तमान में जांच के अंतिम चरण में है' |
| 2026-04-03 | MSRC ने केस को **कोई भेद्यता नहीं** के रूप में बंद किया: 'वर्तमान दस्तावेजीकृत सुरक्षा डिज़ाइन के भीतर संचालित होता है' |
| 2026-04-09 | TotalRecall Reloaded सार्वजनिक रिलीज़ |
### माइक्रोसॉफ्ट का रुख
अपनी इंजीनियरिंग टीमों के साथ समीक्षा के बाद, MSRC ने निर्धारित किया कि 'देखा गया व्यवहार Recall के वर्तमान, दस्तावेजीकृत सुरक्षा डिज़ाइन के भीतर संचालित होता है' और 'प्रदर्शित एक्सेस पैटर्न इच्छित सुरक्षाओं और मौजूदा नियंत्रणों के अनुरूप हैं।' उन्होंने अपने [आर्किटेक्चर ब्लॉग](https://blogs.windows.com/windowsexperience/2024/09/27/update-on-recall-security-and-privacy-architecture/) का हवाला दिया, विशेष रूप से कि प्राधिकरण 'डेटा चुराने के लिए उपयोगकर्ता प्रमाणीकरण के साथ सवारी करने की कोशिश कर रहे गुप्त मैलवेयर के प्रयासों को प्रतिबंधित करता है' और 'VBS Enclaves के बाहर की प्रक्रियाएं कभी भी सीधे स्नैपशॉट या एन्क्रिप्शन कुंजियों तक पहुंच प्राप्त नहीं करती हैं और प्राधिकरण के बाद केवल enclave से लौटाए गए डेटा को प्राप्त करती हैं।'
मामले को कोई भेद्यता नहीं के रूप में बंद कर दिया गया।
यहां दर्ज प्री-ऑथ निष्कर्ष (अप्रमाणित डेटा विनाश, स्क्रीनशॉट निष्कर्षण) केस बंद होने के बाद अनुवर्ती शोध के दौरान खोजे गए थे।
---
## परीक्षण किया गया वातावरण
| | विवरण |
|---|---|
| **OS** | Windows 11 25H2 (Build 26300.8155) |
| **आर्किटेक्चर** | ARM64 |
| **AIXHost.exe** | v2126.7602.0.0 |
| **विशेषाधिकार** | मानक उपयोगकर्ता (मध्यम अखंडता, कोई एलिवेशन नहीं) |
---
## पिछला कार्य
- [TotalRecall](https://github.com/xaitax/TotalRecall) (जून 2024), पूर्व-एन्क्रिप्शन Recall के लिए मूल Python टूल
- [केइविन ब्यूमोंट का विश्लेषण](https://doublepulsar.com/recall-stealing-everything-youve-ever-typed-or-viewed-on-your-own-windows-pc-is-now-possible-da3e12e9465e), वह शोध जिसने यह सब शुरू किया
## आभार
परीक्षण और सत्यापन के लिए [Jeff McJunkin](https://x.com/jeffmcjunkin) और [Kevin Beaumont](https://cyberplace.social/@GossiTheDog) का धन्यवाद।
---
**Alexander Hagenah ([@xaitax](https://x.com/xaitax))**
SoftwareBitmapISoftwareBitmapNativeQueryInterfaceGetData(IID_IWICBitmap)IWICBitmapEncoderContextEngine2.TryGetMemoryEntityDetailsForIdAsync() (स्लॉट 8) एंटिटी विवरण लौटाता है। IMemoryEntityDetails पर QI OcrLines (स्लॉट 7) के लिए, IMemoryEntityDetails2 NER टेक्स्ट एंटिटी (लोग, ईमेल, पते) के लिए, और IMemoryEntityDetails4 AI गतिविधि विवरण के लिएPeekMessage/DispatchMessage लूप) और किसी भी एंटिटी का पुनर्प्रयास करता है जो उपलब्ध नहीं थी। प्रत्येक दौर में आमतौर पर ~12 अतिरिक्त एंटिटी मिलती हैं। 10 पुनर्प्रयास दौर तक।| डेटा | स्रोत | इसमें क्या है |
|---|
| स्क्रीनशॉट | TryGetBitmapCaptureAsync | आपकी पूरी स्क्रीन का पूर्ण-रिज़ॉल्यूशन PNG |
| आकार बदला गया स्क्रीनशॉट | TryGetBitmapCaptureAsync(Size, Mode) | कॉन्फ़िगर करने योग्य इंटरपोलेशन के साथ किसी भी अनुरोधित रिज़ॉल्यूशन पर स्क्रीनशॉट |
| थंबनेल | TryGetBitmapCaptureThumbnailAsync | कम-रिज़ॉल्यूशन पूर्वावलोकन छवि |
| OCR टेक्स्ट | OcrText (Details3) | स्क्रीन पर दिखाई देने वाली हर चीज़ का पूर्ण संयोजित OCR |
| OCR पंक्तियाँ | OcrLines (Details1) | अलग-अलग स्ट्रिंग के रूप में व्यक्तिगत OCR पंक्तियाँ |
| OCR शब्द | OcrWord struct | पिक्सेल-सटीक बाउंडिंग बॉक्स (RectInt32) के साथ हर एक शब्द |
| विंडो शीर्षक | get_Title | सक्रिय विंडो का शीर्षक बार टेक्स्ट |
| एप्लिकेशन | get_AppDisplayName | कौन सा ऐप फोकस में था (Chrome, Outlook, Terminal, ...) |
| ऐप मॉडल ID | get_AppUserModelId | UWP/Win32 एप्लिकेशन पहचान स्ट्रिंग |
| प्रक्रिया पथ | get_ProcessPath | पूर्ण निष्पादन योग्य पथ (C:\Program Files\...\chrome.exe) |
| ऐप आइकन | IMemoryEntity2.IconUri | एप्लिकेशन के आइकन का पथ |
| URL | get_WebUrl | ब्राउज़र एड्रेस बार में पूरा URL |
| डोमेन | get_WebDomain | वेबसाइट डोमेन |
| फ़ेविकॉन | get_WebIconUri | सक्रिय वेबसाइट के लिए फ़ेविकॉन URL |
| फ़ाइल पथ | get_FileUri | सक्रिय दस्तावेज़ या फ़ाइल पथ |
| विंडो स्थिति | get_WindowBounds | पिक्सेल-सटीक स्क्रीन निर्देशांक: X, Y, चौड़ाई, ऊँचाई |
| टाइमस्टैंप | get_Timestamp | सटीक कैप्चर समय (100-नैनोसेकंड सटीकता) |
| ऐप निवास समय | IMemoryEntity3 | आपने प्रत्येक एप्लिकेशन में कितना समय बिताया (मिलीसेकंड) |
| वेब निवास समय | IMemoryEntity3 | आपने प्रत्येक वेबसाइट पर कितना समय बिताया (मिलीसेकंड) |
| संवेदनशीलता लेबल | IMemoryEntity5 | Microsoft Purview/DLP वर्गीकरण: नाम, रंग, टूलटिप |
| उपयोगकर्ता गतिविधि ID | IMemoryEntity6 | Windows टाइमलाइन गतिविधि सहसंबंध ID |
| पुनर्स्थापना क्षमता | IMemoryEntity2 | बिटमास्क: ऐप को पुनः लॉन्च कर सकता है (0x1), URL (0x2), फ़ाइल (0x4), URI (0x8), टाइमलाइन (0x10) |
| संदर्भ पुनर्स्थापना | TryRestoreContextAsync | किसी भी कैप्चर से सटीक ऐप, पेज या दस्तावेज़ को पुनः खोलें |
DomainUserTagOrganizationProductAddressLocationDateTimeEventDurationMemoryDscSensitivityLabelWebVideoMeetingChatMailingPackageTextRatioSkipTopicsAnyText, Image, Table, Container, Menu, ToolBar, AddressBar, Toolpane, TabBar, TitleBar। प्रत्येक में पिक्सेल-सटीक बाउंडिंग बॉक्स और एम्बेडेड OCR टेक्स्ट।L1Description (AI-जनित गद्य सारांश कि आप क्या कर रहे थे), L1Activity (वर्गीकृत: ब्राउज़िंग, कोडिंग, लेखन, ईमेल पढ़ना), L1Application (AI-वर्गीकृत एप्लिकेशन संदर्भ)।Meeting (कॉन्फ्रेंस कॉल), Chat (मैसेजिंग), WebVideo (वीडियो प्लेबैक), MailingPackage (ईमेल/न्यूज़लेटर्स)। कई कैप्चर को तार्किक गतिविधि सत्रों में समूहित करता है।UserActivity, KMeansCluster, LobeTopicCluster, ApplicationDwellTime, WebsiteDwellTime, ClipboardImageCopied, Topic।IAutomatedCaptureController6 इंटरफ़ेस पर IsContentFilteringEnabled के माध्यम से नियंत्रित की जाती है।