
وحدة PowerShell للكشف التلقائي عن P/Invoke وDynamic P/Invoke وD/Invoke في تجميعات .NET. تكشف عن استدعاءات API غير المُدارة وMDTokens ومواقع التصدير إلى إشارات DnSpy لتحليل البرمجيات الخبيثة.
Get-PDInvokeImports هي أداة (وحدة PowerShell) قادرة على إجراء الكشف التلقائي عن استخدام P/Invoke و Dynamic P/Invoke و D/Invoke في التجميع (assembly). تعرض جميع المواقع التي يتم الرجوع إليها منها وتصدر الكل إلى DnSpy_Bookmarks.xml
يمكن أن تكون وحدة PS هذه مفيدة أثناء فك تجميع (reversing) تجميعات .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 لتحليل التجميع وانعكاس .NET لتحميل dnlib. dnlib متاح لـ .NET framework و .NET standard - مما يعني ببساطة أنه يمكن استخدام وحدة PS هذه اعتمادًا على dnlib على Windows وأيضًا على Linux.
باختصار شديد، هذه هي تطبيقات محتملة لكيفية استدعاء كود غير مُدار من كود مُدار (مبسط – يمكن استخدامها لاستدعاء WinAPI/NTAPI مباشرة من .NET)
بعضها أسهل في التنفيذ، وبعضها أفضل في تجنب اكتشاف برامج مكافحة الفيروسات والاختراق (hooking).
مزيد من المعلومات:
P/Invoke - [PInvoke] D/Invoke - Dynamic P/Invoke -
تحتوي [الإصدارات] على dnlib مُجمّع مسبقًا للنظام الأساسي المحدد + البرنامج النصي Get-PDInvokeImports.ps1.
Windows – قم بتنزيل [الإصدار] (استخدم من Windows PowerShell أو PowerShell Core)
Linux – قم بتنزيل [الإصدار] (استخدم من PowerShell Core)
إذا لزم الأمر - قم بتجميع dnlib بنفسك (Windows – .NET Framework, Linux-netstandard)
معلمة إجبارية.
تحدد مسار التجميع (assembly) لمسحه ضوئيًا.
معلمة اختيارية.
مسار النظام لـ dnlib.dll.
إذا كان PowerShell يعمل من موقع dnlib.dll - يمكن تجاهل هذه المعلمة، وإلا قم بتحديد هذه المعلمة.
معلمة اختيارية.
تُستخدم لتصدير جميع مواقع P/Invoke و Dynamic P/Invoke و D/Invoke المُكتشفة المُشار إليها من الكود إلى ملف DnSpy Bookmarks XML (DnSpy_Bookmarks.xml)
مشابه لـ DnSpy-Analyze-UsedBy (نظرة عامة جيدة على مكان استخدام جميع PInvoke و DInvoke في الكود بأكمله)
لذلك من الممكن استيرادها إلى DnSpy عبر نافذة العلامات المرجعية (Bookmarks) (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) (سأهزمك على أي حال))
يعتمد اكتشاف Dynamic P/Invoke على إيجاد methodX التي تشير إلى DefinePInvokeMethod() + جميع methodY التي تشير إلى methodX.
[dnlib] (قارئ/كاتب بيانات وصفية لـ .NET يمكنه أيضًا قراءة التجميعات المشوشة)
[DnSpyEx - اختياري]