
Un Modulo PowerShell Dedicato al Reverse Engineering
Disassembla codice nativo e gestito.
Get-CSDisassemblyDisassembla un array di byte utilizzando il framework di disassemblaggio Capstone Engine.
Get-ILDisassemblyDisassembla un array di byte MSIL grezzo passato da un oggetto MethodInfo in modo simile a Ildasm.
Strumenti utili durante l'analisi di malware.
New-FunctionDelegateFornisce un wrapper eseguibile per una funzione X86 o X86_64.
Invoke-LoadLibraryCarica una DLL nel processo PowerShell corrente.
New-DllExportFunctionCrea un delegato wrapper eseguibile attorno a una funzione esportata non gestita.
Get-HostsFileAnalizza un file HOSTS.
New-HostsFileEntrySostituisce o aggiunge una voce a un file HOSTS.
Remove-HostsFileEntryRimuove una voce o una serie di voci da un file HOSTS.
Get-AssemblyStringsRestituisce tutte le stringhe da un eseguibile .NET.
Get-AssemblyResourcesEstrae le risorse gestite da un assembly .NET.
Remove-AssemblySuppressIldasmAttributeRimuove un attributo SuppressIldasmAttribute da un assembly .NET.
Get-AssemblyImplementedMethodsRestituisce tutti i metodi in un assembly che sono implementati in MSIL.
Ispeziona e analizza la memoria dei processi
Get-ProcessStringsRestituisce tutte le stringhe stampabili dalla memoria in modalità utente di un processo.
Get-VirtualMemoryInfoUn wrapper per kernel32!VirtualQueryEx
Get-ProcessMemoryInfoRecupera le informazioni sulla memoria virtuale per ogni insieme unico di pagine nella memoria utente. Questa funzione è simile al comando !vadump di WinDbg.
Get-StructFromMemoryMarshaling dei dati da un blocco di memoria non gestito in un processo arbitrario a un oggetto gestito appena allocato del tipo specificato.
Analizza formati di file e strutture in memoria.
Get-PEUn analizzatore PE su disco e in memoria e un dump del processo.
Find-ProcessPEsTrova eseguibili portatili in memoria indipendentemente dal fatto che siano stati caricati in modo legittimo.
Get-LibSymbolsMostra le informazioni simboliche dai file LIB di Windows.
Get-ObjDumpMostra informazioni sui file oggetto (OBJ) di Windows.
Ottieni e analizza informazioni di basso livello del sistema operativo Windows.
Get-NtSystemInformationUn'utilità che chiama e analizza l'output della funzione ntdll!NtQuerySystemInformation. Questa utility può essere utilizzata per interrogare informazioni interne del sistema operativo che normalmente non sono visibili all'utente.
Get-PEBRestituisce il blocco ambiente del processo (PEB) di un processo.
Register-ProcessModuleTraceAvvia una traccia dei moduli del processo caricati
Get-ProcessModuleTraceMostra i moduli del processo che sono stati caricati dalla chiamata a Register-ProcessModuleTrace
Unregister-ProcessModuleTraceFerma la traccia corrente dei moduli del processo
Get-SystemInfoUn wrapper per kernel32!GetSystemInfo
Funzioni helper varie
Get-MemberUna funzione proxy utilizzata per estendere il cmdlet Get-Member integrato. Aggiunge il parametro '-Private' che consente di visualizzare membri .NET non pubblici
Get-StringsEstrae stringhe da file sia in Unicode che in ASCII. Questo cmdlet replica la funzionalità di strings.exe di Sysinternals.
ConvertTo-StringConverte i byte di un file in una stringa che ha una mappatura 1:1 con i byte originali del file. ConvertTo-String è utile per eseguire espressioni regolari binarie.
Get-EntropyCalcola l'entropia di un file o di un array di byte.
Librerie richieste da alcune funzioni di RE.
CapstoneIl binding C# del motore di disassemblaggio Capstone.
De4dotUna potente libreria per la deoffuscazione .NET e l'analisi PE .NET.
PSReflectUn modulo utilizzato per definire facilmente enum, struct e funzioni Win32 in memoria.
FormattersFile ps1xml utilizzati per formattare l'output di varie funzioni di PowerShellArsenal.
Il modulo PowerShellArsenal e tutti gli script individuali sono sotto licenza BSD 3-Clause salvo diversa indicazione esplicita.
Fare riferimento alla guida basata sui commenti in ogni singolo script per informazioni dettagliate sull'utilizzo.
Per installare questo modulo, copiare l'intera cartella PowerShellArsenal in una delle directory dei moduli. I percorsi predefiniti dei moduli PowerShell sono elencati nella variabile d'ambiente $Env:PSModulePath.
Il percorso predefinito per utente è: "$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules" Il percorso predefinito a livello di computer è: "$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
Per utilizzare il modulo, digitare Import-Module PowerShellArsenal
Per vedere i comandi importati, digitare Get-Command -Module PowerShellArsenal
Se si utilizza PowerShell v3 e si desidera rimuovere il fastidioso avviso 'Do you really want to run scripts downloaded from the Internet', una volta inserito PowerShellArsenal nel percorso dei moduli, eseguire il seguente one-liner:
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerShellArsenal) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
Per aiuto su ogni singolo comando, Get-Help è vostro amico.
Nota: Gli strumenti contenuti in questo modulo sono stati tutti progettati in modo da poter essere eseguiti singolarmente. Includerli in un modulo serve semplicemente ad aumentare la portabilità.
Per tutti i collaboratori e futuri collaboratori di PowerShellArsenal, chiedo di seguire questa guida allo stile quando scrivete i vostri script/moduli.
Evitare Write-Host a tutti i costi. Le funzioni/cmdlet PowerShell non sono utility a riga di comando! Le richieste pull contenenti codice che utilizza Write-Host non verranno considerate. Dovreste invece restituire oggetti personalizzati. Per maggiori informazioni sulla creazione di oggetti personalizzati, leggete questi articoli:
Se si desidera visualizzare informazioni di debug rilevanti sullo schermo, utilizzare Write-Verbose. L'utente può sempre aggiungere '-Verbose'.
Fornire sempre una guida descrittiva basata su commenti per ogni script. Inoltre, assicurarsi di includere il proprio nome e una licenza BSD 3-Clause (salvo circostanze eccezionali che impediscano l'applicazione della licenza BSD).
Assicurarsi che tutte le funzioni seguano la corretta concordanza verbo-sostantivo di PowerShell. Utilizzare Get-Verb per elencare i verbi predefiniti utilizzati da PowerShell. Le eccezioni ai verbi supportati saranno valutate caso per caso.
Preferisco che i nomi delle variabili siano in maiuscolo e il più descrittivi possibile.
Fornire spaziatura logica tra il codice. Indentare il codice per renderlo più leggibile.
Se ci si trova a ripetere codice, scrivere una funzione.
Gestire tutti gli errori previsti e fornire un output significativo. Se si ha un errore che deve interrompere l'esecuzione dello script, utilizzare 'Throw'. Se si ha un errore che non necessita di interrompere l'esecuzione, utilizzare Write-Error.