viernes, 18 de febrero de 2011

Nuevo Plugin para FUU - dePFE

crosspost de: http://pastafr0la.wordpress.com/2011/02/18/probando/

Gracias a "El Tio Pastafrola" por la colaboracion y por prenderse con el proyecto FUU!.

--

Hola amigos, hoy les traigo una pequeña reseña sobre el packer PFE CX v0.1 con el cual hice mis primeros pinitos en TitanEngine y FUU

primero echemos una mirada a la GUI del protector

img1

haremos una muestra con el maximo nivel de compresion y todas las opciones activadas, en mi caso usare calc.exe para probarlo.

Este protector corre en dos procesos como podemos ver en la imagen

img2

asi que lo cargamos con OllyDBG y buscamos las llamadas a CreateProcessA para caer en la zona caliente del packer

img3

aca estamos en la zona caliente, vemos como crea el proceso hijo en modo suspendido, alloca memoria y despues le escribe algunas cosas en memoria :)

Pongamos un bp en el WriteProcessMemory que le sigue al VirtualAllocEx y miremos que tiene el buffer

img4

ese MZ corresponde a la cabezera de nuestro protegido, en mi caso calc.exe. Esto significa que no tendremos que trabajar con el segundo proceso porque el primero ya nos da el programa en bandeja de plata.

Lo unico que tenemos que hacer ahora es alinear y dumpear

Para alinearlo, cambiamos el RawOffset y RawSize de cada seccion por su VirtualOffset y VirtualSize respectivamente.

img5

y hacemos un dumpeado de memoria con por ejemplo, el dumper del plugin IsDebuggerPresent

img6

Obteniendo un PE valido y funcional.

Automatizarlo con TitanEngine es bastante sencillo, los pasos a seguir serian:

  • Setear un BP en WriteProcessMemory con la funcion SetAPIBreakPoint.
  • El callback encargado de procesar ese breakpoint, alineara y dumpeara la imagen :)

Para dumpear regiones de memoria tampoco nos tenemos que complicar mucho, ya que TitanEngine nos provee de la funcion DumpMemory.

Eso es todo amigos, un packer facilito siempre y cuando ataquemos el primer proceso. En las primeras pruebas arranque trabajando con el segundo proceso y la verdad es que cuesta mucho trabajar con los 2 procesos a la vez debido a que el SDK aun no nos provee de dichas funciones y lo tenemos que hacer a mano.

Todo este proceso fue automatizado en el siguiente plugin: bin src

p.d. Para los que estan interesados en crear algun plugin para FUU, les paso la buena noticia que ya no es necesario el uso de la funcion _DoUnpack para elegir setear nuestro primer callback.

Ahora directamente trabajamos con InitDebugEx que como ultimo argumento nos permite definir un bp que se ejecutara cuando llegue al callback del debuggee.

Tengan bien presente esto, ya que si tratan de definir bp en API's sin haber iniciado el DebugLoop, esta funcion no procesara el LOAD_DLL (CodeException 06) y por lo tanto no podran setear los bp debido a que no estan cargadas las dll's.