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
astaroth-deobfuscator — Script en Python para IDA que desofusca el inyector DLL de Astaroth/Guildma | Kitploit
Herramientas/GitHubGitHub/dodo-sec/astaroth-deobfuscator
Análisis EstáticoIngeniería InversaAnálisis de MalwareAnálisis de Binarios
GitHubdodo-sec/astaroth-deobfuscator

astaroth-deobfuscator

Script en Python para IDA que desofusca el inyector DLL de Astaroth/Guildma

Ver Repositorio
81hace 3 añosAún no revisado

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

astaroth-deobfuscator

Script de IDA Python para desofuscar la DLL inyectora de Astaroth/Guildma

Al intentar analizar la DLL inyectora de una campaña reciente de Astaroth/Guildma (gracias a este diario de SANS ISC), me topé con un intento de ofuscación realmente molesto.

Una función (a la que llamé time_waster_3000 en la imagen de abajo) se llama más de 1,000 veces (!!!) en toda la DLL. Esta función toma seis cadenas hardcodeadas como argumentos, junto con una word aleatoria. La función en sí es un laberinto de aritmética que no sirve para ningún propósito práctico por lo que pude comprobar (aparte de hacer perder el tiempo a un reverser). Así es como se ve DLLEntry con esas molestas llamadas en su lugar:

Entrada de DLL antes de la desofuscación

El propósito de este script de IDA Python es ocultar todos los bloques de código que implican una llamada a esta función basura, así como sus argumentos. Así es como se ve DLLEntry después de ejecutar el script:

Entrada de DLL después de la desofuscación

Consideraciones importantes

  • El script funciona encontrando una llamada a la función de relleno, representada por call sub_CHANGEME en el script. Por lo tanto, debes renombrarla en el script con el nombre de la función encontrado en la muestra con la que estés trabajando. Por ejemplo, cambiar idc.print_operand(x, 0) == 'sub_CHANGEME' a idc.print_operand(x, 0) == 'sub_431000'.

  • He elegido iterar sobre la instrucción call sub_CHANGEME en lugar de sobre los pushes de argumentos. La razón es simple: las cadenas hardcodeadas están presentes en múltiples lugares del binario; por lo tanto, cuando intenté buscar por instrucciones push que involucraran los offsets de dichas cadenas, el script no encontraba todas las instancias de estos datos basura.

  • El script solía funcionar ocultando cada instancia del paso de argumentos y la llamada a la función de relleno como un único bloque colapsado. Como la función se llama varias veces seguidas, eso resultaba en enormes espacios en blanco en la vista de desensamblado. Lo he actualizado para ocultar las instancias secuenciales de este relleno en un solo bloque colapsado, lo que realmente mejora la legibilidad.

Descargar herramienta