
PowerShell मॉड्यूल जो .NET असेंबलियों में P/Invoke, Dynamic P/Invoke, और D/Invoke की स्वचालित पहचान के लिए है। अनमैनेज्ड API कॉल्स, MDTokens, और DnSpy बुकमार्क्स में एक्सपोर्ट स्थानों को मैलवेयर विश्लेषण के लिए प्रकट करता है।
Get-PDInvokeImports एक उपकरण (PowerShell मॉड्यूल) है जो असेंबली में P/Invoke, Dynamic P/Invoke और D/Invoke के उपयोग का स्वचालित पता लगाने में सक्षम है। यह उन सभी स्थानों को दिखाता है जहाँ से उन्हें संदर्भित किया जाता है और सभी को DnSpy_Bookmarks.xml में निर्यात करता है।
यह PS मॉड्यूल .NET असेंबलियों को रिवर्स करने के दौरान असेंबली में उपयोग किए गए अप्रबंधित API फ़ंक्शनों के कॉल को तेज़ी से प्रकट करने के लिए उपयोगी और सहायक हो सकता है। कभी-कभी मैलवेयर असेंबलियाँ जंक कोड से भरी होती हैं जहाँ मुख्य कार्यक्षमता सीधे WIN API या NTAPI कॉल द्वारा कार्यान्वित की जाती है।
Get-PDInvokeImports आपको तेज़ी से अवलोकन प्राप्त करने में सक्षम बनाता है कि असेंबली में कौन से P/Invoke, Dynamic P/Invoke और D/Invoke का उपयोग किया गया है - यह दिखाएगा कि कौन से फ़ंक्शन उपयोग किए गए हैं + MDTokens, वे कहाँ घोषित हैं, और कोड से वे सभी स्थान जहाँ उपयोग किए गए हैं।
यह कोड से संदर्भित P/Invoke, Dynamic P/Invoke और D/Invoke के सभी स्थानों को DnSpy Bookmarks.xml में निर्यात करने में सक्षम बनाता है।
उदाहरण: 1MB की असेंबली की कल्पना करें जो जंक कोड + CF अस्पष्टता से भरी हो जहाँ मुख्य कार्यक्षमता अप्रबंधित WinAPI\NTAPI कॉल के माध्यम से प्राप्त की जाती है।
यह PS मॉड्यूल PowerShell में लिखा गया है और Windows PowerShell (.NET Framework) और PowerShell Core (.NET, .NET Core पर आधारित) के साथ पूरी तरह से संगत है। यह असेंबली को पार्स करने के लिए dnlib और dnlib को लोड करने के लिए .NET रिफ्लेक्शन का उपयोग करता है। Dnlib .NET फ्रेमवर्क और .NET स्टैंडर्ड के लिए उपलब्ध है - इसका सीधा अर्थ है कि कोई व्यक्ति Windows और Linux OS पर dnlib के आधार पर इस PS मॉड्यूल का उपयोग कर सकता है।
बहुत संक्षेप में, ये संभावित कार्यान्वयन हैं जिनके द्वारा कोई प्रबंधित कोड से अप्रबंधित कोड को कॉल कर सकता है (सरलीकृत - .NET से सीधे WinAPI/NTAPI कॉल करने के लिए उपयोग किया जा सकता है)
उनमें से कुछ को लागू करना आसान है, कुछ AV डिटेक्शन और हुकिंग से बचने में बेहतर हैं।
अधिक जानकारी:
P/Invoke -
[PInvoke]
D/Invoke - [DInvoke]
Dynamic P/Invoke - [Dynamic
PInvoke]
[Releases] में निर्दिष्ट प्लेटफ़ॉर्म के लिए पहले से संकलित dnlib + स्क्रिप्ट Get-PDInvokeImports.ps1 शामिल हैं।
Windows – [release] डाउनलोड करें (Windows PowerShell या PowerShell Core से उपयोग करें)
Linux – [release] डाउनलोड करें (PowerShell Core से उपयोग करें)
यदि आवश्यक हो - स्वयं dnlib संकलित करें (Windows – .NET Framework, Linux-netstandard)
अनिवार्य पैरामीटर।
स्कैन करने के लिए असेंबली पथ निर्दिष्ट करता है।
वैकल्पिक पैरामीटर।
dnlib.dll का सिस्टम पथ।
यदि PowerShell dnlib.dll के स्थान से चल रहा है - इस पैरामीटर को अनदेखा किया जा सकता है अन्यथा इस पैरामीटर को निर्दिष्ट करें।
वैकल्पिक पैरामीटर।
कोड से संदर्भित सभी पाए गए P/Invoke, Dynamic P/Invoke और D/Invoke स्थानों को DnSpy Bookmarks XML फ़ाइल (DnSpy_Bookmarks.xml) में निर्यात करने के लिए उपयोग किया जाता है।
DnSpy-Analyze-UsedBy के समान (पूरे कोड में सभी PInvoke और DInvoke के उपयोग का अच्छा अवलोकन)
इसलिए इसे Bookmarks विंडो के माध्यम से DnSpy में आयात करना संभव है (DnSpy -> View -> Bookmarks -> Bookmark Window -> Import bookmarks from file -> DnSpy_Bookmarks.xml चुनें)
PS> Import-Module .\Get-PDInvokeImports.ps1
PS> Get-PDInvokeImports -PathToAssembly 'C:\testfiles\malware.exe'
PS> Get-PDInvokeImports -PathToAssembly .\malware.exe –ExportDnSpyBookmarks
PS> Get-PDInvokeImports -PathToAssembly 'C:\testfiles\malware.exe' -PathToDnlib "C:\dnlib.dll" –ExportDnSpyBookmarks




पता लगाना कुछ सामान्य अस्पष्टताओं को हराने के लिए पर्याप्त मजबूत होना चाहिए।
SmartAssembly, ConfuserEx आदि जैसे सबसे सामान्य ऑफस्केटर्स के साथ परीक्षण किया गया।
पता लगाने के आंतरिक: P/Invoke का पता PinvokeImpl विशेषता के माध्यम से लगाया जाता है जो हमेशा प्रस्तुत होना चाहिए।
D/Invoke का पता "UnmanagedFunctionPointerAttribute" विशेषता और "CallingConvention" के माध्यम से लगाया जाता है (यह कुछ परिस्थितियों में पराजित हो सकता है - लेकिन मैं इसे RedTeam की कल्पना पर छोड़ता हूं (मैं वैसे भी आपको हरा दूंगा))
डायनामिक P/Invoke का पता DefinePInvokeMethod() को संदर्भित करने वाली methodX और methodX को संदर्भित करने वाली सभी methodY खोजने पर आधारित है।
[dnlib] (.NET मेटाडेटा रीडर/राइटर जो ऑबफस्केटेड असेंबलियों को भी पढ़ सकता है)
[DnSpyEx - वैकल्पिक]