
यह उपकरण 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) एक SoftwareBitmap लौटाता है। ISoftwareBitmapNative पर QueryInterface, WIC बिटमैप प्राप्त करने के लिए GetData(IID_IWICBitmap) कॉल करें, IWICBitmapEncoder के माध्यम से PNG के रूप में एनकोड करेंContextEngine2.TryGetMemoryEntityDetailsForIdAsync() (स्लॉट 8) एंटिटी विवरण लौटाता है। IMemoryEntityDetails पर QI OcrLines (स्लॉट 7) के लिए, IMemoryEntityDetails2 NER टेक्स्ट एंटिटी (लोग, ईमेल, पते) के लिए, और IMemoryEntityDetails4 AI गतिविधि विवरण के लिएPeekMessage/DispatchMessage लूप) और किसी भी एंटिटी का पुनर्प्रयास करता है जो उपलब्ध नहीं थी। प्रत्येक दौर में आमतौर पर ~12 अतिरिक्त एंटिटी मिलती हैं। 10 पुनर्प्रयास दौर तक।प्रत्येक कॉल __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 के माध्यम से बिना प्रमाणीकरण के पढ़ने योग्य हैं।