Formbook का रिवर्स इंजीनियरिंग विश्लेषण, एक इन्फो-स्टीलर जो .NET assembly manipulation और XOR decryption का उपयोग करता है। x32dbg के माध्यम से पूरा payload निकाला गया, जिसमें XOR decryption loop, CLR initialization, SQLExpress decoy, और keylogger/clipboard APIs शामिल हैं।
x32dbg मेमोरी डंप से पता चलता है कि Formbook अपने कॉन्फ़िगरेशन डेटा को डिक्रिप्ट करता है और NtAllocateVirtualMemory का उपयोग करके इसके लिए मेमोरी आवंटित करता है।
NtAllocateVirtualMemory – डिक्रिप्टेड पेलोड के लिए मेमोरी आवंटित करता है।mov edx, dword ptr ds:[esi+1C] – ESI रजिस्टर से एन्क्रिप्टेड डेटा का आकार प्राप्त करता है।push 0x1000 – मेमोरी आवंटित करने के लिए MEM_COMMIT का उपयोग करता है।push 0 – आवंटन प्रकार या सुरक्षा फ़्लैग निर्दिष्ट करता है।mov edx, dword ptr ds:[esi+4] – एक अन्य कॉन्फ़िगरेशन मान प्राप्त करता है।lea ecx, [ebp-4] – एक स्थानीय वेरिएबल के लिए पॉइंटर लोड करता है।test ecx, ecx – जाँचता है कि पॉइंटर मान्य है या नहीं।mov ecx, [esi+1C] – एन्क्रिप्टेड डेटा का आकार फिर से प्राप्त करता है।push 0x1000 – MEM_COMMIT फ़्लैग को दोहराता है।push 0 – आवंटन फ़्लैग को दोहराता है।ConnectionStrings – C2 पतों के लिए .NET कॉन्फ़िगरेशन कुंजी।system.data, DbProviderFactories – .NET कॉन्फ़िगरेशन अनुभाग (संभवतः डिकॉय)।system.serviceModel – .NET सेवा मॉडल अनुभाग।<DbProviderFactories /> – खाली XML एलिमेंट (डिकॉय)।ConnectionStrings में संभवतः C2 URL होते हैं।
NtAllocateVirtualMemory और ConnectionStrings डिक्रिप्शन दिखाने वाला x32dbg दृश्य।
यह x32dbg दृश्य से पता चलता है कि Formbook अपने पेलोड को निष्पादित करने के लिए .NET असेंबली मैनिपुलेशन, XOR-आधारित डिक्रिप्शन और CLR (Common Language Runtime) इनिशियलाइज़ेशन का उपयोग करता है।
xor eax, eax – EAX को साफ़ करता है, जो XOR-आधारित डिक्रिप्शन को दर्शाता है।call 0x6C6E7F60 – एक डिक्रिप्शन या प्रोसेसिंग फ़ंक्शन को कॉल करता है।call 0x6C6EE8B0 – एक अन्य प्रोसेसिंग फ़ंक्शन को कॉल करता है।DllCanUnloadNowInternal – .NET असेंबली लोडिंग/अनलोडिंग को प्रबंधित करता है।PublicKeyToken=31bf3856ad364e35 – एक Microsoft असेंबली का रूप धारण करता है।system.serviceModel – .NET सेवा मॉडल कॉन्फ़िगरेशन (C2 संचार)।System.Web – .NET वेब कॉन्फ़िगरेशन (HTTP-आधारित C2)।clr.NGenCreateNGenWorker – एक .NET Native Image Generator वर्कर बनाता है।clr.GetCLRFunction – CLR फ़ंक्शन प्राप्त करता है।return to clr.Initialize – .NET रनटाइम को इनिशियलाइज़ करता है।xor eax, eax और उसके बाद के call फ़ंक्शन XOR-आधारित डिक्रिप्शन की पुष्टि करते हैं।PublicKeyToken इसे Microsoft असेंबली जैसा दिखाता है।system.serviceModel और System.Web C2 सेटिंग्स संग्रहीत करते हैं।
XOR डिक्रिप्शन, DllCanUnloadNowInternal, और CLR इनिशियलाइज़ेशन दिखाने वाला x32dbg दृश्य।
यह x32dbg दृश्य से पता चलता है कि Formbook अपने पेलोड को निष्पादित करने के लिए SQLExpress-संबंधित स्ट्रिंग को डिकॉय के रूप में उपयोग करता है और .NET CLR को इनिशियलाइज़ करता है।
L"ce=..\SQLEXPR" – एक डिकॉय स्ट्रिंग, जिसका SQL डेटा चोरी से कोई संबंध नहीं है। इसका उपयोग मैलवेयर को एक वैध SQL Server Express घटक जैसा दिखाने के लिए किया जाता हैclr.InitializeFusion – .NET Fusion असेंबली लोडर को इनिशियलाइज़ करता है, जिसका उपयोग .NET पेलोड को मेमोरी में लोड करने के लिए किया जाता है।clr.GetCLRFunction – मैनेज्ड कोड को निष्पादित करने के लिए CLR फ़ंक्शन प्राप्त करता है।clr.NGenCreateNGenWorker – एक .NET Native Image Generator वर्कर बनाता है, जिससे पेलोड JIT कंपाइलेशन के बिना चल सकता है।return to clr.InitializeFusion+1751 – CLR इनिशियलाइज़ेशन रूटीन पर वापस लौटता है।SQLEXPR स्ट्रिंग सुरक्षा उपकरणों द्वारा पहचान से बचने के लिए एक डिकॉय है।
L"ce=..\SQLEXPR", clr.InitializeFusion, और CLR फ़ंक्शन दिखाने वाला x32dbg दृश्य।
यह x32dbg दृश्य Formbook के पेलोड की शुरुआत को दर्शाता है, जो मानक PE DOS स्टब संदेश के बाद स्थित है। मैलवेयर अपने पेलोड को मेमोरी में डिक्रिप्ट करने के लिए एक XOR डिक्रिप्शन लूप का उपयोग करता है।
This program cannot be run in DOS mode – मानक PE DOS स्टब संदेश।xor dword ptr ds:[edi], eax – EDI पर डेटा को EAX के साथ XOR करता है (डिक्रिप्शन)।mov al, byte ptr ds:[edi+1] – EDI+1 से एक बाइट को AL में लोड करता है।xor al, byte ptr ds:[edx+1] – AL को EDX+1 पर बाइट के साथ XOR करता है (डिक्रिप्शन कुंजी)।mov byte ptr ds:[edi], al – डिक्रिप्टेड बाइट को वापस EDI में लिखता है।call ntdll.77DDE45C – RtlIsCurrentThreadAttachExempt को कॉल करता है (एंटी-डीबग)।cmp dword ptr ds:[esi+4], 0 – जाँचता है कि काउंटर (ESI+4) शून्य है या नहीं।sub dword ptr ds:[esi+4], eax – काउंटर को घटाता है।test edx, edx – EDX को शून्य के लिए परीक्षण करता है।jne ntdll.77DDF9F4 – यदि शून्य नहीं है तो वापस लूप करता है (डिक्रिप्शन लूप)।RtlIsCurrentThreadAttachExempt को कॉल करता है।
मानक PE DOS स्टब संदेश के बाद XOR डिक्रिप्शन लूप दिखाने वाला x32dbg दृश्य।
निकाले गए पेलोड के Binary Ninja विश्लेषण से Formbook द्वारा keylogging, clipboard hijacking, और privilege escalation के लिए उपयोग किए जाने वाले API की एक व्यापक सूची का पता चलता है।
SetClipboardData, GetClipboardData – clipboard डेटा चुराता और बदलता है।SetWindowsHookExW, SetWindowsHookExA – कीबोर्ड हुक इंस्टॉल करता है।NtSetInformationProcess, NtCreateThreadEx, NtTerminateProcess.NtAdjustPrivilegesToken – टोकन विशेषाधिकारों को समायोजित करता है।NtShutdownSystem, SystemParametersInfoA/W.MsInstallProductW/A – persistence के लिए एक उत्पाद इंस्टॉल करता है।CreateProcessInternalW – एक नई प्रक्रिया बनाता है।