
रिवर्स इंजीनियरिंग के लिए समर्पित एक PowerShell मॉड्यूल
नेटिव और प्रबंधित कोड को डिसअसेंबल करें।
Get-CSDisassemblyCapstone Engine डिसअसेंबली फ्रेमवर्क का उपयोग करके बाइट ऐरे को डिसअसेंबल करता है।
Get-ILDisassemblyMethodInfo ऑब्जेक्ट से पास किए गए रॉ MSIL बाइट ऐरे को Ildasm के समान तरीके से डिसअसेंबल करता है।
मैलवेयर विश्लेषण करते समय उपयोगी उपकरण।
New-FunctionDelegateX86 या X86_64 फ़ंक्शन के लिए एक निष्पादन योग्य रैपर प्रदान करता है।
Invoke-LoadLibraryवर्तमान PowerShell प्रक्रिया में एक DLL लोड करता है।
New-DllExportFunctionएक अप्रबंधित, निर्यातित फ़ंक्शन के चारों ओर एक निष्पादन योग्य रैपर डेलिगेट बनाता है।
Get-HostsFileHOSTS फ़ाइल को पार्स करता है।
New-HostsFileEntryHOSTS फ़ाइल में एक एंट्री को बदलें या जोड़ें।
Remove-HostsFileEntryHOSTS फ़ाइल से एक या श्रृंखला एंट्री को हटाएं।
Get-AssemblyStrings.NET निष्पादन योग्य से सभी स्ट्रिंग्स आउटपुट करता है।
Get-AssemblyResources.NET असेंबली से प्रबंधित संसाधनों को निकालें।
Remove-AssemblySuppressIldasmAttribute.NET असेंबली से SuppressIldasmAttribute विशेषता को हटाता है।
Get-AssemblyImplementedMethodsअसेंबली में उन सभी विधियों को लौटाता है जो MSIL में कार्यान्वित हैं।
प्रक्रिया मेमोरी का निरीक्षण और विश्लेषण करें
Get-ProcessStringsकिसी प्रक्रिया की उपयोगकर्ता-मोड मेमोरी से सभी मुद्रण योग्य स्ट्रिंग्स आउटपुट करता है।
Get-VirtualMemoryInfokernel32!VirtualQueryEx के लिए एक रैपर
Get-ProcessMemoryInfoउपयोगकर्ता मेमोरी में पृष्ठों के प्रत्येक अद्वितीय सेट के लिए वर्चुअल मेमोरी जानकारी प्राप्त करें। यह फ़ंक्शन !vadump WinDbg कमांड के समान है।
Get-StructFromMemoryकिसी मनमानी प्रक्रिया में अप्रबंधित मेमोरी ब्लॉक से निर्दिष्ट प्रकार के नव आवंटित प्रबंधित ऑब्जेक्ट में डेटा मार्शल करता है।
फ़ाइल फ़ॉर्मेट और मेमोरी-इन संरचनाओं को पार्स करें।
Get-PEएक ऑन-डिस्क और इन-मेमोरी PE पार्सर और प्रक्रिया डम्पर।
Find-ProcessPEsमेमोरी में पोर्टेबल निष्पादन योग्य फ़ाइलों को ढूंढता है, चाहे वे वैध तरीके से लोड की गई हों या नहीं।
Get-LibSymbolsWindows LIB फ़ाइलों से प्रतीक जानकारी प्रदर्शित करता है।
Get-ObjDumpWindows ऑब्जेक्ट (OBJ) फ़ाइलों के बारे में जानकारी प्रदर्शित करता है।
निम्न-स्तरीय Windows OS जानकारी प्राप्त करें और उसका विश्लेषण करें।
Get-NtSystemInformationएक उपयोगिता जो ntdll!NtQuerySystemInformation फ़ंक्शन के आउटपुट को कॉल और पार्स करती है। इस उपयोगिता का उपयोग आंतरिक OS जानकारी क्वेरी करने के लिए किया जा सकता है जो आमतौर पर उपयोगकर्ता को दिखाई नहीं देती है।
Get-PEBकिसी प्रक्रिया का प्रक्रिया पर्यावरण ब्लॉक (PEB) लौटाता है।
Register-ProcessModuleTraceलोड किए गए प्रक्रिया मॉड्यूल का एक ट्रेस शुरू करता है
Get-ProcessModuleTraceRegister-ProcessModuleTrace कॉल के बाद से लोड किए गए प्रक्रिया मॉड्यूल को प्रदर्शित करता है
Unregister-ProcessModuleTraceचल रहे प्रक्रिया मॉड्यूल ट्रेस को रोकता है
Get-SystemInfokernel32!GetSystemInfo के लिए एक रैपर
विविध सहायक फ़ंक्शन
Get-Memberअंतर्निहित Get-Member cmdlet को विस्तारित करने के लिए उपयोग किया जाने वाला एक प्रॉक्सी फ़ंक्शन। यह '-Private' पैरामीटर जोड़ता है जो आपको गैर-सार्वजनिक .NET सदस्यों को प्रदर्शित करने की अनुमति देता है
Get-Stringsफ़ाइलों से यूनिकोड और Ascii दोनों में स्ट्रिंग्स डंप करता है। यह cmdlet Sysinternals के strings.exe की कार्यक्षमता को दोहराता है।
ConvertTo-Stringकिसी फ़ाइल के बाइट्स को एक स्ट्रिंग में परिवर्तित करता है जिसका फ़ाइल के मूल बाइट्स से 1-से-1 मैपिंग होता है। बाइनरी रेगुलर एक्सप्रेशन करने के लिए ConvertTo-String उपयोगी है।
Get-Entropyकिसी फ़ाइल या बाइट ऐरे की एंट्रॉपी की गणना करता है।
कुछ RE फ़ंक्शनों के लिए आवश्यक पुस्तकालय।
CapstoneCapstone डिसअसेंबली इंजन C# बाइंडिंग।
De4dotएक शक्तिशाली .NET डी-ऑबफस्केशन और .NET PE पार्सिंग लाइब्रेरी।
PSReflectएक मॉड्यूल जिसका उपयोग आसानी से इन-मेमोरी enums, structs और Win32 फ़ंक्शनों को परिभाषित करने के लिए किया जाता है।
Formattersps1xml फ़ाइलें जिनका उपयोग विभिन्न 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 का उपयोग किसी भी कीमत पर न करें। PowerShell फ़ंक्शन/cmdlet कमांड-लाइन उपयोगिताएँ नहीं हैं! Write-Host का उपयोग करने वाले कोड वाले पुल अनुरोधों पर विचार नहीं किया जाएगा। आपको इसके बजाय कस्टम ऑब्जेक्ट आउटपुट करना चाहिए। कस्टम ऑब्जेक्ट बनाने के बारे में अधिक जानकारी के लिए, ये लेख पढ़ें:
यदि आप स्क्रीन पर प्रासंगिक डिबगिंग जानकारी प्रदर्शित करना चाहते हैं, तो Write-Verbose का उपयोग करें। उपयोगकर्ता हमेशा '-Verbose' जोड़ सकता है।
हमेशा प्रत्येक स्क्रिप्ट के लिए वर्णनात्मक, टिप्पणी-आधारित सहायता प्रदान करें। साथ ही, अपना नाम और BSD 3-Clause लाइसेंस (जब तक कि ऐसी असाधारण परिस्थितियाँ न हों जो BSD लाइसेंस के आवेदन को रोकती हैं) शामिल करना सुनिश्चित करें।
सुनिश्चित करें कि सभी फ़ंक्शन उचित PowerShell क्रिया-संज्ञा समझौते का पालन करते हैं। PowerShell द्वारा उपयोग किए जाने वाले डिफ़ॉल्ट क्रियाओं को सूचीबद्ध करने के लिए Get-Verb का उपयोग करें। समर्थित क्रियाओं के अपवादों पर केस-दर-केस आधार पर विचार किया जाएगा।
मैं पसंद करता हूं कि चर नाम बड़े अक्षरों में हों और जितना संभव हो उतना वर्णनात्मक हों।
अपने कोड के बीच तार्किक स्थान प्रदान करें। अपने कोड को अधिक पठनीय बनाने के लिए इंडेंट करें।
यदि आप खुद को कोड दोहराते हुए पाते हैं, तो एक फ़ंक्शन लिखें।
सभी अनुमानित त्रुटियों को पकड़ें और सार्थक आउटपुट प्रदान करें। यदि आपके पास कोई त्रुटि है जिसे स्क्रिप्ट के निष्पादन को रोकना चाहिए, तो 'Throw' का उपयोग करें। यदि आपके पास कोई त्रुटि है जिसे निष्पादन को रोकने की आवश्यकता नहीं है, तो Write-Error का उपयोग करें।
यदि आप Win32 API के साथ इंटरफ़ेस करने वाली स्क्रिप्ट लिख रहे हैं, तो Add-Type के साथ C# को इनलाइन संकलित करने से बचने का प्रयास करें। यदि संभव हो, तो PSReflect मॉड्यूल का उपयोग करने का प्रयास करें।
हार्डकोडेड पथ का उपयोग न करें। एक स्क्रिप्ट बॉक्स से बाहर उपयोग करने योग्य होनी चाहिए। जब तक वे चाहें, किसी को कोड को संशोधित नहीं करना चाहिए।
PowerShell v2 संगतता अत्यधिक वांछनीय है।
पोजीशनल पैरामीटर का उपयोग करें और पैरामीटर को अनिवार्य बनाएं जब यह उपयुक्त हो। उदाहरण के लिए, मैं कुछ इस तरह की तलाश में हूं:
[Parameter(Position = 0, Mandatory = $True)]किसी भी उपनाम का उपयोग न करें जब तक कि पाइपलाइन इनपुट प्राप्त करने के लिए यह समझ में न आए। वे कोड को उन लोगों के लिए पढ़ना अधिक कठिन बनाते हैं जो किसी विशेष उपनाम से अपरिचित हैं।
कमांड को बहुत लंबा न चलने दें। उदाहरण के लिए, पाइपलाइन एक लाइन ब्रेक के लिए एक स्वाभाविक स्थान है।
इनलाइन टिप्पणियों के साथ अति न करें। उनका उपयोग केवल तभी करें जब कोड के कुछ पहलू पाठक को भ्रमित कर सकते हों।
अवांछित/अप्रासंगिक आउटपुट को दबाने के लिए Out-Null का उपयोग करने के बजाय, अवांछित आउटपुट को $null में सहेजें। ऐसा करने से थोड़ा प्रदर्शन सुधार होता है।
अपने पैरामीटर के लिए डिफ़ॉल्ट मानों का उपयोग करें जब यह उपयुक्त हो। आदर्श रूप से, आप एक ऐसी स्क्रिप्ट चाहते हैं जो बिना किसी पैरामीटर की आवश्यकता के काम करे।
अपने फ़ंक्शन के लिए टिप्पणी-आधारित सहायता में सभी आवश्यक और वैकल्पिक निर्भरताएँ स्पष्ट रूप से बताएं। सभी लाइब्रेरी निर्भरताएँ 'Lib' फ़ोल्डर में स्थित होनी चाहिए।
यदि कोई स्क्रिप्ट जटिल कस्टम ऑब्जेक्ट बनाती है, तो एक ps1xml फ़ाइल शामिल करें जो ऑब्जेक्ट के आउटपुट को ठीक से फ़ॉर्मेट करेगी। ps1xml फ़ाइलें Lib\Formatters में संग्रहीत की जाती हैं।