Armadillo 6.60.0140 hueso duro de roer=?

Iniciado por biribau, 15 Junio 2009, 02:50 AM

0 Miembros y 1 Visitante están viendo este tema.

biribau

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

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

Shaddy

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.
"Si buscas resultados diferentes, no hagas siempre lo mismo" (Albert Einstein)

http://abssha.reversingcode.com
http://www.reversingcode.com

biribau

#2
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.

Shaddy

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.
"Si buscas resultados diferentes, no hagas siempre lo mismo" (Albert Einstein)

http://abssha.reversingcode.com
http://www.reversingcode.com

tincopasan

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.

Amerikano|Cls

Cita de: 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.

he tinco!!! bueno verte por aca  :)




Mi blog:
http://amerikanocls.blogspot.com

Shaddy

ya te digo! Bienvenido tincopasan :). Ponte cómodo :P.

Un saludo.

Shaddy.
"Si buscas resultados diferentes, no hagas siempre lo mismo" (Albert Einstein)

http://abssha.reversingcode.com
http://www.reversingcode.com

tena


tincopasan

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.

solidcls

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

Solid [CrAcKsLaTiNoS]