Regresar   Foro de marcianitos.org > Emuladores y programas de todo tipo > Emuladores > VPinball/Future Pinball

 
 
Old 25-abr-2007, 16:18   #11
PeterPunk
Editor Marciano
Pues yo esta mañana por primera vez he instalado el vpinmame (no me gustan los pinballs) para hacerle unas pruebas:
rapidshare -> http://rapidshare.com/files/27846513/VPinMAME.zip.html
megaupload -> http://www.megaupload.com/?d=SRBEHFX8

A ver quién es el guapo que lo prueba (yo lo hice por encima). Es la vpinmame.dll desempacada y crackeada. En principio debería saltarse sólo el disclaimer. Lo de que se salte la configuración aún no lo he hecho, ya que la mesa que probé no me preguntó nada de eso.
Recomiendo hacer una copia de seguridad del vpinmame.dll original (le añadís al final un .bak y listo) antes de probar con esta.
Saludos y suerte.
   
Old 25-abr-2007, 16:31   #12
Armenta
Moderador General
 
Avatar de Armenta
jajaja ya tardabas, muy callado estabas tu para cosa buena.
de puta madre peter. te sales por todos laos
he apagado la maquina, pero esta noche te lo pruebo
   
Old 25-abr-2007, 16:32   #13
Armenta
Moderador General
 
Avatar de Armenta
podrias contar el proceso peter?---
   
Old 25-abr-2007, 17:49   #14
PeterPunk
Editor Marciano
Por supuesto Armenta, ahora me voy a ver un poco de snooker, y luego ya me paso por aquí y hago un mini-tuto.
Bueno, espero que funcione bien, porque como haga el tuto y el parche no sirva para nada voy a hacer bastante el ridículo.

PD: el vpinmame.dll que subí es la versión 1.55.0.2 (creo que el último), el que subió Armenta en ese MameWah en español preparado para las VideoVal
   
Old 25-abr-2007, 20:03   #15
Rayito
Asesino de Masas
 
Avatar de Rayito
jodewr que bueno. En cuanto llegue a casa le echo un vistazo. Armenta ¿el programa ese se tiene que cargar cada inicio de mamewah?
   
Old 25-abr-2007, 20:04   #16
Armenta
Moderador General
 
Avatar de Armenta
nop, una sola vez, residente y consume lo que un pedo de esther cañadas
   
Old 25-abr-2007, 23:32   #17
PeterPunk
Editor Marciano
Curso de ingeniería inversa por PeterPunk

Hoy aprenderemos como eliminar la siguiente pantalla del VPinMAME:


Bajamos el VPinMame, ejecutamos el setup.exe, allí escogemos "Install", y tras ello ya podremos probar las roms con "Test". Al probar cualquier rom por primera vez nos saldrá la ventana anterior que queremos eliminar, y para ello debemos localizar el ejecutable que la crea.

Con un editor hexadecimal (yo utilizo Hex Workshop) abrimos el setup.exe y el vpinmame.dll (ya que son los dos únicos ejecutables que hay) y buscamos el texto que aparece en la ventana, por ejemplo "Please answer". Resulta que no lo encontramos, por lo que suponemos que alguno (o ambos) de los ejecutables está empacado (una compresión y/o encriptación que nos impide ver el código fuente tal cual).

Bajamos el PEiD, y con él probamos los dos archivos. Para el setup.exe nos indica "Microsoft Visual C++ 7.0", que es el lenguaje en el que está programado, si lo reconoce es porque no está empacado. Pero con el vpinmame.dll nos muestra "UPX 0.80 - 1.24 DLL -> Markus & Laszlo". Vale tenemos suerte, es un compresor de ejecutables gratuito (el que suelo emplear yo como en el MoveRoms), así que sólo tenemos que bajarnos el upx y descomprimir la librería con el comando upx -d vpinmame.dll. Ahora el archivo ocupa 4 veces más y si lo volvemos a probar la búsqueda del texto en el editor hexadecimal, esta vez tendremos suerte, por lo que éste es el archivo que debemos "retocar".

Ahora usamos nuestro debugger favorito (en mi caso el OllyDbg) que si lo bajamos de la web de diablo2002, nos viene con unos pequeños retoques y con todos los plugins importantes. Como es una librería, lo mejor que podemos hacer es arrancar un programa que la use, así que desde el OllyDbg arrancamos el setup.exe (File -> Open y buscamos el setup.exe). Esto nos arranca el programa parándose en la primera instrucción del mismo. Como la dll a la que queremos atacar aún no está activa, dejamos actuar al programa normalmente presionando el botón que parece uno de play o F9

El programa arrancará normalmente y podréis acceder a él desde la barra de tareas, allí le dáis al botón "Test" para que se cargue en memoria nuestra querida vpinmame.dll. Si el programa se queda colgado u os salta directamente al ollydbg es porque éste último no sabe como tratar alguna excepción. Lo podéis ver en la barra de estado del ollydbg. Apretáis SHIFT+F9 tantas veces como excepciones os encontréis hasta que se cargue la siguiente ventana del setup.exe. En ese momento ya debe estar cargado en memoria la librería, así que pulsáis con el ratón en el botón que tiene una "E" en el ollydbg y que sirve para mostrar los distintos módulos ejecutables que usa el programa que estamos depurando y en la ventana que os aparece veréis que ya está cargado el vpinmame.dll.


Hacéis doble click sobre esa línea y veréis el código en ensamblador de esa librería en el ollydbg. Empezará en la línea 10001000 en mi caso (y en el de la mayoría). En ese momento sobre ese código pulsáis el botón derecho, y en el menú escogéis Analyze This!, para que el debugger intente estructurar un poco los distintos procedimientos (esto puede durar un rato).


Ahora es cuando viene lo más complicado, ¿cómo buscamos lo que queremos? hay diversas formas, y yo al principio intenté unos puntos de ruptura sobre las llamadas a la Api ShowWindow, pero al final sólo me sirvieron para orientar la búsqueda hasta que se me ocurrió otra forma de hacerlo. Otra vez click con el botón de derecho y esta vez Search for -> All constants, en la ventana que aparece escribís "111" en donde pone hexadecimal y aceptáis.


Y en la siguiente ventana marcáis cada línea que ponga "CMP EAX, 111" y pulsáis F2 (o botón derecho y Toggle Breakpoint):


Bien, y ¿qué es lo que hemos hecho? Pues buscar la constante 111 que para Windows es el equivalente a pulsar un botón (saberse esto lo da la experiencia), y luego poner un punto de ruptura cada vez que compara un puntero del sistema con 111.

Cerramos esta ventana de referencias, y en el programa que tenemos abierto escogemos una mesa que tengamos y que nunca hayamos jugado, para que nos salga la dichosa ventana que queremos eliminar. Vemos que enseguida se queda parado, por lo que volvemos al ollydbg allí desmarcamos con f2 el breakpoint donde está parado y ponemos otro dos líneas más abajo (después del salto) ya que a esta línea sólo podremos acceder al pulsar el botón que sea y no cuando el programa haga la comparación. Pulsamos F9 para que el programa siga corriendo y vemos que se nos para en otro breakpoint de los que pusimos antes, lo que quiere decir que el anterior breakpoint que rectificamos no era el que buscábamos. En este volvemos a hacer los mismo, lo desmarcamos y creamos uno nuevo dos líneas debajo de dónde estaba. Volvemos a pulsar F9 y esta vez nos salta la ventanita que queremos eliminar, marcamos la casilla de "Yes, I am" y pulsamos el botón de OK.



¡Bingo!, ollydbg salta en el último breakpoint que pusimos, por lo que sabemos que esa es la parte "buena" del código. De hecho si pulsamos F8 varias veces, vamos viendo lo que el programa va haciendo línea por línea. Incluso que el parámetro bueno de salida que le vamos a pasar a EndDialog es 1 (si marcáis "No, I'm not" le pasa un 2, y si no se marca ninguna le pasa un 0).

Ahora llega lo que nos gusta, un poco de lógica y programación. Tenemos este código:


Y si nos fijamos la línea dónde teníamos el breakpoint que luego cambiamos, dónde pone CMP EAX, 111 viene de un salto, pues podemos hacer que el salto que llega hasta ahí, llegué hasta un par de líneas más abajo, con lo que no hará falta que nosotros apretemos el botón de OK. Pero claro, además esta función tiene que devolver el valor 1, que es el de estar conforme. Así que justo antes de la llamada a la función "forzamos" que el valor de ésta siempre sea 1. Para cambiar las instrucciones sólo tenemos que hacer doble click sobre la instrucción a editar y en la ventana que aparezca escribir la nueva:


Así debería quedar la librería parcheada. Cerramos el ollydbg y para que este cambio sea permanente abrimos otra vez el vpinmame.dll en nuestro editor hexadecimal y allí buscamos los bytes que tenemos que cambiar. Buscamos: "3D10010000753683C604" y lo cambiamos por "3D10010000753D83C604" que es el primer cambio. Y luego "1BC083C002508B4604" para cambiar por "1BC0B00190508B4604". Guardamos y listo. Ya tenemos él vpinmame.dll parcheado.

Saludos.
   
Old 26-abr-2007, 01:23   #18
Armenta
Moderador General
 
Avatar de Armenta
la madre que lo ... impresionante al explicacion, y lo dice como si fuera bajar a por el pan.

me encargo de maquetarlo peter, se sale.
   
Old 26-abr-2007, 01:39   #19
Rayito
Asesino de Masas
 
Avatar de Rayito
joder tio. Me has dejado con la boca abierta. Hay un par de cosas que no he entendido, pero no pasa nada, tampoco aspiro jejejeje. Gracias por la clase magistral. Me ha encantado. Por cierto... ¿Al final funciona?
   
Old 26-abr-2007, 12:24   #20
PeterPunk
Editor Marciano
Quote:
Originalmente publicado por Armenta Ver post
la madre que lo ... impresionante al explicacion, y lo dice como si fuera bajar a por el pan.

me encargo de maquetarlo peter, se sale.
Que dices, ir a por pan supone levantarse y caminar, sin embargo ésto se hace sentado tranquilamente, es mucho más fácil :b
¿Maquetarlo? Que esto es una web de juegos de recreativas y otras consolas retro no una de programación o cracking.

Quote:
Originalmente publicado por Rayito Ver post
joder tio. Me has dejado con la boca abierta. Hay un par de cosas que no he entendido, pero no pasa nada, tampoco aspiro jejejeje. Gracias por la clase magistral. Me ha encantado. Por cierto... ¿Al final funciona?
Muchas gracias Rayito.
Lo de si funciona, a mi, con lo poco que lo he probado, sí me funciona. Pero vamos, que sólo lo he probado con unas cuantas mesas de La Falimia Addams, y ninguna me ha pedido eso de configuración por defecto, o algo así que comenta Armenta, por lo que esa parte está sin "pulir".
Si quieres te intentó explicar en profundidad cualquier cosa que no entiendas, ya que, sobre todo, la parte final, dónde comento los cambios a realizar la abrevié bastante. Y es que en total tardé 2 horas y cuarto en escribir ese post.

PD: Gracias a los dos por los votos de reputación.
PD2: Armenta, me parece que un tercio de la reputación que tengo me la diste tú, ¿no querrás nada conmigo?