Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: biribau en 15 Junio 2009, 02:50 am



Título: Armadillo 6.60.0140 hueso duro de roer=?
Publicado por: biribau en 15 Junio 2009, 02:50 am
Buenas,

He usado el Software Passport(ultima version) para comprimir un ejecutable muy simple para estudiar la proteccion Armadillo 6.60 y nada, aun siguiendo varios tutos por la red no puedo con el...

Lo unico que no lleva son nanomites

Esta aqui: http://rapidshare.com/files/244632303/UnpackmeArmadillo6.exe.bz2.html (http://rapidshare.com/files/244632303/UnpackmeArmadillo6.exe.bz2.html)

 Me gustaria poder dumpearlo y extraer el nucleo del programa para poder parchearlo etc., pero a mano. No he tenido muchos avances, a ver si alguien puede darme alguna pista.
He probado bastantes cosas y no consigo aun asi entender bien como funciona.

El intento mas cercano de conseguir algo fue de esta manera:

(Uso el plugin phantom para ocultar el olly)

Rompemos en el segundo WriteProcessMemory(hardware bp), que escribe 2 bytes en el proceso hijo, anteriormente escribio un salto jmp eip y ahora reestablece los bytes, nosotros cambiamos el buffer por EB FE, o sea, jmp eip.

Ahora deseariamos attachear olly al proceso hijo pero este esta siendo depurado por el padre asi que ponemos en el padre un bp WaitForDebugEvent, al final cuando eax == 0 (conditional) (esto no se bien por que pero lo lei) retornamos y ensamblamos
push <pid proceso hijo>
call DebugActiveProcessStop

Ejecutamos las 2 instrucciones y ya podemos atachaear un segundo olly al proceso hijo, ahora si ejecutamos el programa normal casca..... ¿que hago mal? ¿que detecta el programa diferente?

Como veis estoy muy lejos de poder dumpear el programa, reconstruir la IAT, etc...

Cualquier ayuda sera bienvenida :D
Saludos


Título: Re: Armadillo 6.60.0140 hueso duro de roer=?
Publicado por: Shaddy en 15 Junio 2009, 12:17 pm
Los nanomites son instrucciones 0xCC (int 3) puestos sobre todo el código para que el "proceso hijo" provoque una excepción, que luego el padre gestionará introduciendo el byte correcto, así que tienes que hacer un pequeño injerto en el "código" de respuesta del WaitForDebugEvent simulando que estás enviando información sobre todas las secciones a arreglar, y luego parcheas todos los nanomites.

Un saludo.

Shaddy.


Título: Re: Armadillo 6.60.0140 hueso duro de roer=?
Publicado por: biribau en 15 Junio 2009, 20:56 pm
Gracias Shaddy, esa info es muy interesante...

He avanzado un poco más, he hecho un loader en C suplantador del proceso padre, sin embargo me di cuenta de una cosa: como bien dice Shaddy(aunque en otro sentido) hay partes del programa que no estan aun "listas", no se como explicarlo, quiero decir que hay partes de codigo que el proceso padre inyecta en el hijo. Esto lo hace a traves(por suerte) de una llamada a WriteProcessMemory. Y lo hace ante una la aparición de una excepción concreta (0x80000001) o eso creo... deberia copiar estas 2 paginas de codigo del proceso padre y hacer que las inyecte mi suplantador no obstante tope con otra cosa.
La primera pagina que escribe es a la que saltara el proceso al ejecutarse, la escribe en 401000(una direccion susculenta eh?), sustituyendo los 2 primeros bytes por un buble infinito y atacheando olly al proceso hijo como describi antes aparecemos directamente sobre el codigo del programa.

Pero hay peros, las llamadas a las API's han sido sustituidas por jmp's ¿? a stubs posiblemente, de momento no he analizado mas, pero estoy mas cerca de dumpearlo...

Una cosa más, tengo que repetir todo el rato el mismo proceso para llegar a ciertos estados de un programa, hay alguna manera de automatizar esto??... con un plugin de olly o algo, que me recomendáis que use?, el immunity no me vale porque no le funcionan los plugins del olly... al menos no el phantom.

edit: Corrijo, he encontrado el phantom para el immunity, creo que me voy a pasar a este debugger

Saludos.


Título: Re: Armadillo 6.60.0140 hueso duro de roer=?
Publicado por: Shaddy en 15 Junio 2009, 21:34 pm
Antes se hacía un injerto, y si.. hay herramientas para hacer todo ésto.. en la página de ARTeam tienes el ArmInline.. o el Armaggedon, y algunos que te lo hacen todo sin hacer nada.

Para hacerlo a mano deberías simular los "eventos" del hijo hacia el padre como que hay "secciones" de código que se quieren ejecutar para que lo parchee correctamente y lo deje bien.

Un saludo.

Shaddy.


Título: Re: Armadillo 6.60.0140 hueso duro de roer=?
Publicado por: tincopasan en 16 Junio 2009, 03:34 am
lo estoy descargando para verlo, xq te falta aclarar muchas cosas, por ejemplo si decis q lo unico q no lleva es nanomites tenemos q dar por sentado q tiene debugblocker, copymemII, codesplicing y key. esta bueno para practicar armadillo, en unos días te digo como me fue. espero lo resuelvas.


Título: Re: Armadillo 6.60.0140 hueso duro de roer=?
Publicado por: Amerikano|Cls en 16 Junio 2009, 04:47 am
lo estoy descargando para verlo, xq te falta aclarar muchas cosas, por ejemplo si decis q lo unico q no lleva es nanomites tenemos q dar por sentado q tiene debugblocker, copymemII, codesplicing y key. esta bueno para practicar armadillo, en unos días te digo como me fue. espero lo resuelvas.

he tinco!!! bueno verte por aca  :)


Título: Re: Armadillo 6.60.0140 hueso duro de roer=?
Publicado por: Shaddy en 16 Junio 2009, 09:01 am
ya te digo! Bienvenido tincopasan :). Ponte cómodo :P.

Un saludo.

Shaddy.


Título: Re: Armadillo 6.60.0140 hueso duro de roer=?
Publicado por: tena en 17 Junio 2009, 00:19 am
eeeeeeeeeee Tinco!!!
tanto tiempo

slds


Título: Re: Armadillo 6.60.0140 hueso duro de roer=?
Publicado por: tincopasan en 17 Junio 2009, 05:59 am
gracias! la verdad q me alagan, sabran q no tengo internet asi q cada tanto me hago una escapada al ciber para ver q hay. Mis saludos a todos.


Título: Re: Armadillo 6.60.0140 hueso duro de roer=?
Publicado por: solidcls en 19 Junio 2009, 00:25 am
Por lo que desctribis me juego las bolas que tiene copymem II y si bien nunca tuve en mis manos la version que mencionas en las anteriore la sección code del hijo la va descifrando de a 0x1000 bytes a medida que la neceaita y luego la vuelve a cifrar de manera que si no corregis eso nunca vas a tener al hijo totalmente descifrado do modo que hastaque no soluciones eso de nada te sirve desattachearlo
Solid
Pd: tinco rata todavia no tenes internet ??? Dejate de jodeeeeer



Título: Re: Armadillo 6.60.0140 hueso duro de roer=?
Publicado por: biribau en 19 Junio 2009, 00:38 am
Oh interesante, muchas gracias por esa valiosa info, ya me hice un script en pydbg que extrae los bytes que inyecta el padre en el hijo, eso debe ser a lo que te refieres(lo sigue haciendo de 1000 en 1000), yo pensaba que era el code splicing jeje.... :rolleyes: sin embargo la inyecta solo al principio no veo eso que dices de desencripcion on-demand por llamarlo de alguna manera

Voy avanzando, de momento estoy jugando/hackando bastante el pydbg, añadiendole funciones y tal, como hooks a apis, con logs y eso...

Lo que no me convence mucho es la performance, es muy flexible pero si ya tarda bastante en procesar este pequeño crackme ni me imagino con una app de verdad

Mi objetivo es hacer un deunpacker generico para armadillo en pydbg a ver si me sale antes de que me abandonen las fuerzas jeje

Os aconsejo mucho el pydbg, ya se que no callo con el(que si pydbg para arriba, pydbg para abajo) pero estoy aprendiendo mucho con el sobre como se depura una app en windows y solo hay que saber un poco de python!! Lo ideal fuera que fuese en un lenguaje compilado(a codigo maquina) pero no hay mucho donde escoger, quiza ocaml me hubiera gustado o haskell, el resto no tienen las facilidades de python, aunque no se como andarian de eficiencia...


Título: Re: Armadillo 6.60.0140 hueso duro de roer=?
Publicado por: Amerikano|Cls en 19 Junio 2009, 00:52 am
Mirate el tute del maestro Solid así entenderas de lo que habla  ;D:

http://www.mediafire.com/?llnzmn0d1rw (http://www.mediafire.com/?llnzmn0d1rw)

No pongo el link de la pagina de ricardo porque no recuerdo donde estaba  :xD

saludines por ahi.


Título: Re: Armadillo 6.60.0140 hueso duro de roer=?
Publicado por: tincopasan en 24 Junio 2009, 06:43 am
lo tuve mirando y trae copymen debug nanos y codesplicing, pero basicamente es igual a los armadillos anteriores, por suerte no trae key, asi q no está dificil, lo hice de la forma rapida, usando el armadetach, ya lo voy a hacer a mano y escribire un tute, ando como siempre con F1ACA y a full en el laburo. Pero leyendo tutes de Solid, NCR o incluso el mio de armadillo 6 se puede resolver.


Título: Re: Armadillo 6.60.0140 hueso duro de roer=?
Publicado por: biribau en 29 Junio 2009, 14:24 pm
Efectivamente, ya lo consegui desempacar "a mano"(gracias a ese gran tute de Solid), en realidad desisti de hacerlo con el pydbg. No lo hice a mano total por la cosa del code splicing que no se como va y el rebase de la iat, cosas que te hace el arminline aunque me gustaria saber como
Por otro lado me hice con uno que lleva nanomites y tambien los pude dumpear y arreglar los nanomites pero tambien con herramienta, porque me perdia en el codigo de las tablas de los saltos... ¿lo han cambiado? (para ello segui los tutes de ricardo)

En conclusion, que no han cambiado nada  :o???, las herramientas de siempre para versiones antiguas siguen funcionando!!

O sea, que no es tan duro