¿Existen herramientas que se centren en el análisis de shellcode?

4

Shellcode presenta ciertos desafíos para el desmontaje. A menudo se auto modifica, salta a la pila (donde probablemente se colocará el código de shell) y se basa en ciertos trucos inusuales en los que las herramientas de desmontaje estándar no se enfocan.

Teniendo esto en cuenta, ¿qué herramientas están disponibles para desmontar y analizar shellcode?

    
pregunta Polynomial 21.08.2012 - 07:49
fuente

3 respuestas

2

libemu . Está libre. Para Linux, pero es capaz de analizar shellcode win32.
miasm . Implementado en Python, parece muy interesante.

    
respondido por el dgarcia 21.08.2012 - 08:03
fuente
3
  

Dado que Shellcode es solo un bloque de instrucciones en bruto, estas herramientas no son realmente adecuadas.

Wat? ¡Los ejecutables son solo bloques de instrucciones en bruto también! No realmente. Bien, tal vez haya bits de datos allí para los encabezados de PE / ELF o similares, o simplemente datos de programas simples, pero los datos son el mismo binario que las instrucciones. Hasta el punto, las secciones de los ejecutables están etiquetadas (texto, datos) para que el sistema operativo sepa qué tratar como qué.

Para una demostración, tome cualquier conjunto de ensamblador y escriba:

nasm -f bin <asmfile.asm>

Eso no hará absolutamente ninguna barra de trabajo adicional al traducir las instrucciones del ensamblador a opcodes y escribirlas en un archivo binario. Así es como escribirías un gestor de arranque o similar.

Ahora, si desea analizar un código de shell, hay muchas formas de hacerlo. Para empezar, puedes usar un arnés:

#include <stdio.h>

char shellcode[] = { ... };

int main()
{
    int (*function)() = shellcode;
    function();
}

y listo está, simplemente obtenga gdb o algo similar a un solo paso. Por supuesto, si desea analizar esa parte particular del código de shell de forma estática, también hay una forma de hacerlo:

#include <stdio.h>

char shellcode[] = { ... };

int main()
{
    FILE* f = fopen('test.bin', 'wb');
    fwrite(shellcode, sizeof(shellcode), f);
    fclose(f);
}

y ahora tienes un blob binario para trabajar. En realidad, es probable que tuvieras que hacer lo contrario para cargar el código en el arnés de prueba (es decir, escapar de él) de todos modos.

Si estás buscando herramientas, sugiero los x86 wikibook . Básicamente, se trata de elegir uno o más que puedas pagar y tener una jugada.

A menos que el código de shell contenga medidas anti-depuración (recuerde, tiene espacio limitado) es probable que un depurador en tiempo de ejecución con el arnés de prueba funcione bien.

    
respondido por el user2213 21.08.2012 - 09:45
fuente
2

puede usar scdbg con el archivo de código de shell binario sin formato para obtener un registro de tiempo de ejecución de todas las API que utiliza. La ejecución se realiza en el entorno de emulación libemu. La opción -d creará un volcado de la memoria una vez finalizada si detecta alguna modificación de la memoria (autodecodificación). La herramienta también es compatible con la ubicación de las compensaciones de inicio de shellcode (en el caso del prefijo ROP) y un shell de depuración integrado (básico). Hay un video de youtube para verlo en acción.

enlace

enlace

Puede abrir la memoria volcada en el desensamblador IDA, que puede interpretarse como código de 32 bits en bruto. También puede establecer la dirección base (generalmente no es necesario) y modificar el código si tiene que usar las capacidades de scripting integradas.

    
respondido por el John 22.11.2012 - 13:20
fuente

Lea otras preguntas en las etiquetas