Computers">
1-Mini Tutorial Unpacking Con Ida Pro en Nuevos Windows
1-Mini Tutorial Unpacking Con Ida Pro en Nuevos Windows
1-Mini Tutorial Unpacking Con Ida Pro en Nuevos Windows
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.
.
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.
Abriremos nuevamente el archivo víctima, cuando nos diga que hay una database existente le
diremos que la sobrescriba.
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.
Allí vemos que agrego el header, nos tiro un par de carteles de sección truncada pero aceptamos y
seguimos adelante.
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.
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.
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 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
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()
fp = fopen("choto4.bin", "wb");
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.
https://tuts4you.com/download.php?view.3503
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