
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.
Não use caminhos codificados. Um script deve ser utilizável imediatamente. Ninguém deve precisar modificar o código a menos que queira.
A compatibilidade com PowerShell v2 é altamente desejada.
Use parâmetros posicionais e torne os parâmetros obrigatórios quando fizer sentido. Por exemplo, estou procurando algo como:
[Parameter(Position = 0, Mandatory = $True)]Não use nenhum alias a menos que faça sentido para receber entrada de pipeline. Eles tornam o código mais difícil de ler para pessoas que não estão familiarizadas com um alias específico.
Tente não deixar comandos se estenderem por muito tempo. Por exemplo, um pipeline é um lugar natural para uma quebra de linha.
Não exagere nos comentários inline. Use-os apenas quando certos aspectos do código possam ser confusos para um leitor.
Em vez de usar Out-Null para suprimir saída indesejada/irrelevante, salve a saída indesejada em $null. Isso proporciona um pequeno ganho de desempenho.
Use valores padrão para seus parâmetros quando fizer sentido. Idealmente, você quer um script que funcione sem exigir nenhum parâmetro.
Declare explicitamente todas as dependências necessárias e opcionais na ajuda baseada em comentários da sua função. Todas as dependências de biblioteca devem residir na pasta 'Lib'.
Se um script cria objetos personalizados complexos, inclua um arquivo ps1xml que formatará adequadamente a saída do objeto. Arquivos ps1xml são armazenados em Lib\Formatters.