<<<<<<< HEAD Aquí tienes tu texto corregido ortográficamente y con una redacción más clara y coherente, manteniendo los términos técnicos y el contenido original:
origin/main
No se puede encontrar _start, es decir, el main es de libc
Relacionado: Rootkits. biblio. Herramientas. CENT. Cadenas de formato.
Convenciones de llamada
-
cdecl
-
stdcall
-
fastcall
Para acceder a los datos de la pila, se utilizan direcciones relativas.
Al principio, la base y el tope de la pila están iguales y se accede a partir de ahí.
(Imagen no visible, pero parece representar el estado inicial de la pila.)
Según la convención de llamada, quién limpia la pila puede variar (el caller o el callee).
Parámetros y enlazado
Los parámetros que se pasan por el compilador pueden variar.
Hay dos formas de enlazar:
-
Enlazado estático:
-
Se incluye todo el código necesario directamente en el binario final.
-
Ejemplo:
printfestá completamente incluido. -
Usado a veces por malware para evitar dependencias externas.
-
-
Enlazado dinámico:
-
Se resuelve en tiempo de ejecución.
-
El sistema operativo carga las bibliotecas necesarias.
-
Esto permite actualizaciones (o incluso desactualizaciones) parciales, como hace Windows.
-
Reconocer estructuras
Es importante reconocer estructuras como:
-
La creación y destrucción de funciones.
-
El uso de registros específicos en bucles (
forpor tamaño del registro). -
En radare2, variables como
var_14ovar_20se refieren a posiciones como[bp - 0x14],[bp - 0x20].
Ofuscación con XOR y Vernam
El cifrador Vernam es básicamente una XOR, muy usado para ofuscar:
-
Strings
-
Direcciones IP
-
Dominios
Herramientas como YARA permiten detectar claves XOR sencillas (por ejemplo, XOR con un solo byte).
Herramientas para análisis
x64dbg / x32dbg
-
Mejor ejecutarlas en Windows, porque ciertas librerías no se cargan bien en otros entornos.
-
Los programas de 32 bits son comunes porque trabajan con enteros.
Algunas funciones como
sprintfyprintfestablecen cadenas de formato.
radare2
- Permite analizar estructuras, inferir comportamiento, y ver cómo el código trabaja con la pila.
Análisis de malware
-
WannaCry no tiene un
main, tiene una función llamadaplaygame. -
Los binarios cargan recursos y librerías en formato hexadecimal.
-
Un malware puede estar completamente en RAM.
- Esto lo hacen algunos rootkits para evitar ser detectados.
Malfind
- Permite buscar código de máquina en memoria sospechosa (por ejemplo, en zonas inyectadas).
que es lo importqante? saber reconocer ciertas estructruras: cuando se crea o destruye una funcion, es decir, ver donde se crea el marco de la pila, etc usar radare en remnux con el comando r2 depende de las aes (aaaaa) que el emtamos profundiza mas en el analisis, al ser un analisis automatico puede tener errores con p en radare hacemos print esto es un bucle for en donde var4h es el contador ue va sumando +a en cada iteracion, radare mejora mejor se ve todo mejor con pd siempre que ponemos ? despues no da el manual con pdf @ main indicamos que buscamos una funcion
Depuración y modificación en tiempo de ejecución
-
Se puede parchear mientras se ejecuta usando funciones como Edit Code.
-
Hay dos tipos de breakpoints:
-
Break físico: al acceder a cierta dirección de memoria.
-
Break lógico: cuando el EIP (Instruction Pointer) apunta a cierta dirección.
-
También se puede:
-
Cambiar los argumentos en
Change Command Line. -
Ejecutar con parámetros personalizados.
Otra opción es:
-
El depurador abre el proceso existente y se engancha a él directamente (muy útil con
x32dbg). -
Esto permite analizar procesos ya en ejecución.
Análisis de funciones y depuración
-
Flechas azules de arriba a la izquierda: permiten moverse entre funciones.
-
Para saber qué función es el main, hay que buscar dentro del _start.
-
Para entrar en una función, se debe hacer doble clic en ella.
-
Una DLL no tiene
main, pero al descompilarla, si contiene un EXE embebido, este sí tendrá unmain. -
En la vista de Ghidra a la izquierda, se pueden ver imports, exports, entre otros.
Función playgame
-
Si entramos en la función
playgame, podemos ver unprintfcon formato. -
Este printf está guardando en
stpath, que será una dirección de memoria y una cadena formateada. -
4d5a es el número mágico de un archivo MZ (indica que es un archivo ejecutable de Windows).
Exportar y guardar el proyecto
- Si modificamos alguna función o tipo, debemos guardar el proyecto por separado y exportarlo, para luego poder retomarlo desde donde lo dejamos.
Función main
-
Una de las últimas funciones recibe un parámetro
pHvar3, lo que nos da el handle del módulo principal. -
Cuando encontramos la función main, podemos hacer clic derecho y renombrarla como tal.
- Como se trata de una DLL, inicialmente no tiene un
main, pero al desempaquetar el recurso interno, nos damos cuenta de que es un EXE y existe unmain.
- Como se trata de una DLL, inicialmente no tiene un
Análisis del malware
- En este
main, vemos que se realiza un link y luego se conecta a internet.
Por lo tanto, esto parece ser un WannaCry salvaje, que actualmente puede estar circulando por internet.
Entender el código y renombrar funciones
- En nuestra muestra, es importante entender qué hace el código y renombrar las funciones según su comportamiento o lo que llaman.
Otras herramientas
-
Análisis de memoria: Todo el programa se ejecuta en la memoria RAM del ordenador. Si queremos analizar muestras más avanzadas, como un rootkit, debemos realizar un volcado de memoria y analizarla.
-
Malfind en Volatility se usa para buscar trozos de código que sean código máquina.
-
También con Volatility podemos extraer un ejecutable, desensamblarlo y analizarlo.
-
Uso de x64dbg (depurador)
-
En el centro de la interfaz, vemos el código ensamblado.
-
En la parte superior derecha, están los registros.
-
En la parte inferior derecha, se encuentra la pila tal cual.
-
En la pestaña de Symbols, podemos ver las librerías utilizadas.
-
Si queremos ver algo en detalle, podemos hacer clic derecho.
-
Con Find References To, podemos ver desde dónde llaman a una función.
Depuración con breakpoints
-
Para depurar, se utilizan las flechas azules (arriba) para navegar entre funciones.
-
Para poner un breakpoint, se hace clic en el punto de la izquierda, que se pondrá de color rojo.
-
Se puede poner un breakpoint lógico o físico.
Diferencia entre breakpoints lógicos y físicos:
-
Breakpoint lógico: Se activa cuando una función o dirección es llamada.
-
Breakpoint físico: Se activa cuando se accede a una dirección de memoria específica.
-
Una vez puesto el breakpoint, le damos a “Run”, y el programa se ejecutará hasta que se detenga en la función en la que hemos establecido el breakpoint.
Otras opciones para ejecutar
-
En Change Command Line, podemos ejecutar una función con parámetros específicos.
-
Otra opción para analizar el malware es ir a File > Attach y conectarnos directamente al proceso.


