
وحدة باورشيل مخصصة لهندسة عكسية
تفكيك الكود الأصلي والمُدار.
Get-CSDisassemblyيفكك مصفوفة بايت باستخدام إطار تفكيك Capstone Engine.
Get-ILDisassemblyيفكك مصفوفة بايت MSIL الخام الممررة من كائن MethodInfo بطريقة مشابهة لـ Ildasm.
أدوات مفيدة عند إجراء تحليل البرامج الضارة.
New-FunctionDelegateيوفر غلافًا قابلًا للتنفيذ لدالة X86 أو X86_64.
Invoke-LoadLibraryيقوم بتحميل DLL في عملية PowerShell الحالية.
New-DllExportFunctionينشئ مفوض غلاف قابل للتنفيذ حول دالة غير مُدارة ومُصدّرة.
Get-HostsFileيحلل ملف HOSTS.
New-HostsFileEntryاستبدال أو إضافة إدخال إلى ملف HOSTS.
Remove-HostsFileEntryإزالة إدخال أو سلسلة من الإدخالات من ملف HOSTS.
Get-AssemblyStringsإخراج جميع السلاسل من ملف تنفيذي .NET.
Get-AssemblyResourcesاستخراج الموارد المُدارة من تجميع .NET
Remove-AssemblySuppressIldasmAttributeيزيل سمة SuppressIldasmAttribute من تجميع .NET.
Get-AssemblyImplementedMethodsيُرجع جميع الطرق في تجميع تم تنفيذها في MSIL.
فحص وتحليل ذاكرة العملية
Get-ProcessStringsيُخرج جميع السلاسل القابلة للطباعة من ذاكرة وضع المستخدم لعملية.
Get-VirtualMemoryInfoغلاف لـ kernel32!VirtualQueryEx
Get-ProcessMemoryInfoاسترداد معلومات الذاكرة الظاهرية لكل مجموعة فريدة من الصفحات في ذاكرة المستخدم. تشبه هذه الدالة أمر !vadump في WinDbg.
Get-StructFromMemoryينقل البيانات من كتلة ذاكرة غير مُدارة في عملية عشوائية إلى كائن مُدار مُخصص حديثًا من النوع المحدد.
تحليل تنسيقات الملفات والهياكل في الذاكرة.
Get-PEمحلل PE على القرص وفي الذاكرة ومُفرغ عملية.
Find-ProcessPEsيجد الملفات التنفيذية المحمولة في الذاكرة بغض النظر عما إذا تم تحميلها بطريقة شرعية أم لا.
Get-LibSymbolsيعرض معلومات الرموز من ملفات LIB في Windows.
Get-ObjDumpيعرض معلومات حول ملفات الكائنات (OBJ) في Windows.
الحصول على وتحليل معلومات نظام Windows منخفضة المستوى.
Get-NtSystemInformationأداة تستدعي وتحلل مخرجات دالة ntdll!NtQuerySystemInformation. يمكن استخدام هذه الأداة للاستعلام عن معلومات نظام التشغيل الداخلية التي لا تكون مرئية للمستخدم عادةً.
Get-PEBيُرجع كتلة بيئة العملية (PEB) لعملية.
Register-ProcessModuleTraceيبدأ تتبعًا لوحدات العملية المحملة
Get-ProcessModuleTraceيعرض وحدات العملية التي تم تحميلها منذ استدعاء Register-ProcessModuleTrace
Unregister-ProcessModuleTraceيوقف تتبع وحدة العملية الجاري
Get-SystemInfoغلاف لـ kernel32!GetSystemInfo
دوال مساعدة متنوعة
Get-Memberدالة وكيل تُستخدم لتوسيع الأمر cmdlet المدمج Get-Member. تضيف المعلمة '-Private' مما يسمح لك بعرض أعضاء .NET غير العامة
Get-Stringsيُفرغ السلاسل من الملفات في كل من Unicode و Ascii. يكرر هذا الأمر cmdlet وظيفة strings.exe من Sysinternals.
ConvertTo-Stringيحول بايتات الملف إلى سلسلة لها تطابق واحد لواحد مع البايتات الأصلية للملف. ConvertTo-String مفيد لإجراء التعبيرات العادية الثنائية.
Get-Entropyيحسب الإنتروبيا لملف أو مصفوفة بايت.
المكتبات المطلوبة من قبل بعض دوال الهندسة العكسية.
Capstoneربط C# لمحرك التفكيك Capstone.
De4dotمكتبة قوية لإزالة التشويش .NET وتحليل PE .NET.
PSReflectوحدة تُستخدم لتعريف التعدادات والهياكل ودوال Win32 في الذاكرة بسهولة.
Formattersملفات ps1xml المستخدمة لتنسيق مخرجات دوال PowerShellArsenal المختلفة.
وحدة PowerShellArsenal وجميع البرامج النصية الفردية تخضع لترخيص BSD 3-Clause ما لم يُذكر خلاف ذلك صراحةً.
ارجع إلى المساعدة القائمة على التعليقات في كل برنامج نصي للحصول على معلومات استخدام مفصلة.
لتثبيت هذه الوحدة، ضع مجلد PowerShellArsenal بأكمله في أحد أدلة الوحدات الخاصة بك. مسارات وحدات PowerShell الافتراضية مدرجة في متغير البيئة $Env:PSModulePath.
مسار الوحدة الافتراضي لكل مستخدم هو: "$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules" مسار الوحدة الافتراضي على مستوى الكمبيوتر هو: "$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
لاستخدام الوحدة، اكتب Import-Module PowerShellArsenal
لرؤية الأوامر المستوردة، اكتب Get-Command -Module PowerShellArsenal
إذا كنت تستخدم PowerShell v3 وتريد إزالة التحذير المزعج 'هل تريد حقًا تشغيل البرامج النصية التي تم تنزيلها من الإنترنت'، بمجرد وضع PowerShellArsenal في مسار الوحدة، قم بتشغيل السطر التالي:
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerShellArsenal) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
للحصول على مساعدة حول كل أمر فردي، Get-Help هو صديقك.
ملاحظة: تم تصميم جميع الأدوات الموجودة في هذه الوحدة بحيث يمكن تشغيلها بشكل فردي. إن تضمينها في وحدة يساعد ببساطة على زيادة قابلية النقل.
لجميع المساهمين والمساهمين المستقبليين في PowerShellArsenal، أطلب منك اتباع دليل الأسلوب هذا عند كتابة البرامج النصية/الوحدات الخاصة بك.
تجنب Write-Host بأي ثمن. دوال/أوامر cmdlet في PowerShell ليست أدوات سطر أوامر! لن يتم النظر في طلبات السحب التي تحتوي على كود يستخدم Write-Host. بدلاً من ذلك، يجب إخراج كائنات مخصصة. لمزيد من المعلومات حول إنشاء كائنات مخصصة، اقرأ هذه المقالات:
إذا كنت تريد عرض معلومات تصحيح الأخطاء ذات الصلة على الشاشة، استخدم Write-Verbose. يمكن للمستخدم دائمًا إضافة '-Verbose'.
قدم دائمًا مساعدة وصفية قائمة على التعليقات لكل برنامج نصي. أيضًا، تأكد من تضمين اسمك وترخيص BSD 3-Clause (ما لم تكن هناك ظروف مخففة تمنع تطبيق ترخيص BSD).
تأكد من أن جميع الدوال تتبع اتفاقية الفعل-الاسم الصحيحة في PowerShell. استخدم Get-Verb لسرد الأفعال الافتراضية المستخدمة في PowerShell. سيتم النظر في الاستثناءات للأفعال المدعومة على أساس كل حالة على حدة.
أفضل أن تكون أسماء المتغيرات مكتوبة بأحرف كبيرة وأن تكون وصفية قدر الإمكان.
قدم مسافات منطقية بين الكود الخاص بك. قم بمسافة بادئة للكود لجعله أكثر قابلية للقراءة.
إذا وجدت نفسك تكرر الكود، اكتب دالة.
تعامل مع جميع الأخطاء المتوقعة وقدم مخرجات ذات معنى. إذا كان لديك خطأ يجب أن يوقف تنفيذ البرنامج النصي، استخدم 'Throw'. إذا كان لديك خطأ لا يحتاج إلى إيقاف التنفيذ، استخدم Write-Error.
إذا كنت تكتب برنامجًا نصيًا يتفاعل مع Win32 API، حاول تجنب تجميع C# بشكل مضمن باستخدام Add-Type. حاول استخدام وحدة PSReflect إذا أمكن.
لا تستخدم مسارات مشفرة بجد. يجب أن يكون البرنامج النصي قابلًا للاستخدام فورًا دون تعديل. لا ينبغي لأي شخص تعديل الكود إلا إذا أراد ذلك.
التوافق مع PowerShell v2 مرغوب فيه بشدة.
استخدم المعلمات الموضعية واجعل المعلمات إلزامية عندما يكون ذلك منطقيًا. على سبيل المثال، أبحث عن شيء مثل ما يلي:
[Parameter(Position = 0, Mandatory = $True)]لا تستخدم أي أسماء مستعارة إلا إذا كان ذلك منطقيًا لتلقي إدخال الأنابيب. فهي تجعل الكود أكثر صعوبة في القراءة للأشخاص غير المألوفين باسم مستعار معين.
حاول ألا تدع الأوامر تستمر لفترة طويلة جدًا. على سبيل المثال، الأنبوب هو مكان طبيعي لفاصل الأسطر.
لا تفرط في استخدام التعليقات المضمنة. استخدمها فقط عندما تكون جوانب معينة من الكود قد تكون مربكة للقارئ.
بدلاً من استخدام Out-Null لقمع المخرجات غير المرغوب فيها/غير ذات الصلة، احفظ المخرجات غير المرغوب فيها في $null. يوفر ذلك تحسينًا طفيفًا في الأداء.
استخدم القيم الافتراضية للمعلمات الخاصة بك عندما يكون ذلك منطقيًا. من الناحية المثالية، تريد برنامجًا نصيًا يعمل دون الحاجة إلى أي معلمات.
اذكر صراحةً جميع التبعيات المطلوبة والاختيارية في المساعدة القائمة على التعليقات لدالتك. يجب أن توجد جميع تبعيات المكتبة في مجلد 'Lib'.
إذا قام برنامج نصي بإنشاء كائنات مخصصة معقدة، قم بتضمين ملف ps1xml يقوم بتنسيق مخرجات الكائن بشكل صحيح. يتم تخزين ملفات ps1xml في Lib\Formatters.