
Go में डिफेंसिव Office मैक्रो विश्लेषक: नमूने को निष्पादित किए बिना कमांड, PowerShell, शेलकोड और ड्रॉप किए गए पेलोड को पुनः प्राप्त करने के लिए VBA निकालता है, उसका डीऑब्फस्केट करता है और पूरी तरह से सिम्युलेटेड सैंडबॉक्स में उसका एमुलेशन करता है।
MaldocTrace, Go में लिखा गया, दुर्भावनापूर्ण Office दस्तावेज़ों के लिए एक रक्षात्मक विश्लेषक है। यह VBA और Excel 4.0 (XLM) मैक्रोज़ को निकालता है, अस्पष्ट (obfuscated) स्ट्रिंग्स को पुनर्निर्मित करता है, और पूरी तरह से सिम्युलेटेड वातावरण में मैक्रोज़ का अनुकरण (emulate) करता है। आउटपुट बताता है कि दस्तावेज़ क्या करेगा: वे कमांड जो यह चलाएगा, वे पेलोड जिन्हें यह डिकोड करेगा और वे फ़ाइलें जिन्हें यह ड्रॉप करेगा। इन सबका समर्थन उन साक्ष्यों से होता है जो उस मॉड्यूल, प्रक्रिया और पंक्ति (या शीट और सेल) की ओर इंगित करते हैं जिसने इसे उत्पन्न किया।
बिना किसी मैक्रो वाले दस्तावेज़ भी शामिल हैं। रिमोट टेम्पलेट इंजेक्शन, DDE फ़ील्ड, लिंक्ड और एम्बेडेड OLE ऑब्जेक्ट (RTF में Equation Editor एक्सप्लॉइट सहित), हाइपरलिंक्ड ल्यूर इमेज और VBA स्टॉम्पिंग को स्टैटिक फ़ाइंडिंग के रूप में रिपोर्ट किया जाता है।
.doc, .xls, .ppt), OOXML (.docx, .docm, .xlsx, .xlsm, .pptm), RTF और कच्चा VBA टेक्स्ट। इसमें MS-OVBA डीकंप्रेशन, UserForm नियंत्रण गुण, और ज़िप बम तथा विकृत कंटेनरों के विरुद्ध संसाधन सीमाएँ शामिल हैं।.xls (पार्स किए गए टोकन से डीकंपाइल किए गए BIFF8 सूत्र, MS-XLS फ़ंक्शन तालिकाओं का उपयोग करते हुए) और .xlsm से मैक्रो शीट्स, जिनमें छिपी और अत्यधिक छिपी शीट्स शामिल हैं;Auto_Open (कोई भी नाम जिसे Excel चलाएगा) से शुरू होता है। यह GOTO, RUN, IF, WHILE/FOR/NEXT, ON.TIME और RETURN का अनुसरण करता है, और FORMULA/FORMULA.FILL/SET.VALUE/SET.NAME लागू करता है, ताकि स्व-डिकोडिंग मैक्रो अपना वास्तविक कोड पुनर्निर्मित कर सकें;EXEC, CALL, REGISTER और उपनाम (URLDownloadToFileA, ShellExecuteA, WinExec, CreateProcessA) तथा FOPEN/FWRITE। एंटी-सैंडबॉक्स प्रोब्स (GET.WORKSPACE, GET.WINDOW, GET.CELL) को विश्वसनीय उत्तर मिलते हैं, जिन्हें सिम्युलेटेड के रूप में चिह्नित किया जाता है;attachedTemplate, RTF \*\template);ms-msdt (Follina) मोनिकर्स शामिल हैं;QUOTE-एन्कोडेड वाले भी शामिल हैं) और Excel DDE सूत्र तथा लिंक;\objdata, भ्रष्ट OLE1 हेडर), Equation Editor एक्सप्लॉइट डिटेक्शन के साथ: MTEF FONT ओवरफ़्लो (CVE-2017-11882 / CVE-2018-0802) और MATRIX ओवरफ़्लो (CVE-2018-0798), साथ ही उसके बाद आने वाले बाइट्स का निष्कर्षण;Sheets("x").Range("A1"), Cells(r, c)), दस्तावेज़ गुण (BuiltInDocumentProperties("Comments"), कस्टम गुण), दस्तावेज़ चर (ActiveDocument.Variables) और UserForm नियंत्रण (TextBox.Text, Label.Caption) सभी एम्युलेटेड मैक्रो के लिए उपलब्ध हैं।.docx से निकाला गया। ड्रॉपर्स अक्सर अपना पेलोड दस्तावेज़ बॉडी में छिपाते हैं और ActiveDocument.Paragraphs(n).Range.Text के माध्यम से उसे वापस पढ़ते हैं।ByRef पैरामीटर, नामित आर्ग्युमेंट, सशर्त कंपाइलेशन, लूप्स, एरेज़ और स्ट्रिंग बिल्ट-इन्स।Chr/StrReverse/Replace/कॉन्कैटिनेशन का कॉन्स्टेंट फोल्डिंग। प्रत्येक मान रिकॉर्ड करता है कि इसे कैसे पुनर्निर्मित किया गया (concatenation+Chr, StrReverse, ...)।WScript.Shell, Shell, WMI Win32_Process.Create (दोनों GetObject और CreateObject("winmgmts:..."))FileSystemObject, ADODB.Stream, XMLHTTP/WinHttpMSScriptControl.ScriptControlParagraphs, Range, Delete, SaveAs2Sheets, Worksheets, Range, Cells, Offset), जो XLM इंजन के साथ साझा है, और मैक्रो शीट्स में ExecuteExcel4Macro/Application.RunVarPtr पॉइंटर्स के साथ-EncodedCommand डिकोडिंग, URL निकालने से पहले 'ht'+'tp' कॉन्कैटिनेशन की स्टैटिक फोल्डिंग के साथMultiByteToWideChar(CP_UTF7) को पास किए गए UTF-7 शेलकोड बफ़र्सcertutil -decode, मैक्रो द्वारा लिखे गए डेटा से बनाए गए वर्चुअल फ़ाइल सिस्टम पर पुनरुत्पादितScriptControl.AddCode को पास की गई स्क्रिप्ट्स, जिन्हें कमांड लाइनों के बजाय स्क्रिप्ट पेलोड के रूप में रिपोर्ट किया जाता हैevent-3, command-1, payload-1) और स्रोत स्थान रखते हैं। द्वितीयक दृश्य बड़े ब्लॉब्स को दोहराने के बजाय किसी आइटम को उसकी ID से संदर्भित करते हैं।Windows, Linux और macOS (x64 और ARM64) के लिए पहले से बने बाइनरीज़ Releases पेज पर SHA-256 चेकसम के साथ उपलब्ध हैं। प्रत्येक रिलीज़ के नोट्स CHANGELOG.md से आते हैं।
Go 1.23+ आवश्यक है।
go build -o maldocTrace ./cmd/maldoctrace
Windows पर:
go build -o maldocTrace.exe ./cmd/maldoctrace
maldocTrace inspect <file>
maldocTrace extract <file> --out <dir> [--force]
maldocTrace analyze <file> [--format json|text|jsonl] [--timeout 30s] [--max-steps N]
[--input-format vba] [--show-strings] [--dump-payloads DIR]
maldocTrace analyze <dir> --recursive [--format jsonl] [--workers N]
maldocTrace version
| विकल्प | विवरण |
|---|---|
--format text | मानव-पठनीय रिपोर्ट (डिफ़ॉल्ट)। |
--format json | पूर्ण, संस्करणित JSON रिपोर्ट (स्कीमा 1.3.0)। इसमें सदैव संकेतक, निदान, डिकोड किए गए स्ट्रिंग्स और पूर्ण पेलोड सामग्री शामिल होती है। |
--format jsonl | प्रति पंक्ति एक JSON रिपोर्ट, --recursive के साथ बैच विश्लेषण के लिए। |
--show-strings | केवल टेक्स्ट प्रारूप। पुनर्निर्मित स्ट्रिंग्स को डुप्लिकेट हटाकर सूचीबद्ध करता है, प्रत्येक मॉड्यूल/प्रक्रिया/पंक्ति की प्रत्येक घटना और पुनर्निर्माण विधि के साथ। |
--dump-payloads DIR | डिकोड किए गए पेलोड और मैक्रो द्वारा छोड़ी गई फ़ाइलों को manifest.json के साथ DIR/<input-sha256>/ में लिखता है। फ़ाइलों को तटस्थ एक्सटेंशन (.bin, .txt) मिलते हैं, ताकि डबल-क्लिक पर कुछ भी न चल सके। मौजूदा फ़ाइलों को कभी अधिलेखित नहीं किया जाता। |
--input-format vba | एक सादा-पाठ VBA फ़ाइल का विश्लेषण करें। |
--timeout, --max-steps | प्रति-फ़ाइल समय बजट और इंटरप्रेटर चरण बजट। |
एग्ज़िट कोड: 0 सफलता (भले ही नमूना दुर्भावनापूर्ण हो), 1 विश्लेषण या आंतरिक त्रुटि, 2 उपयोग त्रुटि।
नीचे दी गई चार रिपोर्टें वास्तविक दुर्भावनापूर्ण दस्तावेज़ों से आती हैं और मुख्य पुनर्प्राप्ति पथ दिखाती हैं। लंबे ब्लॉब्स को … से छोटा किया गया है। पूर्ण मान JSON आउटपुट में हैं।
MultiByteToWideChar → EnumUILanguages)मैक्रो एक बाइट ऐरे को UTF-7 टेक्स्ट से भरता है और इसे MultiByteToWideChar(65000, …, VarPtr(buf(0)), …) के साथ RWX मेमोरी में कॉपी करता है। फिर यह मेमोरी को एक EnumUILanguages कॉलबैक के माध्यम से चलाता है। MaldocTrace VarPtr को ऐरे तक हल करता है, बफ़र को कैप्चर करता है और UTF-7 को स्थिर रूप से डिकोड करता है। परिणाम x64 शेलकोड है (90 55 48 89 e5 = nop; push rbp; mov rbp,rsp)।