Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Invoke-Obfuscation — Ofuscador de PowerShell | Kitploit
Herramientas/GitHubGitHub/danielbohannon/invoke-obfuscation
Herramientas DefensivasGeneración de PayloadsAprendizaje y EducaciónRed Teaming
GitHubdanielbohannon/invoke-obfuscation

Invoke-Obfuscation

Ofuscador de PowerShell

Ver Repositorio
4.3k815hace 7 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Invoke-Obfuscation v1.8

Captura de pantalla de Invoke-Obfuscation

Introducción

Invoke-Obfuscation es un ofuscador de comandos y scripts de PowerShell compatible con PowerShell v2.0+.

Antecedentes

En el otoño de 2015 decidí comenzar a investigar la flexibilidad del lenguaje de PowerShell y comencé a catalogar las diversas formas de lograr un puñado de técnicas comunes que la mayoría de los atacantes utilizan de manera habitual.

Inicialmente centrándome en la sintaxis de comando codificado y descarga remota (cradle), descubrí que varios caracteres de escape que no obstaculizaban la ejecución del comando persistían en los argumentos de la línea de comandos, tanto en el proceso en ejecución como en lo que se registra en los registros de eventos Security EID 4688 y Sysmon EID 1. Esto me llevó a explorar sistemáticamente formas de ofuscar cada tipo de "token" que se encuentra en cualquier comando o script de PowerShell.

Luego exploré formas más oscuras de realizar ofuscación a nivel de cadenas, diversas técnicas de codificación/cifrado (como ASCII/hex/octal/binary e incluso SecureString), y finalmente técnicas de lanzamiento de PowerShell para abstraer los argumentos de la línea de comandos de powershell.exe y trasladarlos al proceso padre e incluso al abuelo.

Propósito

Los atacantes y el malware comercial han comenzado a utilizar técnicas de ofuscación extremadamente básicas para ocultar la mayor parte del comando de los argumentos de la línea de comandos de powershell.exe. Desarrollé esta herramienta para ayudar al Blue Team a simular comandos ofuscados basados en lo que actualmente sé que es sintácticamente posible en PowerShell 2.0-5.0, para que puedan probar sus capacidades de detección de estas técnicas.

El único propósito de la herramienta es romper cualquier suposición que nosotros, como defensores, podamos tener sobre cómo pueden aparecer los comandos de PowerShell en la línea de comandos. Mi esperanza es que aliente al Blue Team a cambiar hacia la búsqueda de Indicadores de Ofuscación en la línea de comandos, además de actualizar el registro de PowerShell para incluir el registro de Módulos, ScriptBlocks y Transcripciones, ya que estas fuentes simplifican la mayoría de los aspectos de las técnicas de ofuscación generadas por esta herramienta.

Uso

Si bien todas las capas de ofuscación se han desarrollado en scripts separados, la mayoría de los usuarios encontrarán que la función Invoke-Obfuscation es la forma más sencilla de explorar y visualizar las técnicas de ofuscación que este framework soporta actualmente.

Instalación

El código fuente de Invoke-Obfuscation está alojado en Github, y puedes descargarlo, bifurcarlo y revisarlo desde este repositorio (https://github.com/danielbohannon/Invoke-Obfuscation). Por favor, reporta problemas o solicitudes de funcionalidades a través del rastreador de errores de Github asociado con este proyecto.

Para instalar:

root@kitploit:~
Import-Module ./Invoke-Obfuscation.psd1
Invoke-Obfuscation

Licencia

Invoke-Obfuscation se publica bajo la licencia Apache 2.0.

Notas de la Versión

v1.0 - 2016-09-25 DerbyCon 6.0 (Louisville, Kentucky EE. UU.): Lanzamiento público de Invoke-Obfuscation.

v1.1 - 2016-10-09 SANS DFIR Summit (Praga, República Checa): Se agregó la funcionalidad de reordenamiento del operador de formato -f a todas las funciones de ofuscación TOKEN aplicables. También se agregaron opciones de sintaxis adicionales para establecer valores de variables.

v1.2 - 2016-10-20 CODE BLUE (Tokio, Japón): Se agregó ofuscación TOKEN de tipo (conversión directa de tipos con opciones de ofuscación de cadenas para el nombre del tipo).

v1.3 - 2016-10-22 Hacktivity (Budapest, Hungría): Se agregaron dos nuevos LAUNCHERs: CLIP+ y CLIP++. También se agregó una sintaxis de conversión de caracteres de matriz adicional (y más simple) para todas las funciones ENCODING que no requiere For-EachObject/% .

v1.4 - 2016-10-28 BruCON (Gante, Bélgica): Se agregó la nueva función ENCODING BXOR. También se mejoró la aleatorización de mayúsculas/minúsculas para todos los componentes de todas las funciones ENCODING, así como para los flags de ejecución de PowerShell para todos los LAUNCHERs. Finalmente, se agregó la opción abreviada -EP para -ExecutionPolicy a todos los LAUNCHERs, así como la representación entera opcional del flag de ejecución de PowerShell -WindowStyle: Normal (0), Oculto (1), Minimizado (2), Maximizado (3).

v1.5 - 2016-11-04 Blue Hat (Redmond, Washington EE. UU.): Se agregó el LAUNCHER WMIC con cierta aleatorización de los argumentos de la línea de comandos de WMIC.

v1.6 - 2017-01-24 Blue Hat IL (Tel Aviv, Israel):

  • Se agregó funcionalidad CLI: Por ejemplo, Invoke-Obfuscation -ScriptBlock {Write-Host 'CLI FTW!'} -Command 'Token\All\1,
    Encoding\1,Launcher\Stdin++\234,Clip' -Quiet -NoExit
  • Se agregó funcionalidad UNDO para eliminar una capa de ofuscación a la vez.
  • Se eliminó la ofuscación de espacios en blanco de Token\All\1 para acelerar la ofuscación de scripts grandes.
  • Se agregó salida de Árbol de Argumentos de Proceso para todos los lanzadores para ayudar a los defensores.
  • Se agregó funcionalidad de autodetección del menú base para evitar la necesidad de usar BACK o HOME: Por ejemplo, si ejecutó TOKEN luego ALL luego 1, simplemente escriba LAUNCHER y llegará al menú LAUNCHER sin necesidad de escribir HOME o BACK para volver al menú principal.
  • Se agregó sintaxis de múltiples comandos utilizada por CLI y modo interactivo: Por ejemplo, Token\All\1,String\3,Encoding\5,Launcher\Ps\234,Clip
  • Se agregó capacidad de expresiones regulares a todos los menús y comandos de ofuscación: Por ejemplo, Token**,String[13],Encoding(1|6),Launcher.*[+]{2}\234,Clip
  • Se agregó funcionalidad de comando único OUT FILEPATH.
  • Se agregó decodificación si se ingresa la sintaxis powershell -enc como valor SCRIPTBLOCK.
  • Se agregó el alias ForEach a las opciones de sintaxis aleatorizada de ForEach-Object/% en todas las funciones ENCODING.
  • Se agregaron opciones de sintaxis de subcadena -Key -Ke -K KEY a Out-SecureStringCommand.ps1.
  • Se agregó una aleatorización más completa de mayúsculas/minúsculas a todas las funciones de ofuscación \Home\String.
  • Se agregaron flags -ST/-STA (Apartamento de un solo subproceso) a las funciones lanzador CLIP+ y CLIP++ ya que son necesarios si se ejecuta en PowerShell 2.0.
  • Se agregó sintaxis Get-Item/GI/Item en todos los lugares donde se usa Get-ChildItem para obtener valores de variables.
  • Se agregó sintaxis de instanciación de variables Set-Item a la función de ofuscación TYPE.
  • Se agregaron sintaxis adicionales de Invoke-Expression/IEX utilizando variables automáticas de PowerShell y concatenaciones de valores de variables de entorno en la función Out-EncapsulatedInvokeExpression de Out-ObfuscatedStringCommand.ps1 y se copiaron a todos los lanzadores, funciones STRING y ENCODING para agregar numerosas sintaxis de línea de comandos para IEX.
  • Se agregaron dos nuevas sintaxis JOIN para String\Reverse y todas las opciones de ofuscación ENCODING:
    1. Se agregó la sintaxis JOIN [String]::Join('',$string)
    2. Se agregó la sintaxis JOIN con variable OFS (variable automática Separador de campo de salida)
  • Se agregaron dos sintaxis SecureString más a Encoding\5:
    1. PtrToStringAnsi / SecureStringToGlobalAllocAnsi
    2. PtrToStringBSTR / SecureStringToBSTR

v1.7 - 2017-03-03 nullcon (Goa, India):

  • Se agregaron 3 nuevos LAUNCHERs: RUNDLL, RUNDLL++ y MSHTA++
  • Se agregaron cadenas de variables comodín adicionales de ExecutionContext

v1.8 - 2017-07-27 Black Hat (Las Vegas, Nevada EE. UU.):

  • Se agregaron 2 nuevas opciones ENCODING: Caracteres Especiales y Espacios en Blanco

v1.8.1 - 2017-12-19:

  • Se agregó la función COMPRESS para facilitar la conversión de scripts de varias líneas a un comando de una sola línea, reduciendo drásticamente la longitud del comando para los límites de longitud de línea de comandos de cmd.exe.

v1.8.2 - 2018-01-04:

  • Se agregaron funciones de ofuscación AST, que ofuscan manipulando la estructura del AbstractSyntaxTree (Árbol de sintaxis abstracta) sin usar muchos caracteres especiales.
Descargar herramienta
  • Se agregaron seis sintaxis alternativas GetMember para varios miembros de SecureString:
    1. PtrToStringAuto, ([Runtime.InteropServices.Marshal].GetMembers()[3].Name).Invoke
    2. PtrToStringAuto, ([Runtime.InteropServices.Marshal].GetMembers()[5].Name).Invoke
    3. PtrToStringUni , ([Runtime.InteropServices.Marshal].GetMembers()[2].Name).Invoke
    4. PtrToStringUni , ([Runtime.InteropServices.Marshal].GetMembers()[4].Name).Invoke
    5. PtrToStringAnsi, ([Runtime.InteropServices.Marshal].GetMembers()[0].Name).Invoke
    6. PtrToStringAnsi, ([Runtime.InteropServices.Marshal].GetMembers()[1].Name).Invoke
  • Se actualizó Out-ObfuscatedTokenCommand.ps1 para que la ofuscación VARIABLE no encapsule variables en ${} si ya están encapsuladas (por lo que ${${var}} no ocurrirá, ya que esto causa errores).
  • Se reemplazó Invoke-Obfuscation.psm1 con Invoke-Obfuscation.psd1 (gracias @Carlos_Perez).
  • Se corrigieron varios errores de ofuscación a nivel TOKEN reportados por @cobbr_io y @IISResetMe.