Problema al re-empacar conUPX [RESUELTO]

Iniciado por OrtaY, 31 Octubre 2011, 17:53 PM

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


OrtaY

Cita de: apuromafo en  3 Noviembre 2011, 02:15 AM
pensemos que tenemos el upx, comienza algo asi

1) pushad
2) descompresion de apis
3)popad
4) salto al oep
5) en el oep!!!!!


ahora bien, desempacado, pero esta aun 1-4, debes nulificar ese sector, que en si no sera usado, luego al tomar el upx y empacarlo denuevo al oep, deberia ir denuevo al mismo entrypoint anterior, al encontrar que ya tiene Pushad, posiblemente desalinea mal o bien detecta que las apis estan ok, por lo cual no verifica las secciones ni overlay, secciones icono ni nada

por ende Como hacerlo mas rapido?
1) desempacar rapido con Pe Xplorer de heaventools
2) nulificar la sección donde antes estaba
3) volver a empacar, luego de REPARADA LA IAT
empacar y cardar la IAT denuevo.

saludos Apuromafo


He usado el Pe Explorer pero no ha podido desempacar el ejecutable original, me imagino porque ademas de estar empacado, esta protegido con armadillo v6, concretamente me lanza esto:

06.11.2011 16:37:22 : Open File: C:\A\original.exe
06.11.2011 16:37:22 : File size: 3072000 bytes.
06.11.2011 16:37:22 : Using the Plug-in subsystem...
06.11.2011 16:37:22 : Upack Unpacker Plug-in: Executing...
06.11.2011 16:37:22 : Upack Unpacker Plug-in: <Upack> The file is not Upacked.
06.11.2011 16:37:22 : Upack Unpacker Plug-in: not accomplished.
06.11.2011 16:37:22 : UPX Unpacker Plug-in: Executing...
06.11.2011 16:37:22 : UPX Unpacker Plug-in: <UPX> The file is not UPXed.
06.11.2011 16:37:22 : UPX Unpacker Plug-in: not accomplished.
06.11.2011 16:37:22 : The Plug-in subsystem finished.
06.11.2011 16:37:22 : MS-DOS Header Size: 0040h
06.11.2011 16:37:22 : MS-DOS Header: OK
06.11.2011 16:37:22 : Next Header OFFSET: 0100h
06.11.2011 16:37:22 : PE Signature: OK
06.11.2011 16:37:22 : Calculating Checksum: SUCCESS (Header's Checksum: 002F023Ch / Real Checksum: 002F023Ch)
06.11.2011 16:37:22 : EOF Position: 002EE000h  (3072000)
06.11.2011 16:37:23 : Error! (Step: Examining Exports)
06.11.2011 16:37:23 : Precompiling Resources...
06.11.2011 16:37:23 : Errors detected! Opening file in SAFE MODE...
06.11.2011 16:37:23 : Warning! Import section follows the Resource section.
06.11.2011 16:37:23 : Done.


Por tanto lo he desempacado manualmente (dumpeado y reparacion IAT, quedando un ejecutable que funciona perfectamente) luego he rellenado con ceros toda la region del pushad, he cambiado el nombre de las secciones UPX0 y UPX1 por .code y .data, he actualizado el BaseCode, y ya ni el RDG me detecta el UPX, pero cuando lo intento volver a empacar con UPX, me tira un archivo ridiculamente pequeño que por supuesto no es funcional.

El original empacado pesa 3mb, el desempacado 10mb y el re-empacado solo pesa 119kb!

He probado con otros crackmes empacados con UPX y armadillo y pasa lo mismo.

Por tanto, sigo sin conseguir que el desempacado manual pueda volver a ser empacado con UPX, existe alguna forma de modificar las secciones o algun truco para que el empacado UPX sea viable?

Gracias por los papers que me has recomendado, pero no esta en ellos la solucion a mi problema, pero me ha gustado tu tuto del peid customizado :)

Si alguien se le ocurre algo que me ayude, se lo agradeceria enormemente.

Un saludo, OrtaY

OrtaY

#12
Problema al re-empacar reempacar volver a empacar UPX RESUELTO


Bueno, por fin he conseguido resolver este problema que me traía de cabeza y al final era una tontería!!!!!!


Gracias a los que han participado en este hilo aportando sus conocimientos e ideas.

Todo era una cuestión de flags, lo explico a continuación, por si a alguien se le presenta el mismo problema que a mí, que necesita volver a comprimir con upx un archivo desempacado manualmente.

El empacador UPX antes de iniciar la compresión, mira que no esté previamente empacado, comprobando que las primeras secciones no se llamen UPX0 y UPX1.

Pero la realidad es que a pesar de que cambiemos el nombre de estas secciones, restauremos el BaseOfCode y el BaseOfData, aunque ahora podremos volver a empacar el archivo con UPX, éste resultará un archivo inservible, y podemos darnos cuenta de esto al ver el tamaño ridículo del nuevo archivo, es obvio que hay información que no se ha empacado!

Esto ocurre porque el UPX al crear las nuevas secciones UPX0 y UPX1, le asigna valores de flags erróneos, de modo que si desempacamos manualmente y no corregimos estos errores, será imposible el re-empacado.

Aunque se podrían hacer más cambios para adecuar las flags al contenidos de las secciones, con cambiar un único valor nuestro ejecutable permitirá volver a ser empacado, así pues, cambiaremos la flag de la sección UPX0 que indica que la sección contiene datos no inicializados por otra que indique que contiene código ejecutable y datos inicializados, es decir, cambiamos la cadena E0000080 por E0000060

Con este simple byte cambiado ya podremos volver a empacar nuestro ejecutable con UPX!!!

Espero que os sea de utilidad, un saludo, OrtaY




apuromafo CLS