Tute Desempacando Armadillo 4.30

Iniciado por tena, 24 Enero 2009, 04:56 AM

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

tena

DESEMPACANDO ARMADILLO 4.30
by Tena
Bueno gente hace mucho que no escribo nada asi que me baje algo de google y o casualidad siempre me tocan estos a mi jeje, un Armadillo 4.30 con Debug-Blocker..

No es nada del otro mundo es mas de lo mismo, pero tenia ganas de escribir asi que me tome de este para hacerlo. No se agregara nada nuevo en este caso, asi que los mas expertos solo pueden darle una hojeada para criticarme, eso si cosas buenas jeje :)

Bueno como dije mi victima esta empacada con Armadillo, pero como sabemos que es eso cierto? a los mas nuevos les dire que hay detectores que te dicen con que esta empacado y compilado un archivo ejecutable.

Yo usare el RDG Packer Detector y lo puedes descargar de aqui:

http://www.egrupos.net/grupo/rdgsoft/ficheros/3/verFichero/29/RDG%20Packer%20Detector%20v0.6.6%202k8.rar

Si vemos que nos dice de nuestro amigo veremos esto:


Vemos que en modo B nos da la version exacta del armadillo, y esta compilado en Visual C++. Pues ahora que sabemos de que se trata tenemos que ver con que regalitos viene este armadillo. Sin mas usare el ArmaFP que es un detector especificamente para armadillo y nos dara mucha info sobre este packer.


Bien vemos que tiene Debug-Blocker, osea correra en dos procesos, y la version es 4.30 como nos dijo el rdg.

Listo el pollo, abramoslo en el Ollydbg, yo usare el de mi amigo Shady, OllyShadow.

Aqui tenes todos los links de descarga de las herramientas que usare:

http://foro.elhacker.net/ingenieria_inversa/herramientas-t183012.0.html



Aclaro que solamente usare el plugin de ollyAdvanced, pero por ahora tendremos desactivados todas las opciones que nos ofrece para esconder al olly.

Si lo ponemos a correr con F9 nos detectara y nos mostrara el siguiente mensaje..



Asi que bueno reiniciemos el olly y cambiemos el segundo byte del PEB (Process Environment Block) el cual es seteado a 1 por el sistema cuando el proceso es debugueado, este flag es comprobado por la api IsDebuggerPresent.

Al iniciar el ollydbg siempre en ebx nos queda apuntando al PEB, asi que para ver el flag BeingDebugged solo basta con ir a ebx+2.

En la ventana del dump hacemos lo siguiente


aceptamos y vemos que el byte esta en 1



lo cambiamos por cero



Ejecutamos con F9 y vemos que no nos detecta, pues sale corriendo el programa.
Bueno ahora para no tener que poner siempre a cero ese byte usare el plugin OllyAdvanced y tildamos la opcion de IsdebuggerPresent.



En este momento si no hemos reiniciado al olly podemos ver los dos procesos corriendo.



Lo que vamos hacer ahora es lograr que el programa corra en un solo proceso asi podremos dumpearlo. Asi que reiniciemos el olly y pongamos un Bp en la api OpenMutexA.



con F2 ponemos el bp..



Damos DOS veces run con F9 y luego Ctrl+F9 para ir al ret de la api.



Para lograr que corra en un solo proceso debemos cambiar el registro eax a 1.

Eliminamos el bp a OpenMutexA para que no caiga mas ahi, y ponemos un nuevo bp en la api CreateThread.

Ctrl+g


y ponemos el bp con F2


damos con F9 y caemos en el bp, hacemos Ctrl+F9 para ir al ret, otra vez mas Ctrl+F9, F7 para pasar el ret, y desde aqui bajamos un poco por el codigo, sin ejecutar nada, hasta encontrar el segundo Call Registro.



ponemos un bp en el Call Registro y damos run, caera ahi, entramos al call con F7 y estamos en el OEP.



Bien nuestro oep es 46DA0B, debemos ver como nos dejo la IAT, para ello nos posicionamos sobre el primer call indirecto y hacemos Follow in Dump Memory Address con el boton secundario del mouse, en la ventana del dump podemos apreciar esto..



umm esta fiero asi jeje, mejores la visual, pongamoslo en Long->Address



Ahi esta, vemos que hay valores malos el cual debemos arreglar, pero antes ya que estamos aqui veamos el inicio de la iat, asi que subamos hasta la primera api que nos muestra.



El inicio es 4ED000, ahora debemos ir al final de la iat, bajemos hasta encontrar la ultima api.



Ahi tenemos el final de la iat, 4ED7A8, debemos saber cual es el tamaño de la iat, entonces hacemos una simple resta Final-Inicio=Tamaño, eso nos da 7A8.

Ahora tenemos que buscar el salto magico que nos permita arreglar nuestra iat, pàra ello elegimos cualquier valor de la iat y le ponemos un hbpw, yo lo hice en la primera api de la iat. Lo que queremos buscar aqui es el momento en que escribe un valor en la iat.



y reiniciamos el ollydbg, ponemos el bp en OpenMutexA y hacemos como antes para hacer que corra en un solo proceso, una vez que cambiamos eax a 1, eliminamos el bp y damos run.



eso no es lo que buscamos, damos run.



Ahora si, vemos que en eax tenemos una direccion de la iat, en ecx tenemos un valor malo que metera en esa direccion, ademas vemos que a ecx se le asigna el valor de ebp-3598, pues pongamos un bpmw en ebp-3598 para ver cuando se escribe ahi el valor bueno o malo.





Vemos que en esta variable va tomando los valores buenos/malos, pongamo el bpmw y demos run con F9



aqui inicializa la variable en cero, demos run otra vez.



aqui le asigna el valor bueno, demos run varias veces hasta que le asigne un valor malo.



Ahi vemos arriba que le asigna el valor malo, mas abajo podemos ver donde le mete el valor bueno, y arriba de este compara la variable con cero, pero como antes le metio un valor malo, pues no es cero entonces salta y evita que se le ponga un valor bueno,  y de esta forma mete finalmente el valor malo en la iat.



Por lo que nuestro salto magico es el JNE de la direccion D1ACACD, y debemos hacer que no salte, por lo tanto debemos poner el flag Z a 1.



Pondremos ese flag a 1 con un script.

Por el momento ya contamos con el oep y el salto magico, datos que necesitaremos en el script, tambien podriamos automatizar para que haga lo del OpenMutexA, pero no lo hare, esa parte la haremos a manopla.

Nuestro script quedaria asi:

// VARIABLES
var oep
var magico

// DIRECCIONES IMPORTANTES
mov oep, 46DA0B// el oep jeje
mov magico, D1ACACD  // el salto magico


// HBP DE EJECUCION
bphws oep, "x"         
bphws magico, "x"


eob bps // PARA QUE PODAMOS COMPARAR AL CAER EN HBPS
run    // F9


// COMPARAMOS EL EIP PARA SABER EN QUE HBP CAYO
bps:
cmp eip,magico
je magia
cmp eip,oep
je fin


// SI CAYO EN EL MAGICO ENTONCES PONGO EL FLAG Z A 1
magia:
mov !zf,1
run

 
fin:
bphwc oep      // ELIMINO EL HBP DEL OEP         
bphwc magico  // IGUAL PERO DEL MAGICO
msg "La IAT fue arreglada"
ret  // TERMINAMOS LA EJECUCION DEL SCRIPT


Bueno reiniciamos el ollydbg, hacemos lo del OpenMutexA para que corra en un proceso y con el plugin OllyScript ponemos a correr nuestra creacion.



Nos deja parado en el oep y con la iat arreglada..



Esta todo en orden jeje..

Por si las moscas verifico y no tiene codigo splicing, que son saltos a una sección fuera del exe...

Bueno entonces queda copiar la cabecera del ejecutable cargado en otro olly, ya que armadillo hace destroyer la cabecera.. Pues abrimos otro olly y cargamos el exe.

Alt+M para abrir elñ memory map, doble clic sobre el header


seleccionamos todo y binary copy


cerramos este olly, volvemos al que teniamos abierto estando parado en el oep, Alt+M para abrir el memory map, doble clic sobre el header, seleccionamos todo y binary paste.

Abro el LordPE, selecciono el proceso y activo el intelliDump



y despues hago el dump full.

Ahora nos queda arreglar la iat con el ImportReconstructor, lo abrimos, seleccionamos el proceso y metemos el oep..



clic en Iat AutoSearch y vemos que calcula los mismos datos que sacamos nosotros, le damos a Get Imports, Show Invalid, y como vemos en la imagen hay algunas que no resolvio, pero esas son separaciones entre las dlls, osea ceros, vamos a eliminarlas, hacemos clic derecho sobre algunas de las que estan seleccionadas como invalidas y le aplicamos un cut thunk, por ultimo fix dump y elegimos nuestro dumpeado.

Lo ejecutamos



y se nos caga el laburo :(

veamos cerremos todos los ollys y dejemos uno, en este carguemos nuestro dumpeado y lo ejecutemos.

Nos sale el error, pausamos el olly con F12, presionamos Alt+F9 para que regrese al codigo, aceptamos el mensaje de error y salta el olly.



Cae justo despues de la llamda a la MessageBoxA y en la pila podemos ver que llama a un archivo con extension chm y con el mismo nombre que nuestro dumpeado, y ahi esta el error no encuentra ese archivo.

Pues la solucion es renombrar nuestro dumpeado y le ponemos el mismo nombre que el archivo original.. con esto ya sale volando y por las nubes jeje...



Espero que se haya entendido algo pues me llevo variosssss minutos meter las imagenes aqui jeje...

Un saludo a todos mis amigos, a Solid que ya hace bastante que no se lo ve por aqui, a Mintaka, a Shady, a  Karmany, a todos, a todos mis amigos de la lista CracksLatinos en donde aprendi mucho, a todos..
   
     byteS










 


Amerikano|Cls

Excelente Tena, ya si decia yo que de donde sacaste tiempo para meter las imagenes aca  :xD, genial el tute, haber si un dia pongo yo uno por aca y dejar fuera el maldito Word  :laugh:.

Genial sigue así  ;)

amerikano




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

karmany

Simplemente fabuloso.
Los que hemos escrito tutes, sabemos que a veces es un tanto.. ¡no sé cómo decirlo!: creo que el adjetivo puede ser "pesado":
Hay que volver a hacer todo de nuevo, explicar hasta el último detalle, tomar las instantáneas adecuadas... en fin un largo etc...

Y además no sólo eso, sino que te has tomado la molestia de subir las imágenes a un hosting... ¡has hecho un trabajo impresionante!. Viendo el pedazo tutorial y el fantástico trabajo que has hecho yo te felicito y te lo agradezco enormemente.

Voy a hacerme una copia del tutorial y de todas las imágenes por si algún día desaparecen que se pueda hacer un nuevo tute en pdf o doc(docx).

Gracias Tena.
Un saludo
karmany

LSL

tena, muchas gracias por el tute, es como dicen los maestros, fabuloso.
con tu permiso me lo guardo en pdf (para que no se me pierda).
Saludos.

LSL.

Mintaka

Felicitaciones Tena por el magistral tute que te has montado y espero de que no se te quiten esas ganas de escribir, porque todos aprendemos algo nuevo o diferente.
Aunque el ArmaFP hubiera encontrado más protecciones activas, estoy seguro de que te las habrías merendado igualmente monstruo, jejeje.
Ah!! y muchas gracias por acordarte de mí.
Nos leemos por ahí.

Mintaka
Si lloras por no ver el Sol tus lágrimas no te dejarán ver las estrellas.(Tagore)

tena

Gracias a todos, la verdad que si costo mucho subir esas imagenes, al terminar de subirlas me dije por fin!! y miro el post y no las mostraba  :(, asi que tube que arreglar los links hasta que me mostro las imagenes :)

Pues es dificil olividar a buenos amigos Mintaka  ;)
y si pues este armadillo vino pelado y le hubiera dado lo mismo si hubiera tenido pelo hasta en la lengua jajaja... y las ganas de escibir nunca se van, siempre estan intactas :)

Saludos a todos y gracias por las felicitaciones....
tena

solidcls

Impecable tute amigo, te felicito, la verdad con la calidad de aportes que hay por aqui, da un poco de rabia cuando algunos quieren las cosas "servidas" y piden que les hagan el trabajo.  quiero ver mas tutes tena !!!
un abrazo
solid.
Solid [CrAcKsLaTiNoS]

Amerikano|Cls

Cita de: solidcls en 25 Enero 2009, 01:57 AM
Impecable tute amigo, te felicito, la verdad con la calidad de aportes que hay por aqui, da un poco de rabia cuando algunos quieren las cosas "servidas" y piden que les hagan el trabajo.  quiero ver mas tutes tena !!!
un abrazo
solid.


Que bueno tenerte por aca nuevamente Solid  :)




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

Shaddy

¿que te puedo decir yo boludin boludete :P? me ha gustado mucho tio, sigue así, aunque la verdad es que yo pensaría en hacer algun tipo de tool para hacer "foro-tutes" de manera más automática porque si no es mortal :S... Así que tiene el doble de mérito, gracias :).

Un abrazo salame :P.
"Si buscas resultados diferentes, no hagas siempre lo mismo" (Albert Einstein)

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

tena

Cita de: Shaddy en 25 Enero 2009, 03:15 AM
¿que te puedo decir yo boludin boludete :P? me ha gustado mucho tio, sigue así, aunque la verdad es que yo pensaría en hacer algun tipo de tool para hacer "foro-tutes" de manera más automática porque si no es mortal :S... Así que tiene el doble de mérito, gracias :).

Un abrazo salame :P.

Pues si, gracias, no vendria nada mal una herramienta como esa :)

slds