Está en la página 1de 26

MINI TUTORIAL UNPACKING CON IDA PRO EN NUEVOS WINDOWS (7,

8)

Muchas personas creen que IDA PRO no sirve para desempacar y por ahí tienen razón, pero vamos
a intentar desempacar un unpackme sencillo sin protecciones, más que nada para ir conociendo
como nos manejaremos en IDA empezando con casos sencillos y conociendo las nuevas
herramientas que existen hoy.

Utilizare IDA 6.8 igual cualquier IDA más o menos nuevo servirá para el caso, y creo que podremos
ver un poco ciertas cositas que si podemos hacer con IDA en el terreno del unpacking , y al menos
vamos empezando ya veremos cuando haya que enfrentarse con trucos antidebuggers y packers
complejos, pero siempre es bueno empezar por lo sencillo, así que este es un unpackme que se
puede bajar de aquí.

https://www.hex-rays.com/products/ida/support/tutorials/unpack_pe/test00.exe

Está alojado en la página de iDA en un tutorial de HexRays que también servirá en alguna parte de
nuestro trabajo, y nos ayudara, aunque no es de unpacking.

Bueno abramos UN IDA y allí abramos la víctima

.
Lo abriremos con las opciones por default como viene a ver que pasa.

No importa seguimos

Se ve bastante feo no podemos apreciar nada, generalmente IDA se pone bastante loco al analizar
código mezclado con zonas de datos y hay que arreglar un poco lo que se ve para comprender
antes de ejecutar, eso haremos, trataremos de que se vea mas lindo, realmente para desempacar
no es necesario, podemos hacerlo igual aunque se vea feo, pero de paso aprendemos un poco a
manejarnos con el IDA.
Supuestamente el código debería empezar allí donde dice start, vemos que delante de los bytes
esta la palabra dd.

Esto significa que IDA interpreto que allí hay data en formato dword.

dd =dword

dw=Word

db=byte

Apretado la letra D podríamos cambiar el tipo de dato, lo que el IDA llama carrusel, o sea que cada
vez que apretas cambia a un tipo de datos distinto, vemos que si apreto la D va cambiando de dd,
a db y dw.

En OPTIONS-SETUP DATA TYPES podemos configurar los tipos de datos que podrán cambiarse en
el carrusel cada vez que apretemos D,
Ahí está como viene por default, para cambiar entre byte, word y dword cada vez que apretamos
D, pero se pueden agregar otros tipos de datos, por si necesitamos, si por ejemplo marcamos
FLOAT, entones habrá cuatros tipos de datos que cambiaran cada vez que apretemos la D, los tres
que vienen por default más FLOAT.

Pero en este caso no es cambiar a otro tipo de datos lo que tenemos que hacer en este caso
necesitamos que se interprete a partir de start como CODE, para ello vemos que se realiza
apretando la letra C.
Nos queda así
Vemos que ahora se transformó en un salto al header que comienza en 400000 y termina en
401000, así que IDA no lo interpreta como válido en el análisis previo y lo muestra en rojo,
inclusive si queremos ir a ver que hay ahí, no podemos.

De cualquier manera si lo debuggearamos, al ir traceando podríamos ir obviamente pero quiero


arreglarlo aquí antes en el análisis, lo cual es muy útil a veces.

Abriremos nuevamente el archivo víctima, cuando nos diga que hay una database existente le
diremos que la sobrescriba.

Abrimos el EXE no el IDB.


Así empezamos de cero todo nuevamente.

Le cambiamos esas dos opciones MANUAL LOAD servirá para que nosotros decidamos que
secciones IDA va a incorporar, como vimos la vez anterior al hacerlo automáticamente IDA no
agrego el header, y eso no nos conviene, y le quitamos la tilde de Create Import segments, para
que no se queje por la IAT rota.

Dejamos la misma imagebase aceptamos.


Ahora nos pregunta cada sección si la queremos agregar, le decimos que si a todas para que no
nos deje nada fuera como antes.

Allí vemos que agrego el header, nos tiro un par de carteles de sección truncada pero aceptamos y
seguimos adelante.

Ahora después de apretar la C para transformar en código nos quedo

Y ya no nos muestra la dirección como inexistente, podemos incluso hacer doble clic en ella e ir
allí.
Allí está el código del header si quieren pueden apretar la P en el inicio para que cree una función.

Luego con la barra espaciadora cambiamos a grafico en bloques

Si queremos divertirnos un rato más vemos que salta en muchos lugares al contenido de
40601Ch, podemos ir a mirar que hay allí.
No se ve nada

Pero como toma el contenido de esa dirección para ver donde saltara debemos cambiar el tipo de
datos con D a DWORD.

Saltara entonces a 400130


Miramos allí y vemos que el código esta embebido en las strings del nombre de las secciones, en
400108 está el nombre de la primera sección que es MEW luego viene un cero y luego el código
que se va a ejecutar y lo mismo pasa en 400130, donde todos son bytes que son código a ejecutar
camuflado en el nombre de la otra sección.

Si apretamos C en 400130 vemos el código que está oculto en la string del nombre de la segunda
sección.

Hay dos saltos allí a 400108+7 y 400108+4 y como salta al medio de una string IDA lo muestra
como el inicio de la string que es 400108 mas xx, ya que no puede saltar al medio de una string.
Allí vemos en rojo las referencias incorrectas lo arreglaremos, apretamos la U para undefinir este
código.

Vemos que allí están los bytes sin definir, y las referencias ahora están en verde o sea que son
correctas, así que ahora vamos adonde están las referencias correctas y apretamos C en
unk_40010C. (unk es unknown)

Ahora si esta correcto vemos que en 401008 no empezaba una función sino que había la string
MEW del nombre y completa el largo de 8 bytes el código a ejecutar en 40100c y 40100f y se ven
sus referencias reparadas.

Inclusive si ponemos el mouse encima de las flechitas de las referencias para ver el código desde
donde se llamaba aquí, vemos que el mismo se reparó también.
Vemos allí las direcciones correctas.

Buenos ya nos divertimos mucho vayamos hasta el entry point para dumpear, arranquemos el
debugger.

Podemos con f2 poner un breakpoint aquí


Si queremos poner un breakpoint en el header deberemos usar hardware breakpoint pues es una
zona no escribible.

Podemos ir traceando con f7 y ver como lo que habíamos arreglado quedo bien.
Vemos que si agrego un breakpoint que se llama PAGE BREAKPOINT que es similar al memory
breakpoint de olly le cambia el permiso a la página.

Le coloco un PAGE BREAKPOINT a la sección donde se escribirá el code, porque ya lo hice correr y
vi que se descomprime allí, en un tiro anterior y originalmente esta vacía dicha sección, le pongo
1000 o el largo de la sección y le digo que pare cuando va a ejecutar.
Como no para ni por lectura ni escritura ya estamos en el entry point

Podemos borrar el breakpoint para quitar lo rojo.

Ahora tenemos que dumpear, con este script que lo copiamos a un archivo de texto, le ponemos
dump. idc y nos servirá para dumpear cualquier cosa, cambiando la imagebase y el final.

static main()

auto fp, ea;

fp = fopen("choto4.bin", "wb");

for ( ea=0x400000; ea < 0x407004; ea++ )

fputc(Byte(ea), fp);

Vemos que ponemos 400000 por la imagebase y 407004 que es la dirección máxima que se puede
ver en IDA en la pestaña segmentations.(VIEW-SEGMENTS)
Allí vemos las secciones la última llamada OVERLAY termina en 407004.

Vamos a FILE-SCRIPT FILE y buscamos el dump.idc y al correrlo nos crea un archivo llamado
choto4.bin que es el dumpeado.

Ahora usando el peditor lo abrimos.


Le cambiamos el entry point por 1000
Y luego usamos la opción dumpfixer, aplicamos los cambios para que se guarden y cerramos el
peditor y lo renombramos a choto4.exe ya aparece el icono nos falta arreglar la IAT.

Abrimos el Scylla que es como el Import reconstructor modernizado

https://tuts4you.com/download.php?view.3503

Buscamos el proceso text00 que está detenido en el entry point


Le cambiamos el OEP a 401000
Apretamos IAT AUTOSEARCH
Y luego GET IMPORTS
Encontró todo valido así que vamos a FIX DUMP y buscamos el choto4 y lo reparamos
YA NOS QUEDA EL EXE DUMPEADO Y CORRECTO, lo guarda con el nombre choto4_SCY.exe

Si lo corremos

Y si lo abrimos en IDA a pesar de que dice que está destruido se ve bien solo faltaría cambiar la
sección de code a la que está el nuevo entry point y todo quedaría perfecto
Bueno al menos nos divertimos un poco con algo fácil, y sacamos el óxido.

Hasta la próxima

Ricnar

También podría gustarte