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

#981
Yo he utilizado mucho Inno Setup Compiler y personalmente te lo recomiendo para tu aplicación.
El principal inconveniente es que hay que trabajar con script en Delphi (o similar), pero una vez que sabes utilizarlo es un compilador muy potente y te permitirá hacer instalaciones personalizadas con mucha calidad y fuera de errores.

Respecto a tu problema, primero veo que la has hecho muy sencilla (habrás utilizado probablemente el asistente) y deberías observar sobre todo las rutas donde tienes o donde pegas los archivos, ya que de un ordenador a otro varían. No comentas si es el instalador el que te falla o es el Inno Setup.

También tienes que indicar cuál es el fallo que te indica...
#982
Parece ser que desde hace ya unos días, la página http://www.pic2up.net/ está sufriendo algún tipo de problema y no permite ver las imágenes alojadas en el host.

Esto también es un problema para nuestro foro, ya que muchas imágenes fueron alojadas en dicho host y no se pueden ver.

Esperaremos un tiempo prudente a ver si se solucionan estos problemas y aparecen de nuevo las imágenes, si no, buscaré un nuevo host y poco a poco iré subiendo de nuevo todas las imágenes que tengo guardadas..

Un saludo
karmany
#983
Otra cosa curiosa por ej. en el notepad de XP es que la Import Table Address ya está direccionada y aunque la Image Import Descriptor está totalmente correcta si se modifica cualquier dato de una API que rellene la IID veréis que el programa se ejecuta perfectamente. Por ej. se puede buscar cualquier string de cualquier función de una API y modificar el nombre completo por algo que no exista y el notepad sigue funcionado perfectamente y eso es porque las direcciones ya están en el mismo ejecutable.
En el notepad de XP ir al offset 400h(creo que era ahí, o se puede buscar rápidamente) que ahí empieza la IAT y veréis sorprendentemente que están las direcciones reales!! de las API y no es la IID la que se encarga de rellenar esos datos... muy curioso, tengo que analizar el porqué, tal vez está la cosa en la IID, de momento no lo sé.

Gracias Eternal Idol por la aclaración, es curioso porque analizé todo el PE-header y ese valor creo (sólo creo) que también lo modifiqué.
Muy interesante.
Gracias Karman por esa duda me parece muy interesante.

Un saludo a los dos.
karmany
#984
Es muy fácil..

Lo primero tienes que ir a la Export Table. Allí te indica todas las funciones que la dll exporta.
Para saber dónde comienza una determinada función de una librería, puedes implementarlo tú mismo con una forma muy sencilla y es llamando a la API GetProcAddress a la que le pasas el handle de la librería y el nombre (string) de la función que tú quieres. Esta pienso que es la forma más sencilla.

La forma teórica de dónde comienza cada función (resumo mucho mucho) es la siguiente:
En el encabezado (PE header) tienes una dirección hacia la Export Table. Por ej. voy a mirar una dll cualquiera y la miro con un editor de PE (o con un editor hexadecimal si sabes leer el PE header) y veo lo siguiente:
          RVA           Size
Export:  0002C0D0    00000092


En esta dll la Image Base es la siguiente: 04000000
Por lo tanto la Dirección Virtual donde comienza la Tabla de Exportaciones es:
0402C0D0
La export Table contiene las RVA (relativas a la base de la dll) de las funciones que exporta.

Ahora me voy a 0402C0D0 cargando la librería en el OllyDBG y dumpeo esa dirección y veo lo siguiente:
0402C0D0  00 00 00 00 0E 4A 76 41 00 00 00 00 16 C1 02 00  ....JvA....Á.
0402C0E0  01 00 00 00 03 00 00 00 03 00 00 00 F8 C0 02 00  .........øÀ.
0402C0F0  04 C1 02 00 10 C1 02 00 55 43 00 00 3B 42 00 00  Á.Á.UC..;B..
0402C100  DF 42 00 00 21 C1 02 00 31 C1 02 00 44 C1 02 00  ßB..!Á.1Á.DÁ.
0402C110  00 00 01 00 02 00 63 64 72 35 30 73 2E 64 6C 6C  ....cdr50s.dll
0402C120  00 43 44 52 43 6F 6E 6E 65 63 74 44 72 69 76 65  .CDRConnectDrive
0402C130  00 43 44 52 47 65 74 53 75 70 70 6F 72 74 4C 65  .CDRGetSupportLe
0402C140  76 65 6C 00 43 44 52 47 65 74 53 75 70 70 6F 72  vel.CDRGetSuppor
0402C150  74 4C 65 76 65 6C 57 69 74 68 49 6E 71 75 69 72  tLevelWithInquir
0402C160  79 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  y...............


Como se observa el 4º dword es el puntero a la dll. Y a simple vista se ve que exporta únicamente 3 funciones.
Ahora después te paso un link con toda la información pero si te fijas en el offset 28h (40 decimal) verás estos bytes: 55 43 00 00 - 3B 42 00 00 - DF 42 00 00 Estos bytes son las RVA que tú buscas..

Por ejemplo para la primera función: CDRConnectDrive la RVA es 55 43 00 00 es decir, 4355h. Si recuerdas la Image Base es 4000000 por lo tanto la dirección virtual (recuerda: Dirección Virtual VA) es 4004355.
Voy a comprobarlo: cargo la librería en el OllyDBG y me voy a 4004355 y OllyDBG ya me indica dónde estoy y efectivamente me dice que estoy en CDRConnectDrive.

Así se calcula y así también lo hacen los editores de PE. Para más información y donde puedes compilar un programa en MASM32 te dejo el siguiente enlace:

http://win32assembly.online.fr/pe-tut7.html

Un saludo
karmany
#985
Efectivamente, lo acabo de probar por ej. con el juego Chess que trae el Vista y dice aplicación 32 bits no válida.

A primera vista el encabezado parece correcto a no ser por la Image Base que no es muy normal según estábamos acostumbrados hasta ahora. He modificado el PE header para que fuera compatible con Windows XP y tampoco quiere funcionar.
Debuggeando en Vista he visto dos archivos que se utilizan que no están en Windows XP y que parecen ser únicos en Vista. Lo seguiré analizando, ya te comentaré.. y si descubres algo coméntalo también si quieres..

Un saludo Karman
karmany

PD. Según he podido averiguar indagando por Internet, parece ser que el problema es porque Windows XP no tiene DirectX10 ya que se hizo en un principio sólo para Windows Vista. Microsoft parece que sólo lo saca para Vista:
http://www.gamesforwindows.com/en-US/AboutGFW/Pages/directx10-a.aspx
He visto algunas modificadas para XP, pero nadie afirma abiertamente que funcionen correctamente.
También podría ser que si utilizamos las dll que el juego necesita (copiándolas de Vista a XP) pues que el juego funcione, pero no lo sé y me deja, por lo menos a mi,  muchas dudas...
#986
Exactamente no lo sé pero lo probaré y cuando sepa algo cierto ya te lo comentaré porque yo utilizo XP y Vista.

Yo en algunos programas he visto 2 cosas:
1º- Comprueban si el sistema operativo es Vista y si es cierto dejan continuar a la aplicación. Esto lo comprobé por ej. con el programa "Tune Up Utilities" (para XP solamente). El programa aunque funcionaba bien en XP (lo hice funcionar) necesitaba una configuración diferente o modificar ciertos datos para que se ejecutara correctamente

2º- Puedes intentar ver las dependencias. Por ej. si el programa sabes que se ejecuta en Windows Vista pues ejecútalo con el OllyDBG (en WV) y observa las dependencias. PUede que utilice alguna máquina virtual (por ej.) y que por ese motivo el encabezado dé error en WXP.

Bueno, pienso que lo mejor sería que dijeras qué programa es el que no corre en XP y así entre todos le echamos un vistazo.

Un saludo
#987
Por supuesto que puedes modificar una dll sin ningún problema.

Con un debugger, usa por ejemplo OllyDBG, puedes modificar la dll a tu gusto pero hay que saber lo que quieres hacer, por ejemplo, antes de todo tienes que comprobar si la dll está empacada o no, si está empacada tienes que desempacarla primeramente (a no ser que quieras hacer un Inline Patching) y después dependiendo con qué compilador haya sido compilada pues haces las modificaciones pertinentes.

OllyDBG tiene una opción MUY BUENA y es que no necesitas de un editor hexadecimal para modificar la dll sino que cuando hayas conseguido la dll desempacada puedes modificar cualquier instrucción o hacer lo que tú quieras y pulsas botón derecho --> Copy to executable --> All modifications y en la siguiente pantalla botón derecho --> Save File y ya tendrás guardados todos los cambios.

Un saludo
#988
Ingeniería Inversa / Re: Error OlliDbg
11 Febrero 2008, 12:04 PM
Me alegro de que se haya solucionado tu problema.
De todos modos no te fies en los tutoriales de la dirección que aparezca, ya que en tu ordenador puede ser diferente.

un saludo
#989
2.1 Ejemplos en Ventana de Dump - OllyDBG:

Vamos a realizar unos pequeños ejercícios:


1.- Modificar un byte:
Vamos a partir de la imagen anterior:


Podemos observar por ejemplo, que en la dirección 402BDC tenemos el byte: 56h que corresponde a la "V". Se trata de modificarlo y sustituir la "V" por ejemplo por una "R" para que nos quede "RB5!".
Lo primero que haremos será seleccionar el byte correspondiente (simplemente pulsando con el botón izquierdo del ratón sobre el byte). Ahora tenemos varias opciones:
   1ª-Pulsar botón derecho del ratón y seleccionar binary --> Edit:


Se nos abrirá una nueva ventana:


Como se observa, en el título tenemos la dirección y podemos modificar directamente el código ASCII, UNICODE o el mismo byte en hexadecimal. Como es lógico si se pone algo en UNICODE nos añadirá un nuevo byte.
Como queremos poner una "R", nos pondremos sobre la "V" (ASCII) y simplemente la sustituimos. Pulsamos en "OK" y veremos cómo nuestra modificación se ha puesto en rojo y nos ha sustituido la "V" por la "R" (en hexadecimal: 4C(L) por 52(R).

   2ª-Simplemente cuando esté seleccionado nuestro byte pulsamos cualquier dígito hexadecimal y se nos abrirá de nuevo la ventana anterior. Estaremos modificando directamente el valor hexadecimal. Así que podremos teclear 52 y pulsamos Enter y solucionado.

Aquí he modificado solamente un byte, pero de igual modo podemos seleccionar los bytes que nosotros queramos modificar y editarlos posteriormente de esta forma explicada.


2.- Sobre cadena de texto:
Cadenas de texto = Strings (Inglés)
Cuando en la ventana de Dump vemos alguna string podemos conocer su longitud ya que al final de la misma, ya sea ASCII o UNICODE veremos un 0(cero)(ASCII) o dos 0 (ceros)(UNICODE).

Por ejemplo en UNICODE "karmany" es:

6B 00 61 00 72 00 6D 00 61 00 6E 00 79 00 00
k     a     r     m     a     n     y



3.- Quiero copiar 4 bytes y pegarlos en otro sitio:
OllyDBG tiene esta opción tan necesaria que es poder copiar los bytes que nosotros queramos y pegarlos en cualquier otro lugar.
Por ejemplo, en la imagen anterior de la ventana de dump, vamos a copiar los 4 bytes (1 dword) que hay en 402BD0 (56 42 35 21) y los vamos a pegar en 401264.
Primero seleccionamos el/los bytes que queramos (en este ejemplo sólo seleccionaremos 4. Ahora pulsamos botón derecho del ratón y seleccionamos: Binary --> Binary Copy. Y de esta forma tan sencilla ya los tenemos copiados.
Ahora seleccionamos los 4 bytes donde vamos a pegarlos. Si seleccionamos menos (por ej. 3), OllyDBG sólo modificará los que hemos seleccionado y simplemente pulsamos botón derecho del ratón sobre ellos y pulsamos en: Binary --> Binary Paste.
Esta opción es muy útil sobre todo cuando estás haciendo algún injerto y tienes que ir modificando el código. Yo incluso hice una fuerza bruta para solucionar un crackme y los bytes que utilizé los tengo guardados en un txt. De este modo acoplarlos después a un nuevo crackme es mucho más sencillo que empezar de cero.

4.- He seleccionado un gran número de bytes. Quiero saber cómo ponerlos todos a 0 (cero) o cómo ponerlos todos a FFh:
Es muy sencillo, cuando ya tengamos todos los bytes que queramos pulsamos botón derecho del ratón y seleccionamos Binary se nos desplegará un submenú y ahí tenemos las 2 opciones:
-sustituir lo seleccionado por ceros: Fill with 00's
-sustituir lo seleccionado por FF: Fill with FF's

Como observaréis, en la ventana de dump pone sustituir por FF mientras que en la ventana de desensamblado, pone sustituir por 90 (NOP).


5.- Me gustaría poner un Breakpoint a un byte cuando sea modificado
Imaginemos que tenemos un byte igual a 04. Imaginemos que son las vidas de un juego y que cuando nos quitan una vida ese 4 disminuirá a 3.
Podríamos averiguar cuándo se quita esa vida simplemente poniendo un breakpoint cuando el byte sea modificado. Esto se hace así:
-Seleccionamos el byte en cuestión (el 04 en este ejemplo)
-pulsamos botón derecho del ratón y seleccionamos Breakpoint
-Tenemos dos opciones:
   Poner un BP (breakpoint). Seleccionamos Memory, on write
   Poner un HBP (Hardware BreakPoint). Seleccionamos Hardware, on write --> Byte

Para saber cuántos HBP tenemos puestos podemos seleccionar en el menú de OllyDBG en: Debug --> Hardware breakpoints

5.- Aparece una cadena muy larga y la quiero copiar
A veces, es posible que queramos copiar una cadena larga que aparezca en la ventana de dump. Copiarla dígito a dígito podría ser un poco largo y podríamos equivocarnos así que podemos seleccionar dicha cadena y pulsar botón derecho del ratón --> copy --> To clipboard (también podemos usar el típico Ctrl+C).
Creamos o abrimos un documento de texto y pegamos.

6.- Cómo ir a una dirección determinada
Simplemente pulsamos el botón derecho del ratón y seleccionamos Goto --> expresion (lo mismo que pulsar Ctrl+G). En el siguiente cuadro ponemos la dirección que queramos y pulsamos Ok.

7.- Cómo examinar el encabezado (PE header) de un programa desde OllyDBG
OllyDBG tiene opciones muy interesantes. Modemos decirle a OllyDBG que nos muestre toda la información de un PE header (encabezado).
Normalmente en un programa cualquiera el PE header aparece en la dirección 400000 (generalmente). Por este motivo, nos dirigimos a la dirección 400000 en la ventana de dump y ahora le vamos a decir a OllyDBG que nos muestre dicha información como PE header:
Botón derecho del ratón --> especial --> PE header
Para volver después como estaba antes:
Botón derecho del ratón --> Hex --> Hex/ASCII (16 bytes)

#990
Ingeniería Inversa / Re: Error OlliDbg
5 Febrero 2008, 22:33 PM
Vamos a hacer primero una cosa.
Descargar este crackme que es el bueno, a ver si siguen los problemas:
http://usuarios.lycos.es/cathacker/CRACKME.EXE

Y seguir este tutorial de Ricardo sobre cómo resolverlo:
http://www.crackslatinos.hispadominio.net/modules.php?name=Downloads&d_op=getit&lid=3

PD. Yo lo acabo de probar y no he tenido ningún problema.