Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - karmany

#1171
No te ocurre a ti sólo tena...
Un saludo
#1172
Ingeniería Inversa / Ejemplo 3
30 Septiembre 2006, 11:50 AM
Ejemplo 03

Aunque he puesto ejemplo 03 (por continuar de la misma forma), en realidad son ideas que pueden solucionar alguna dificultad.

Modificar tamaño de una cadena de texto:
Como se ha observado, si podemos abrir el programa con un editor de recursos y modificamos cualquier texto, dándole un tamaño diferente, el editor de recursos hace las modificaciones pertinentes para ajustar el nuevo texto al programa..
El problema viene, generalmente, cuando no podemos abrir con el editor de recursos ese texto que queremos modificar y tenemos que editarlo desde un editor hexadecimal.
Por ej. es posible encontrar "Help" que queremos traducir por "Ayuda" que tiene un byte más.

¿Qué podemos hacer?
Lo primero es conocer cómo se guardan esos datos. Si se abre un programa con un editor hexadecimal y se buscan esas cadenas ya comentadas podemos encontrar por ej. esto:

. .G.I.F...v.e.r.s.i.ó.n...i.m.a.g.e.n.

Esos "." no corresponden al punto. Voy a coger por ej. esto:
"..v.e.r.s.i.ó.n." y su hex: "0E 00 76 00 65 00 72 00 73 00 69 00 F3 00 6E 00".
Es fácil observar que el 0E corresponte al número de bytes (de 76 al último 00) y los demás números (excepto 00) corresponden a las letras de "versión".
También he encontrado programas que en vez de 0E verás un 07 y es el resultado de la longitud de la cadena "versión".


Pueden haber otras combinaciones, pero es fácil razonarlo..
Sabiendo esto podemos encontrarnos con un programa así:

..o.r...h.e.l.p.  -> 04 00 6F 00 72 00 08 00 68 00 65 00 6C 00 70 00
Sencillamente se puede modificar y dejarlo así:

..o...a.y.u.d.a. -> 02 00 6F 00 0A 00 61 00 79 00 75 00 64 00 61 00

El número total de bytes en los dos es: 10 (hex) -> 16 (dec) esto es lo importante.


Otras formas:
-También es posible encontrar tras los datos muchos bytes a 00. A veces, es posible utilizarlos ya que y según qué casos el programa no los va a modificar. Otras veces en cambio, y por experiencia, el programa utiliza esas direcciones para guardar datos temporalmente y estropea nuestro trabajo.

-En algún caso he tenido algún programa en el que sí es posible modificar un texto con el Resource Hacker pero no otro texto que no lo puede abrir..
Abriendo el programa con un Editor Hexadecimal vi que los 2 textos se encontraban próximos..
¿Qué hice?
Pues con el Resource Hacker modifiqué ese texto que me dejaba editar y le puse bastantes caracteres, con lo que conseguí bytes libres para cambiar el otro texto..



#1173
Hay que leerse los tutes con calma, porque recuerdo que había alguno un poco complicado.
De todos modos ya sabes que si algún serial se te atraganta aquí en el foro te intentaremos echar un cable.
#1174
Ingeniería Inversa / Ejemplo02
28 Septiembre 2006, 18:14 PM
Ejemplo 02:

Descargar el archivo parche.rar del archivo zip. El enlace está en el primer mensaje de este hilo.

Utilizando el programa anterior podemos crear nuestros propios parches (repito y como pongo al final de este ejemplo, hay otras alternativas), pero si observáis la interfaz de estos parches no es muy agradable. Así que este ejemplo trata de eso:
Modificar los recursos de un parche generado con Embryo Patcher 1.2.

Programas para desempacarlo: OllyDBG con plugin OllyDump, Import REconstructor 1.6 final, LordPE.

Yo quería hacer un ej. sencillo, desempacando UPX de forma tradicional pero, sin quererlo he encontrado un programa que tiene alguna sorpresa...
Mi parche generado lo he llamado: parche.exe:


Imagen26

Si examinamos el archivo con el Peid nos dice que está empacado con UPX. Probé:
-Desempacarlo con UPX
-Utilizar el plugin del ej. anterior
Y nada de nada, daba error en todos, así que toca desempacarlo a mano:

Existen muchísimos tutes de cómo desempacar UPX. En el ejemplo anterior pongo un enlace para gente sin conocimientos. He hecho un tute paso a paso de cómo desempacar mi parche.exe. Si no lo tienes claro, descarga el archivo Explicación.doc. Lo que explico aquí a fin de evitar un mensaje muy largo es general.

Descargar el archivo Explicación.doc del archivo zip. El enlace está en el primer mensaje de este hilo.


Desempacado de parche.exe

1) Abro parche.exe con el Olly, veo que lo primero que aparece es un PUSHAD, así que utilizo una forma para obtener el OEP (Punto de entrada, Entry Point), que explico en el archivo anterior.
El OEP que obtengo es 401000.

2) Ahora lo que voy a hacer es dumpearlo con el plugin OllyDump. Lo único que destildo es "Rebuild Import" porque voy a buscar los datos de la IAT manualmente. El archivo dumpeado lo llamo: dumpeado.exe

3) Ahora sólo queda arreglar la IAT:
Botón derecho -> Search For -> Binary String y busco el famoso "FF 25"
Lo primero que me ha encontrado ha sido un salto en 401826.
Pulso: botón derecho -> Follow In Dump -> Memory Address
y obtengo Inicio, Fin y tamaño de la IAT:
INICIO de la IAT: 00402000
FINAL de la IAT:  00402080
Tamaño: 80

Si esto no se entiende descargar el archivo que he comentado antes que viene bien explicado.  :)

Con estos valores ya puedo abrir el Import REconstructor y attachear "parche.exe". E introduzco abajo a la izquierda los siguientes valores que he obtenido:

OEP:   00001000
RVA:   00002000
Size:    00000080

Pulso en Get Imports y observo que todas las entradas son válidas. Parece todo correcto, así que pulso en Fix Dump, elijo el archivo dumpeado.exe, que había creado con el plugin OllyDump y se crea satisfactoriamente el archivo: dumpeado_.exe.


Bueno mi intención era llegar hasta aquí, pero si ejecuto dumpeado_.exe observo con sorpresa que el texto es ilegible y el programa NO funciona correctamente... :o


Imagen27

En este punto me equivoqué en mis razonamientos (hace años de esto jeje, todos hemos sido novatos) y no saqué nada claro, así que le mandé mi desconcierto y sorpresa a Ricardo Narvaja para que me enseñara algún camino. Gracias a él pude continuar y no es difícil... Gracias Ricardo..


Advertencia en OLLYDBG

Abrí el programa desempacado (dumpeado_.exe) con el Olly, y me sale un aviso:

"module 'dumpeado' has entry point outside the code (as specified in the PE header). Maybe this file is self-extracting or self-modifyint. Please keep it in mind wen setting breakpoints!!"

Vaya... tiene el OEP fuera del código!?

Después de darle vueltas a la cabeza pulsé Alt + M y observé lo que el OllyDBG me decía:
Address           Size           Section      Contains
00400000     00001000                        PE header
00401000     00005000        EMB0
OEP = 401000

El Olly tiene razón. Pues voy a modificar para que el OEP esté dentro del código. Cierro el OllyDBG.
Para esto utilizo el programa LordPE:
-Lo abro, pulso en PE EDITOR y selecciono el programa dumpeado_.exe. Se abre una ventana con toda la información.
-Veo que en BaseofCode pone 00006000. Lo voy a modificar por 00001000. Pulso en Save y Ok.                                                
Ahora ya podemos abrir el dumpeado_.exe con el OllyDBG sin ningún problema. Además aparece más información importante.. ;)


CreateFileMapping, MapViewofFile

Después de observar el código hay unos saltos importantes que hay que conocer: CreateFileMapping, MapViewofFile.. como yo tampoco lo tenía muy claro busqué información:
http://www.formauri.es/arrobamasmas/Articulos/indexArticulo.php?art=1

Antes de esto abre un archivo y calcula el tamaño.
Ricardo me comentó que si en vez de abrir el archivo dumpeado_.exe pongo en la misma carpeta el original empacado "parche.exe" y le modifico el nombre a "dumpeado_.exe" el programa funciona perfecto..
Así que con todos estos datos me puse manos a la obra:


Obtención de los datos

Cerré todo programa. Abrí el "parche.exe" con el Olly, me puse en el OEP(ya explicado) y observé dónde "coge" los datos:
Analizándo el código lo vi claro:
1º Abre el archivo "parche.exe"
2º Busca en la dirección B11400, 3A bytes. Mirar:

4010F2    MOV EDI,DWORD PTR DS:[4033F4] -> EDI = B10000
4010F8    ADD EDI,DWORD PTR DS:[4033B5] -> EDI = EDI + 1400 = B11400
4010FE    MOV ESI,EDI
401100    MOV ECX,DWORD PTR DS:[4033A7] -> ECX = 3A
401106    MOV EDI,DWORD PTR DS:[4033F8] -> EDI = 146A00

Y un poco más abajo:
40110D    REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]

Es decir, coge 3A bytes de la dirección B11400 y los pone en 146A00.
Solamente hay que saber cómo se ponen en B11400 los bytes, , para resolver el misterio...porque los datos, más abajo los toma de 146A00.


¿Quién pone los datos en B11400?

Bueno.. el programa abre un archivo (él mismo) y luego hace:
CreateFileMapping, MapViewOfFile...
Aquí está el quid de la cuestión... ¡A ver qué hace esto!

Voy a poner un Breakpoint justo después de MapViewOfFile.
Observo que retorna EAX con un valor = B10000 y si pulso Alt + M veo que se ha creado una nueva sección en la dirección: B10000 y pone "parche.exe".. interesante...

Voy a ver qué hay en esa sección.. Así que voy a la ventana de dumpeado pulso botón derecho -> goto -> expresion y pongo 00B10000.
Observo todo el código detenidamente, abro con un editor hexadecimal el "parche.exe" y veo que es exactamente igual.
Cuando vi esto, ya tuve las cosas bien claras..
Si la dirección de los 3A bytes es B11400 no cuesta nada apreciar que el Offset es 1400.


Resumen

Resumen de todo esto: el programa copia 3A bytes que tiene en la dirección (Offset) 1400 y los pone en 146A00. Después coge los datos de aquí..
¿¿Qué pasa en el desempacado?? pues que los datos no están en esa dirección. No existen. Esto es posible si el programador ha primero empaquetado su aplicación y luego ha modificado el archivo insertando los datos..
¿Qué voy a hacer para hacer funcionar el archivo desempacado?
Voy a copiar los 3A bytes que están en el Offset 1400 del archivo original empacado (parche.exe) y los voy a pegar por ej. en Offset 8300 del archivo desempacado. Esto lo hago todo y fácilmente con el Ultraedit32.
Observación importante:Esto que estoy haciendo de pegar 3A bytes en el Offset 8300 que he visto vacío y no se modifica, quiero dejar claro que no está bien hecho. Hacerlo bien sería crear bytes nuevos (por ej. con el programa Topo), que con seguridad no se van a modificar y ahí pegar los 3A bytes.

Ahora solamente queda decirle al programa que lea los datos en 8300 y no en 1400.
Recordando de arriba:
4010F8    ADD EDI,DWORD PTR DS:[4033B5] -> EDI = EDI + 1400 = B11400
Vemos que el 1400 está en 4033B5. Así que sólo queda sustituir el 14 de 4033B6 por 83. Por supuesto con el editor hexadecimal.
Con todo esto resuelto voy a ejecutar mi programa:


Imagen28

Y compruebo que funciona bien..

Ahora se puede ya modificar todo con un editor de recursos. Extraño es que el Resource Hacker no me deja pero el Exescope y el XN Resource sí.

Dirección Web y correo:
Una cosa curiosa que podéis hacer es que si queréis cambiar la dirección Web o el correo electrónico, solamente hay que modificar con un editor hexadecimal esto comentado y listo.


No quería extenderme tanto, pero ya he comentado en este amplio tutorial que modificar un programa puede ser muy trabajoso, y con este último ejemplo ha quedado demostrado..

Consideraciones finales sobre Embryo Patcher v.1.2:
Después de utilizarlo unas cuantas veces observé que el programa tiene algún bug y se cierra no sé por qué. (Con el archivo original.)
También al traducirlo observé que el límite de cambios de 2 archivos es 255.
Pienso que hay muchos y mejores programas que este, lo comento por si alguien aprovechando este tutorial quiere utilizar el Embryo Patcher.
Por ej. el programa diablo2oo2's Universal Patcher tiene muchísimas más opciones y es un programa en desarrollo y muy bueno... Además Shaddy nos hizo un excelente tutorial del manejo de este gran programa. Descarga:
dUP2.Diablo Universal Patcher v2.17 by ShaDDy
Su página web es la siguiente:
http://diablo2oo2.di.funpic.de/dup.htm

#1175
Eso es porque no has leído los tutes...
Si por ejemplo, el 14 te pide pass, es porque Ricardo en el 13 te pide que con la explicación que él ha dado, resuelvas tú un crackme. La solución al crackme 13 es la pass del 14..
;D
#1176
Ingeniería Inversa / Re: No se con que se protegio
25 Septiembre 2006, 22:48 PM
Súbelo a ver si podemos hacer algo..
#1177
Software / Re: Como bloquear dc de datos
25 Septiembre 2006, 00:21 AM
Estás haciendo una pregunta..
Yo hace tiempo utilicé dos programas: TZ copy protection y TZ exe protector.
Son programas gratuitos (el exe no estoy seguro)e incluso el TZ copy protection en su página web que te pongo, tienes el código fuente en ¡VB!.

Echa un vistazo a esta página a ver si es esto lo que buscas:
http://www.pandreonline.com/tzcopy/
#1178
Windows / Re: Programa Compare 2 ejecutables
24 Septiembre 2006, 19:18 PM
Probablemente con el tiempo, quieras personalizar tus Parches, ya que el CodeFusion está en Inglés.. y es un "poco feo"
Que sepas que quité la protección del CodeFusion para poder modificar los recursos. También he traducido el Embryo Patcher 1.2 al español..

Si quieres saber más sobre esto último que te comento echa un vistazo a este tutorial que hice:
http://foro.elhacker.net/index.php/topic,134513.0.html
#1179
Ingeniería Inversa / Ejemplo1
24 Septiembre 2006, 18:33 PM
EJEMPLOS

En este apartado iré añadiendo algunos ejemplos de cómo hago yo para modificar algunos recursos..

Ejemplo01:

Ya que nos encontramos en el subforo de Ingeniería Inversa, voy a aprovechar este tutorial para modificar un programa que tiene alguna curiosidad. (Nota: El programa del que voy a hablar podría ser útil hace años pero actualmente no recomiendo su uso, al final del ejemplo2 explico alternativas y pongo el porqué. Sólo descargarlo para seguir este tutorial.)
El programa se llama: Embryo Patcher versión 1.2:


Imagen21

Este programa permite comparar dos archivos, original y parcheado y tras analizarlos genera un ejecutable para convertir el archivo original. En definitiva un programa para generar parches.

Descargar el archivo Embryo Patcher 1.2 del archivo zip. El enlace está en el primer mensaje de este hilo.

Si se ejecuta este programa, observamos primeramente que ni el botón de About (acerca de), funciona. Si intentamos abrir el Embryo Patcher con nuestro Resource Hacker veremos que no nos deja.. ¡empezamos bien! – (resolveremos todo esto)

Analizando
Lo primero que siempre suelo hacer es ver de dónde viene el programa, su autor etc... ¡Nada! su página web ha desaparecido.
Analicé el programa para averiguar con qué ha sido compilado y todos los programas que utilicé (RDG Packer Detector, File Inspector, Peid...) me indicaron que el compresor era:


Imagen22

Desempacar UPX es muy sencillo, es lo más básico para cualquier novato en ingeniería inversa. Se puede desempacar de muchas formas:
- Usando el mismo UPX: http://upx.sourceforge.net/
- Desempacándolo manualmente para Re-Newbies: Desempacar UPX para novatos por Shaddy
- Usar herramientas como vamos a hacer aquí. En este caso vamos a usar un excelente programa para editar recursos que tiene un plugin para desempacar perfectamente UPX, el programa es:

Resource Tuner: Es un programa para editar recursos como los que he comentado en este tutorial. No es gratuito y la versión de prueba es para 30 días. Si alguien decide comprarlo tal vez estaría más interesado en PE Explorer que del mismo autor y engloba a Resource Tuner. La ventaja que tiene como ya he comentado es que tiene un plugin para UPX.
Página Web:
http://www.restuner.com/

Lo único que hice con este programa es abrir el Embryo Patcher y volverlo a guardar. Ya desapareció UPX. ¡Ahora ya se puede empezar a editar los recursos!.

Lo primero que quise hacer es intentar averiguar por qué no funciona el botón "Acerca de". Así que abrí el programa con el conocido Resource Hacker y me fui a dialog y a la ventana Acerca de. (AB_DIALOG). Algo extraño hay ahí. Hay cuatro LINKS y sólo se ven los recuadros, no hay nada de texto. Tal vez el problema sea este. Voy a intentar solucionarlo.
Así que se me ocurrió modificar en el texto esos "LINK" por STATIC a ver qué ocurría.
Por ej. en:
CONTROL "devon@wizard.ae.krakow.pl", 3400, "LINK", 0x50000100, 78, 61, 100, 8

Sustituí el "LINK" y quedó así:
CONTROL "devon@wizard.ae.krakow.pl", 3400, STATIC, 0x50000100, 78, 61, 100, 8

Pulsé en Compilar Script y se modificó a:
CONTROL "devon@wizard.ae.krakow.pl", 3400, STATIC, SS_LEFT | SS_NOTIFY | WS_CHILD | WS_VISIBLE, 78, 61, 100, 8

¡Y apareció el texto! Sólo quedaba saber si funcionaría el link, si se abriría "Acerca de" y si el cursor sería la mano..
Cambié los 4 LINKS compilé y guardé el ejecutable. Lo abrí y perfecto:


Imagen23

A partir de aquí con el Resource Hacker no hay más misterio. Traduje el programa, que no tiene mucho que traducir. Después para traducir los Tool Tips y demás diálogos que no aparecen en el Resource Hacker, utilicé el UltraEdit 32. Me quedó así:


Imagen24

En este momento parece que ya hemos acabado ¿no?. Pues no, ya que estamos "arreglando" el programa vamos a dejarlo bien acabado...
Sólo nos queda darle la apariencia de Windows XP si nos deja y ya está.

Voy a utilizar un programa que ya he explicado más arriba: XN Resource Editor.
Como comenté, este programa tiene una opción muy interesante que es la de añadir el recurso del archivo MANIFEST. Eso es lo que voy a hacer añadir este recurso.
Así que abro el XN Resource Editor -> File -> Open y selecciono el Embryo Patcher que ya tenemos traducido.
Voy a Resource -> Add Resource y selecciono de la lista el XP Theme Manifest. Guardo el archivo y ya tenemos todo arreglado:


Imagen25

En realidad tienen que salir los botones como si estuvieran sobre otro botón. Para arreglar esto, desde el resource hacker hay que señalar el botón, editar control y quitar porque estará en amarillo: WS_EX_STATICEDGE.

Ahora sí que podemos decir que hemos "arreglado" el programa y dado apariencia XP.

Dentro de poco pondré el segundo ejemplo que también tiene que ver con este programa.

Un saludo.

PD. ¿Habéis probado a utilizar el Resource Hacker con un archivo MANIFEST? :-).
#1180
Windows / Re: Programa Compare 2 ejecutables
24 Septiembre 2006, 02:25 AM
Te dejo unos programas:

CodeFusion v3.0 Es un generador avanzado de parches para Win 9x/NT. Permite comparar dos ficheros y crear un ejecutable que contenga las diferencias que se aplicaran al EXE de destino. Consta de interfaz, chequeo CRC32, y permite el parcheado directo mediante el desplazamiento dentro del archivo o bien mediante búsqueda y reemplazo de una cadena de bytes.

Descarga directa:
http://download.softpedia.ro/software/UTILE/CODEFS30.ZIP

Después de probarlo, el CodeFusion aunque un pelín complicado , pienso que es el más interesante..


Embryo Patcher v1.2 Compara dos ficheros y escribe las diferencias a un pequeño ejecutable de Win32. Rápido y fácil incluye interfaz de usuario.
Éste lo he utilizado y es muy muy fácil de utilizar.

Descarga directa:
http://80.32.232.60/soft/embryo.zip


PatchEngine v1.33 Utilidad con interfaz de usuario que permite la generación de un ejecutable conteniendo las diferencias entre dos archivos. Permite elegir el ícono para el ejecutable.

Descarga directa:
http://80.32.232.60/soft/patchengine.zip

Espero que sepas y puedas utilizar alguno.. un saludo