=-|================================================-{ www.enye-sec.org }-====| =-[ Ocultando UPX fácilmente (modo experimental) ]-==========================| =-|==========================================================================| =-[ por \0x90\ <0x90@enye-sec.org> ]-========================-[ 24/09/2005]-=| -== Presentación del documento ==- He decidido hacer este documento, por qué mucha gente siempre quiere hacer más dificil la parte de descompresión, esto es una posible optativa a no tener que hacer su propio compresor, pero claro como ya se sabe mucha gente lo que hace es crear sus propios mods del UPX (quien no sepa que es esto) que busque en http://www.google.es, lo que vamos a tratar en este documento es una forma experimental y muy fácil creada por mí, para hacer un poco más difícil al "cracker" su tarea. PD : Se me ocurrió idear la técnica por qué vi algo parecido en un crackme que se explicaba en: http://www.disidents.com/ascii/cracking/articulos/analiscrackemp.html Documento creado por S-P-A-R-K. Con esta técnica al decomprimir con el propio UPX nos dirá que no se puede. Y el PEiD no sabrá que es. -== Al ataque ==- Para ver como se hace, vamos a usar en eNYe CraCKmE v1.0 desprotegido, podéis descargaros el crackme desprotegido de la página oficial del mismo : http://www.enye-sec.org o del directorio temporal http://www.fr33project.org Una vez que lo tengamos vamos a pasarle el PEiD al ejecutable desprotegido yo he llamado al ejecutable enye.exe : File : C:\unpakk\enye.exe Entrypoint: 00001000 EP Section: .text File Offset: 00000400 First Bytes: 6A,00,E8,4D Linker Info: 5.12 Subsystem: WIN32 GUI Vemos que está ensamblado con el MASM32. Vemos las secciones : .text, .rdata, .data, .rsrc Como vemos el ejecutable está correcto. Ahora nos bajamos el UPX y comprimimos el ejecutable: C:\unpakk>upx.exe -9 enye.exe Ultimate Packer for eXecutables Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 UPX 1.25w Markus F.X.J. Oberhumer & Laszlo Molnar Jun 29th 2004 File size Ratio Format Name -------------------- ------ ----------- ----------- 6144 -> 4608 75.00% win32/pe enye.exe Packed 1 file. Ya lo tenemos comprimido, vamos a pasarle el PEiD: File : C:\unpakk\enye.exe Entrypoint: 00006560 EP Section: UPX1 File Offset: 00000960 First Bytes: 60,BE,00,60 Linker Info: 5.12 Subsystem: Win32 GUI Vemos: UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo Vemos las secciones: UPX0, UPX1, .rsrc Nuestro objetivo es conseguir que el PEiD no muestre nada relacionado con el UPX, primero cambiaremos el nombre de las secciones para esto haremos lo siguiente : Abrimos el enye.exe con un editor hexadecimal y haremos lo siguiente: REEMPLAZAR (marcamos en type text string, así es en el hex workshop) : FIND : UPX REPLACE : ENY Damos a Aceptar y a Replace ALL, se nos reemplazaran 3, ahora vamos de nuevo a reemplazar : FIND : rsrc REPLACE : ENYE Damos a Aceptar y a Replace ALL, se nos reemplazará 1. Guardamos los cambios en el ejecutable y le pasamos el PEiD de nuevo : File : C:\unpakk\enye.exe Entrypoint: 00006560 EP Section: ENY1 File Offset: 00000960 First Bytes: 60,BE,00,60 Linker Info: 5.12 Subsystem: Win32 GUI Vemos: UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo Vemos las secciones: ENY0, ENY1, .ENYE Ya tenemos las secciones cambiadas de nombre, el siguiente paso es evitar que se nos muestre el : UPX 0.89.6 ... Markus & Laszlo Para eso abrimos un depurador con el ejecutable y cuando estamos en el entrypoint vemos : ... 00406560 > $ 60 PUSHAD ;<- Estamos aquí. 00406561 . BE 00604000 MOV ESI,enye.00406000 00406566 . 8DBE 00B0FFFF LEA EDI,DWORD PTR DS:[ESI+FFFFB000] 0040656C . 57 PUSH EDI 0040656D . 83CD FF OR EBP,FFFFFFFF 00406570 . EB 10 JMP SHORT enye.00406582 00406572 90 NOP 00406573 90 NOP 00406574 90 NOP 00406575 90 NOP 00406576 90 NOP 00406577 90 NOP 00406578 > 8A06 MOV AL,BYTE PTR DS:[ESI] 0040657A . 46 INC ESI 0040657B . 8807 MOV BYTE PTR DS:[EDI],AL 0040657D . 47 INC EDI 0040657E > 01DB ADD EBX,EBX ... Lo primero que vamos a comprobar es por donde puede saber el PEiD que es un UPX, ahora vamos a NOPEAR desde el PUSHAD (incluido) hasta el primer JMP, hacemos una copia del ejecutable y guardamos los cambios, en el OllyDbg nos vale con : Boton derecho en el centro de la ventana de las instrucciones - Copy To Executable - All modifications - Copy ALL, se nos abre una ventana nueva botón derecho en ella : Save File y damos al enye.exe, (tener copia de seguridad). y abrimos con el PEiD. Y como vemos sigue diciendonos que es UPX, así que lo único que hemos hecho es cargarnos el ejecutable. Borramos el ejecutable modificado y ponemos de nuevo el original, haciendo otra copia de seguridad, esta vez NOPEAMOS desde : 00406578 > 8A06 MOV AL,BYTE PTR DS:[ESI] a : 0040657E > 01DB ADD EBX,EBX Y guardamos los cambios en el ejecutable, y pasamos el PEiD : Nothing found * Ya no nos dice lo del UPX, bien, aunque el ejecutable no funcionará obviamente, parece ser que comprueba por esa zona, vamos a buscar una forma de modificar una parte sin alterar el comportamiento : Restauramos el ejecutable en buen estado (hacemos otra copia de este) y abrimos con un depurador : Vamos a mirar desde la zona : 00406578 8A06 MOV AL,BYTE PTR DS:[ESI] a : 004066AF .-E9 4CA9FFFF JMP enye.00401000 Si nos fijamos encontraremos un : 0040658B . B8 01000000 MOV EAX,1 Vamos a poner en esa instrucción un : XOR EAX,EAX Tiene que quedar (en OllyDbg) : 0040658B 33C0 XOR EAX,EAX 0040658D 90 NOP 0040658E 90 NOP 0040658F 90 NOP Debajo del primer NOP metemos : INC EAX y debajo un XCHG EBX, EBX quedando : 0040658B 33C0 XOR EAX,EAX 0040658D 40 INC EAX 0040658E 87DB XCHG EBX,EBX Damos al PLAY en en OllyDbg y se nos abre el programa, ahora guardamos las modificaciones como expliqué anteriormente. Pasmamos el PEiD : File : C:\unpakk\enye.exe Entrypoint: 00006560 EP Section: ENY1 File Offset: 00000960 First Bytes: 60,BE,00,60 Linker Info: 5.12 Subsystem: Win32 GUI Vemos: Nothing found * <- Antes aquí salía lo de UPX Vemos las secciones: ENY0, ENY1, .ENYE ¡Y ya está!, el PEiD no sabe con qué está comprimido y además las secciones las hemos puesto un nombre inventado por si acaso. Ahora probamos a descomprimir con el propio UPX : C:\unpakk>upx.exe -d enye.exe Ultimate Packer for eXecutables Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 UPX 1.25w Markus F.X.J. Oberhumer & Laszlo Molnar Jun 29th 2004 File size Ratio Format Name -------------------- ------ ----------- ----------- upx: enye.exe: CantUnpackException: file is modified/hacked/protected; take care !!! Unpacked 0 files. Como vemos: CantUnpackException: file is modified/hacked/protected. Así que con esta fácil técnica no nos detectará el UPX ni el PEiD ni podemos descomprimirlo directamente con el UPX. El cracker tendrá que currárselo más. Posibles problemas : Como andamos tanto con el depurador, entre cada prueba de PEiD después de cada modificación cerrar el OllyDbg y abrirlo, no vaya a dar algún error, y siempre cerrar el PEiD cuando andemos con el depurador. -== Despedida ==- Pues esto ha sido todo, espero que les haya gustado y les funcione, dudas o lo que sea : \0x90\ - 0x90@enye-sec.org http://www.enye-sec.org -== Creditos ==- Dedicado a : S-A-R-K por ese documento que me dio otra idea para hacerlo. Y al canal #crackers del IRC-HISPANO. =-|================================================================ EOF =====|