
Um Módulo PowerShell Dedicado à Engenharia Reversa
Desmonte código nativo e gerenciado.
Get-CSDisassemblyDesmonta um array de bytes usando o framework de desmontagem Capstone Engine.
Get-ILDisassemblyDesmonta um array de bytes MSIL bruto passado de um objeto MethodInfo de maneira similar ao Ildasm.
Ferramentas úteis ao realizar análise de malware.
New-FunctionDelegateFornece um wrapper executável para uma função X86 ou X86_64.
Invoke-LoadLibraryCarrega uma DLL no processo atual do PowerShell.
New-DllExportFunctionCria um delegate wrapper executável em torno de uma função exportada não gerenciada.
Get-HostsFileAnalisa um arquivo HOSTS.
New-HostsFileEntrySubstitui ou anexa uma entrada a um arquivo HOSTS.
Remove-HostsFileEntryRemove uma entrada ou série de entradas de um arquivo HOSTS.
Get-AssemblyStringsExibe todas as strings de um executável .NET.
Get-AssemblyResourcesExtrai recursos gerenciados de um assembly .NET
Remove-AssemblySuppressIldasmAttributeRemove o atributo SuppressIldasmAttribute de um assembly .NET.
Get-AssemblyImplementedMethodsRetorna todos os métodos em um assembly que são implementados em MSIL.
Inspecionar e analisar memória de processos
Get-ProcessStringsExibe todas as strings imprimíveis da memória em modo de usuário de um processo.
Get-VirtualMemoryInfoUm wrapper para kernel32!VirtualQueryEx
Get-ProcessMemoryInfoRecupera informações de memória virtual para cada conjunto único de páginas na memória do usuário. Esta função é semelhante ao comando !vadump do WinDbg.
Get-StructFromMemoryMarshals dados de um bloco de memória não gerenciado em um processo arbitrário para um objeto gerenciado recém-alocado do tipo especificado.
Analisar formatos de arquivo e estruturas em memória.
Get-PEUm analisador de PE em disco e em memória e despejador de processo.
Find-ProcessPEsEncontra executáveis portáteis na memória independentemente de terem sido carregados de forma legítima.
Get-LibSymbolsExibe informações simbólicas de arquivos LIB do Windows.
Get-ObjDumpExibe informações sobre arquivos objeto (OBJ) do Windows.
Obter e analisar informações de baixo nível do sistema operacional Windows.
Get-NtSystemInformationUm utilitário que chama e analisa a saída da função ntdll!NtQuerySystemInformation. Este utilitário pode ser usado para consultar informações internas do SO que normalmente não são visíveis para um usuário.
Get-PEBRetorna o bloco de ambiente do processo (PEB) de um processo.
Register-ProcessModuleTraceInicia um rastreamento de módulos de processo carregados
Get-ProcessModuleTraceExibe os módulos de processo que foram carregados desde a chamada para Register-ProcessModuleTrace
Unregister-ProcessModuleTracePara o rastreamento de módulo de processo em execução
Get-SystemInfoUm wrapper para kernel32!GetSystemInfo
Funções auxiliares diversas
Get-MemberUma função proxy usada para estender o cmdlet Get-Member interno. Adiciona o parâmetro '-Private' permitindo exibir membros .NET não públicos
Get-StringsDespeja strings de arquivos em Unicode e Ascii. Este cmdlet replica a funcionalidade do strings.exe da Sysinternals.
ConvertTo-StringConverte os bytes de um arquivo em uma string que tem um mapeamento 1 para 1 de volta para os bytes originais do arquivo. ConvertTo-String é útil para realizar expressões regulares binárias.
Get-EntropyCalcula a entropia de um arquivo ou array de bytes.
Bibliotecas necessárias para algumas funções de RE.
CapstoneO binding C# do mecanismo de desmontagem Capstone.
De4dotUma poderosa biblioteca de desofuscação .NET e análise de PE .NET.
PSReflectUm módulo usado para definir facilmente enums, structs e funções Win32 na memória.
FormattersArquivos ps1xml usados para formatar a saída de várias funções do PowerShellArsenal.
O módulo PowerShellArsenal e todos os scripts individuais estão sob a licença BSD 3-Clause a menos que explicitamente indicado de outra forma.
Consulte a ajuda baseada em comentários em cada script individual para obter informações detalhadas de uso.
Para instalar este módulo, coloque toda a pasta PowerShellArsenal em um de seus diretórios de módulos. Os caminhos padrão dos módulos do PowerShell estão listados na variável de ambiente $Env:PSModulePath.
O caminho padrão por usuário do módulo é: "$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules" O caminho padrão do módulo em nível de computador é: "$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
Para usar o módulo, digite Import-Module PowerShellArsenal
Para ver os comandos importados, digite Get-Command -Module PowerShellArsenal
Se você estiver usando PowerShell v3 e quiser remover o irritante aviso 'Você realmente deseja executar scripts baixados da Internet', depois de colocar o PowerShellArsenal em seu caminho de módulo, execute o seguinte one-liner:
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerShellArsenal) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
Para obter ajuda em cada comando individual, Get-Help é seu amigo.
Nota: As ferramentas contidas neste módulo foram projetadas para serem executadas individualmente. Incluí-las em um módulo simplesmente contribui para uma maior portabilidade.
Para todos os contribuidores e futuros contribuidores do PowerShellArsenal, peço que sigam este guia de estilo ao escrever seus scripts/módulos.
Evite Write-Host a todo custo. Funções/cmdlets do PowerShell não são utilitários de linha de comando! Pull requests contendo código que use Write-Host não serão considerados. Você deve gerar objetos personalizados. Para mais informações sobre criação de objetos personalizados, leia estes artigos:
Se você quiser exibir informações de depuração relevantes na tela, use Write-Verbose. O usuário pode simplesmente adicionar '-Verbose'.
Sempre forneça uma ajuda descritiva baseada em comentários para cada script. Além disso, certifique-se de incluir seu nome e uma licença BSD 3-Clause (a menos que haja circunstâncias atenuantes que impeçam a aplicação da licença BSD).
Certifique-se de que todas as funções sigam a concordância verbo-substantivo adequada do PowerShell. Use Get-Verb para listar os verbos padrão usados pelo PowerShell. Exceções a verbos suportados serão consideradas caso a caso.
Prefiro que nomes de variáveis sejam capitalizados e o mais descritivos possível.
Forneça espaçamento lógico entre seu código. Indente seu código para torná-lo mais legível.
Se você se pegar repetindo código, escreva uma função.
Capture todos os erros antecipados e forneça uma saída significativa. Se você tiver um erro que deve interromper a execução do script, use 'Throw'. Se você tiver um erro que não precisa interromper a execução, use Write-Error.
Se você estiver escrevendo um script que interage com a API Win32, tente evitar compilar C# inline com Add-Type. Tente usar o módulo PSReflect, se possível.