Título: Quitar Protección en DLL para usarlo en otros Emuladores Publicado por: henryxs87 en 2 Noviembre 2010, 23:04 pm Veran estaba averiguando la razón por la cual el Plugin de Video Jabo Direct.3D8 1.7 creada para emulador proje.ct64 1.7 No funciona para los demas emuladores y me he dado cuenta que no es un problema de compactibilidad sino mas bien un sistema de protección "al menos eso parece"
El Proje.ct64/El Mupen64 son emuladores de juegos para nintendo 64 y todos ellos aceptan plugins de distintos fabricantes y los plugins de un emulador le sirven al otro y viceversa, pero el plugins que les muestro a continuacion es un caso especial, ya que Proj.ect64 1.7 tiene proteciones por todos lados, hasta en las DLL les incluyen sistema de protecion online, para que cada beta sea usada por cada donante Ahora vamos al problema: Si cargo el Plugin Jabo 1.7 el cual solo solo funciona en proje.ct64 1.7 en el Mupen64 me sale esta ventana (http://imgur.com/oZ91C.jpg) Ahora buscado dentro de la Jabo Direct.3D8.DLL con el ollydbg encuentro los datos de la misma ventana de arriba (http://imgur.com/QH51X.jpg) Para probar que funciona la DLL con el emulador cambien JNZ por JMP (http://imgur.com/cCWbt.jpg) Y salio justo la ventana que yo queria (http://imgur.com/UW4dR.jpg) Claro la cosa no es tan buena como se pinta si quiero acceder la pestaña advance se cuelga el emulador de N64, porque el cambio debe hacerse antes, porque nisiquiera con eso se puede emular la parte grafica del juego (http://imgur.com/HOkTM.jpg) A otro detalle A pesar de que en Pruebo la DLL modificada en el emulador Proje.ct64 1.7 funciona como si nada todo normal? raro? (http://imgur.com/eOYYf.jpg) A pero todo No termina aqui, miren este pequeño detalle que consegui en Proje.ct64.exe (Ver 1.7), Dice Proje.ct64 2.0, cosa que parecio extraña??? (http://imgur.com/RAYSG.jpg) Lo que hice fue modificar Proje.ct64 2.0 ==> Prxject64 2.0,(En el emulador) cuando intente cargar el plugin no me carga el plugin Jabo Direct.3D8 1.7, ni la ventana ni el juego me corre, pero si pruebo con el resto de los plugins habidos y por haber del Nintendo 64 todos me funcionan a la perfección excepto el que les mencione. Lo que quiere decir Que la constante "Proje.ct64 2.0" es la llave para abrir el plugin Jabo Direct.3D8 1.7 Ahora si intento buscar alguna string relacionada dentro de la DLL ni rastros de que diga Pro.ject64 2.0 A pero claro yo marque un Breakpoint en hardware Access y memory Access en donde decia "Proje.ct64 2.0"y el unico momento que accesa es antes de que el emulador aparezca en pantalla, ya que despues no se detiene en ese punto, lo que hace pensar es que mediante operaciones matematicas "Proje.ct64 2.0" se transforma en otra cosa, que se guarda en memoria y se usa cada vez que se quiera usar Jabo 1.7(La DLL) Yo quisiera ver como se va ejecutando la Dll con el Proje.ct64 1.7 porque es el unico que logra hacer funcionar el plugin a la perfección El loaddll.exe que viene con ollydbg no creo que me ayude mucho en esto, porque el proje.ct64 1.7 es el unico que logra abrirlo con exito Por si las moscas ya habia desempacado todo Nose que me sugieren ustedes, ya les mostre todo lo que intente hacer, Espero su ayuda saludos!!! >>> Descarga<<< Citar El emulador: http://www.multiupload.com/NKE7TPVP0T El ROM ejemplo: http://www.coolrom.com/roms/n64/7581/Super_Mario_64.php Título: Re: Quitar Protección en DLL para usarlo en otros Emuladores Publicado por: MCKSys Argentina en 2 Noviembre 2010, 23:39 pm En la imagen de Olly, fijate la direccion 1000A5B6. Ahi esta comparando la variable ubicada en 100C39A4 con cero (el valor de ESI).
Podrias buscar las referencias que hay a esa variable, a ver cuando cambia de valor... Saludos! Título: Re: Quitar Protección en DLL para usarlo en otros Emuladores Publicado por: henryxs87 en 3 Noviembre 2010, 00:52 am Si tambien habia visto la dirección 100C39A4 pero me extraña que haya todo ese poco de 00000, lo que quiere decir que ESI deba valer 0, para que se cumpla la condicion del salto
(http://imgur.com/8IoKA.jpg) Por cierto estuve preparando una versión reducida 2 los dos emuladores para que cargue rapido y estan en la misma carpeta ambos emuladores desempacados, Citar El emulador: http://www.multiupload.com/NKE7TPVP0T El ROM ejemplo: http://www.coolrom.com/roms/n64/7581/Super_Mario_64.php Título: Re: Quitar Protección en DLL para usarlo en otros Emuladores Publicado por: MCKSys Argentina en 3 Noviembre 2010, 00:55 am Pero.. buscaste las referencias a esa variable dentro de la DLL??
Asi podes ver las partes del codigo que la acceden/escriben... MODIFICADO Estas son las referencias a la variable: Código: References in Jabo_Dir:.text to 100C39A4 Fijate que hay 3 MOV's. Poniendo un BP en cada uno ves cual para antes de que se inicialice la DLL. Luego, podes tracear hacia atras, buscando que es lo que verifica para que esa variable termine con el valor cero.... Parece que eso es todo. Saludos! Título: Re: Quitar Protección en DLL para usarlo en otros Emuladores Publicado por: henryxs87 en 3 Noviembre 2010, 17:30 pm EL problema de colocar Breakpoints es que el loaddll.exe no pasa por ninguno de esos puntos lo que hice fue NOPEAR los 3 MOV de todos lo que accesan 100C39A4
Si fuese posible ver los movimientos de la DLL cuando se esta ejecutando cualquiera de los 2 emuladores seria bueno Si la DLL fuese un exe seria mas facil porque podria tracear normalmente MCKSys estos son los mismas referencias que me mostraste arriba solo que nopee los 3 MOV (http://imgur.com/Ixrbf.png) Y fue la unica forma de obligar a que saliera esta ventana, NOPEANDO los 3 MOV (http://imgur.com/FoVxz.jpg) Ya que si bloqueo uno por uno Solo, NO sale esa ventana que muestro arriba o sale la ventana de abajo de error Direct3D8(ver mas abajo) o la normalita que debe salir(esa donde uno configura el plugin para el juego) Ahora si solo NOPEO el ultimo MOV sale esto(notese que ya quite los otros 2 NOP, en comparación con la ventana anterior) (http://imgur.com/6WuG9.png) (http://imgur.com/Wmn4f.jpg) Pero en el Mupen64 sigue saliendo esta ventanita apesar de que ya NOPEE los 3 MOV y tambien sale de igual forma si solo NOPEO el 3 MOV de los que me mencionaste arriba, cosa que no sale en el Proj.ect64 (http://imgur.com/oZ91C.jpg) Eso me hace pensar que la ventana Direct3D8 iniciateGFX error sale despues que evalua la condicion de salto JZN, porque sino se hubiese visto en el emulador Ok sabiendo eso pues hice esto NOPEE los otros MOV de arriba y el Projec.t64 abre normal (http://imgur.com/EvHT6.png) (http://imgur.com/V6eCj.png) Pero en el Mupen sigue saliendo otra vez la ventana que no quiero que salga, bueno ya esta arriba(en la ventana con la M azul que dice mupen64), para que repetirla xDD Ha otra cosa tambien justo antes de los MOV que me mencionaste tambien probe con cuestiones asi Para obligar que en 100C39A4 adquiera otro valor INC EAX INC ESI INC EBX Y nada que conseguí desaparecer esa ventana en el mupen, pero en el porjec,t64 tan solo sigue saliendo y en otros cambios no abre ninguna ventana Cuando logro que el projct64 no salga ninguna ventana en el Mupen64 sigue apareciendo la misma ventanita. Editado Ahora que lo veo En el primer mensaje que postee justo abajo de la cara de mario, donde esta la ventana de ollydbg, donde hago notar que dice Projet64 2.0 resaltado en verde, eso despues de ciertas operaciones matematicas se guarda en algun registro de la memoria, que luego utiliza la DLL para comprobarlo y luego decidir si se deja utilizar o No ó mejor dicho que no aparezca la ventana que ya hemos visto durante el post, que ojala exista alguna manera de que responda de otra manera Título: Re: Quitar Protección en DLL para usarlo en otros Emuladores Publicado por: LSL en 3 Noviembre 2010, 18:45 pm en vez de nopear, cambia el MOV DWORD PTR DS:[100C39A4],xxx, para que se mueva a dicha dirección el valor 1, ya que las comparaciones por 0 son las malas, cuando se compara por 1 debe ser el valor idoneo según se ve en otras comparaciones de las expuestas por MCKSys.
como a la dirección 100C39A4 se mueve por ejemplo el valor de EAX en ese momento, intenta previamente poner a EAX con el valor 1, por ejemplo con XOR EAX,EAX ; pones EAX a cero INC EAX ; incrementas el valor de eax en 1, 0+1= 1 MOV DWORD PTR DS:[100C39A4],EAX Tambien prueba a sumarle 2, ó incluso a mover el valor FF, pues segun las comparaciones posteriores puede que necesite valores superiores a 0 ó 1 (o valores negativos -FF) Título: Re: Quitar Protección en DLL para usarlo en otros Emuladores Publicado por: karmany en 3 Noviembre 2010, 18:56 pm Yo quiero darte henryxs87 mi punto de vista: mira en la primera imagen que has puesto te sale el mensaje "initialize the dll before you try config it!". Es fácil saltarlo y seguramente si modificas todos los saltos te funcione pero... yo me preguntaría ¿por qué narices sale ese mensaje? ¿realmente es una protección a posta del programador?
Mi opinión es que tal vez deberías indagar un poco más con ese mensaje. Fíjate está diciendo que no configures el plugin porque todavía no ha sido inicializado. Podría ser verdad. Por eso también es posible que se haya colgado el programa. Tal vez la protección real haya sido que ha saltado por alto la subrutina de inicialización. ¿Por qué? PUes esto es lo que hay que buscar. Con un editor de PE cualquiera puedes examinar dónde se encuentra esa subrutina. Puedes ponerle un bp y ejecutar el programa desde el emulador project a ver de dónde es llamada y después haces lo mismo desde el otro emulador y comparas a ver... Yo es que primero iría a ver por qué sale el mensaje no lo evitaría directamente sin saber por qué... Saludos Título: Re: Quitar Protección en DLL para usarlo en otros Emuladores Publicado por: henryxs87 en 4 Noviembre 2010, 04:57 am en vez de nopear, cambia el MOV DWORD PTR DS:[100C39A4],xxx, para que se mueva a dicha dirección el valor 1, ya que las comparaciones por 0 son las malas, cuando se compara por 1 debe ser el valor idoneo según se ve en otras comparaciones de las expuestas por MCKSys. Por suerte donde aparece los primeros MOV añadi otro MOV arribacomo a la dirección 100C39A4 se mueve por ejemplo el valor de EAX en ese momento, intenta previamente poner a EAX con el valor 1, por ejemplo con XOR EAX,EAX ; pones EAX a cero INC EAX ; incrementas el valor de eax en 1, 0+1= 1 MOV DWORD PTR DS:[100C39A4],EAX Tambien prueba a sumarle 2, ó incluso a mover el valor FF, pues segun las comparaciones posteriores puede que necesite valores superiores a 0 ó 1 (o valores negativos -FF) MOV EAX,1 MOV DWORD PTR DS:[100C39A4],EAX tambien intente con MOV EAX,0 y MOV EAX,-1 antes de eso y nada si pruebo un juego en el proj.ect64 1.7 funciona apesar de que tuvo que sacrificar 2 intruciones mas arribas de eso, pero sigue saliendo la misma ventana Ahora hablando del tercer MOV, si modifico antes no funciona ni la ventana, ni el juego, claro el projec.t64 1.7 abre, pero en el Mupen 64 sigue apareciendo la mis ventana de Direct3D8 El caso es que es dificil hacer que aparezca la ventana de configuración del plugin en Mupen64 y el que aparezca la ventana de error de Direct3D8 en el Proje.ct64 1.7 tambien por ese lado pasa que sigue sin aparecer la ventana Si por ejemplo yo obligara que 100C39A4 que valiera 0 la ventana de direct3d8 tampoco aparece en el Projec.64 1.7 antes de los 3 MOV eso es como raro??? ---------------------------------- ---------------------------------- Eso me hace pensar que de haber algo que modifique la direccion 100C39A4 antes o despues y ese algo podria ser el mismo emulador digo?? para ve que ocurre con el emulador proje.ct64.exe modifique esto para ver que pasaba (http://imgur.com/cSbvx.png) (OJO esta captura es del emulador EXE) hasta incluso con una sola letra, ejemplo una k el emulador tambien Y cuando hago ese cambio y busco cambiar la configuracion grafica no abre ninguna ventana por mas que lo intento, ah pero en el mupen64 si saca la ventanita??? Con ese cambio en el emulador puedo jugar normalmente con otros plugins, menos con el bendito plugin Quise averiguar que ocurria si colocaba todo en cero (http://imgur.com/s796I.png) (OJO esta captura es del emulador EXE) Y con eso siquiera carga el emulador, solo se queda colgado en memoria y la unica forma de verlo es con el administrador de tareas Yo quiero darte henryxs87 mi punto de vista: mira en la primera imagen que has puesto te sale el mensaje "initialize the dll before you try config it!". Es fácil saltarlo y seguramente si modificas todos los saltos te funcione pero... yo me preguntaría ¿por qué narices sale ese mensaje? ¿realmente es una protección a posta del programador? En verdad gracias por el punto de vista, mientas mas ayuda reciba mejorMi opinión es que tal vez deberías indagar un poco más con ese mensaje. Fíjate está diciendo que no configures el plugin porque todavía no ha sido inicializado. Podría ser verdad. Por eso también es posible que se haya colgado el programa. Tal vez la protección real haya sido que ha saltado por alto la subrutina de inicialización. ¿Por qué? PUes esto es lo que hay que buscar. Con un editor de PE cualquiera puedes examinar dónde se encuentra esa subrutina. Puedes ponerle un bp y ejecutar el programa desde el emulador project a ver de dónde es llamada y después haces lo mismo desde el otro emulador y comparas a ver... Yo es que primero iría a ver por qué sale el mensaje no lo evitaría directamente sin saber por qué... Saludos Lo que ocurre es que elegi comenzar por alli fue porque es la primera ventana que sale al intentar abrir el plugin en el caso del Mupen y en el otro emulador si se cumple la condicion saca la ventana que deberia(la de configurar la parte grafica) y como todo ta de una vez junto Si vez el primer mensaje que puse en la 2 y 3 era captura se puede ver que aparecen casi todos los elementos de las 2 ventanas para ambos emuladores, por eso me parecio bien comenzar por alli Y si cambio el JZN por un JE(que esta en las primeras capturas que puse), las ventanas del emuladores se invienten, la que salia en uno sale en el otro y viceversa Lo del editor PE la verdad que no se de que manera me podria ayudar, pero mas o menos pude deducir que te refieras a esto, creo?? Con eso se pued visualizar muchas de las ventanas que mustra el plugin, pero la ventana que aparece en el mupen no se relaciona con ninguno de esos valores Pero claro mas o menos con los nombres se podria deducir, que DLLConfig es la que mas se relaciona con esa rutina (http://imgur.com/B7KVH.png) en el resto de la ventana del LORD PE sale esto Código: ->Export Table No entendi muy bien de que manera que puede ayudar Lord PE y eso de que debo colocar los breakpoints desde el emulador, si el breakpoint deberia colocarlo en la Dll y el problema es que si cargo la DLL directamente desde Loaddll.exe no se ejecuta como deberia para marcar los breakpoint y que almenos pase por algunos de esos puntos La unica forma posible que encontre para tracear en la dll es usando "New origin here" desde un punto anterior a lo que quise analizar Bueno ya dije mas menos lo que pude analizar, Saludos!!! Título: Re: Quitar Protección en DLL para usarlo en otros Emuladores Publicado por: karmany en 4 Noviembre 2010, 17:41 pm Si vez el primer mensaje que puse en la 2 y 3 era captura se puede ver que aparecen casi todos los elementos de las 2 ventanas para ambos emuladores, por eso me parecio bien comenzar por alli Y si cambio el JZN por un JE(que esta en las primeras capturas que puse), las ventanas del emuladores se invienten, la que salia en uno sale en el otro y viceversa Pues con esto que me respondes me estás dando la razón. Ese messagebox que quieres eliminar NO es una protección del programa(en un primer vistazo, tal vez lo sea de forma secundario... me entiendes no?): es real y te lo dice claramente. Te está diciendo que lo estás intentado configurar sin haber pasado primero por la call initialize. Tiene que iniciarse primero.!! Por eso si modificas el salto a JE en el project te sale error.. normal le estás diciendo lo contrario. Es algo lógico. Yo estoy convencido a un 80% que no tienes que seguir el camino que has tomado. Tienes que conseguir que el plugin se inicialize antes. Yo miraría a ver de dónde es llamada esa subrutina del msgbox. Título: Re: Quitar Protección en DLL para usarlo en otros Emuladores Publicado por: karmany en 5 Noviembre 2010, 11:34 am Estoy descargando project 64 1.7, el Mupen 64 y el plugin Jabo que he encontrado por ahí que no sé si estará modificado ya.
Voy a echarle un vistazo en cuanto pueda. Título: Re: Quitar Protección en DLL para usarlo en otros Emuladores Publicado por: karmany en 5 Noviembre 2010, 17:54 pm Ya tengo tus descargas...
Bueno pues el problema es la inicialización del plugin. La función que hay que analizar es "InitiateGFX". Dicha función se inicia correctamente en Project 1.7 (eax devuelve 1) mientras que en Mupen retorna incorrectamente.(eax devuelve 0). Esto es lo que hay que analizar. ¿Por qué devuelve en Mupen 0? Pues estoy echando un vistazo pero a primera vista parece que ibas por buen camino y parece que reconoce a Mupen pero todavía no estoy seguro. Actualización. Mira, si te fijas, el problema está en la subrutina "InitiateGFX". Si entras en ella y accedes un poco más abajo verás lo siguiente (tu dirección seguramente no coincida con la mia pero casi seguro que los últimos bytes si coincidadan): Código: 02C3AF66 jnz short 02C3AF71 02C3AF68 call 02C66680: Código: 02C66680 movzx eax,byte ptr ds:[2CF4EBC] En project 1.7 sí es modificado ese byte pero en mupen no. Realmente no sé qué significa ese byte. Sólo es modificado a 1 en el project y repito que no tengo ni idea de porqué. Bueno, si luego te fijas un poquito más abajo de esto que te acabo de comentar verás tres funciones ultraconocidas que también te envían a que la función initiateGFX se inicie mal. Estas funciones son: Código: 02C3AFC4 call near dword ptr ds:[2CD721C] ; USER32.GetClassNameA Como puedes observar, está buscando si el programa es project64 o no. Si el programa donde está el plugin es Mupen64 pues la función initiateGFX dará mal iniciada y saldrá el msgbox que ya sabemos. Parece ser que el autor del plugin ha hecho un plugin compatible sólo con project64. Para hacerlo compatible con Mupen habrá que hacer una serie de modificaciones más ya que aún evitando esto que te comento, el programa da una excepción. ¿Cuál es el camino que puedes seguir? Pues probar el plugin en el project y después en mupen y ver por qué uno va por un camino y otro por otro. Título: Re: Quitar Protección en DLL para usarlo en otros Emuladores Publicado por: henryxs87 en 5 Noviembre 2010, 22:30 pm Antes de poner a revisar el tema y los buenos consejos que mes has dado
queria mostrarte esto La versión 1.7.047 es la ultima versión compactible con todos los emuladores de N64 Pero tiene un sistema de protecion en linea(Wininet.dll), que se soluciona con suma facilidad (Nopeando un salto asi de facil jeje) Sino se quita la protecion en linea, a los pocos segundos de iniciar el juego te saca una ventana de error y se cierra el juego (http://imgur.com/OH3QF.png) En La versión 1.7.048 dejo de ser compactible con el resto de los emuladores, pero que casualidad que ya no usa la libreria WiniNet.Dll(Libreria que accesa internet), claro le quitan el sistema de protecion en linea y le bloquean el uso en otros emuladores(tema el cual me gustaria investigar), porque en la pagina oficial dijeron que seria compactible despues que finalice el periodo de la Beta(otra de las varias razones, mas para pensar que si se puede desbloquear el plugin) (http://imgur.com/AYB1P.png) La versión que estamos analizando durante el post es la 1.7. 057(porque la ultima versión), pero si fuese mejor analizar una versión mas antigua de repente es mas facil la cosa, porque puede que el programador haya perfecionado la tecnica Y Esto es lo que ocurre si intento cargar el plugin con el Project64 1.6, nisiquiera se muestra, a pesar de que el plugin esta en su respectiva carpeta, otro misterio mas por analizar Pero el Emulador 1964 si lo reconoce, otra curiosidad mas (http://imgur.com/GaGmS.png) Leyendo el mensaje de karmany y analizando..............Luego edito.....Saludos!!! Título: Re: Quitar Protección en DLL para usarlo en otros Emuladores Publicado por: karmany en 6 Noviembre 2010, 00:58 am Seguimos... el plugin si modificas lo que te he dicho se ve una cosa curiosa y es que el plugin llama a subrutinas del mismo project. Como estas subrutinas no existen en otro emulador pues te da error. La subrutina es esta que tal vez se pueda emular:
Código: 00CE6880 movsx eax,word ptr ss:[esp+4] en el project la call [d74ea0] que está dentro del plugin va a parar al mismo project, como puedes observar. Edit: Mira le acabo de echar otro vistazo un pelín detenidamente y para hacerlo correr bien hay que hacer bastantes modificaciones (para hacerlo correctamente) ya que el problema es que el plugin llama directamente a subrutinas del ejecutable project y estas subrutinas a otras y si quieres emular todo eso pues es bastante trabajo. El problema principal está en las dos funciones del plugin: "InitiateGFX" primeramente y en "dllConfig" que es el salto que modificaste. También yo estoy usando wxp y yo no he conseguido ni siquiera que salga la ventana de configuración(dllconfig). Título: Re: Quitar Protección en DLL para usarlo en otros Emuladores Publicado por: henryxs87 en 6 Noviembre 2010, 16:51 pm Yo orita estuve pensando un poco la cuestion que me mencionaste
Código: 02C3B004 push 2CD7BB8 ; ASCII "Project64" Tambien me esta pareciendo buena idea averiguar que camino toman las versiones anteriores de project64, para que no aparezca en el selecionador de plugins cosa (http://i.imgur.com/GaGmS.png) Aqui esta el codigo fuente del Mupen64 0.5 ==> http://www.multiupload.com/AAOXTR8Q92 Aqui esta el codigo fuente de la versión Project64 1.4 ==> http://www.multiupload.com/E5E7BJ60VX Aqui esta projec64.exe Ver 1.4 ==> http://www.multiupload.com/2J3SL07WU8 Esto tambien es una de las rutinas que intervienen en el proceso (http://imgur.com/2AP1T.png) (http://imgur.com/kFNl1.png) Y pues si la veces que busca las rutinas en el project64 son varias y si se buscara inyectar esas subrutinas dentro del mismo plugin con los cambios correspondientes podria servir, ahora la pregunta en donde inyectar esas subrutinas pues en lugares que esten en des-uso por ejemplo donde se ubica la subrutina DllAbout O en donde se ubiquen las rutinas de error Inyectar una Dll Que emule todas esas rutinas que deba hacer el project64 podria ser otra solucion, http://foro.elhacker.net/analisis_y_diseno_de_malware/asmc_inyeccion_dll-t307257.0.html, claro que antes hay que descifrar como funciona todo esto Pues si eso de lograr que aparezca la ventana de DllConfig sin errores, en Mupen64, ya que el valor antes de la CMP antes que aparezca el famoso msgbox, lo asigna el emulador, de todas maneras dejame ver si subo la primera versión del emulador y primera versión del plugin en la cual se produjo el sistema de bloqueo y porque No subir la ultima versión del plugin que soportaba todos los emuladores, para incluirlos en el analisis y de esa manera anailizar cual es el camino mas corto Bueno aqui esta El P64 1.4 + las versiones de los plugins que te mencione, la ultima en ser compactible y la primera que dejo de ser compactible con el resto de los emuladores Citar Incluye todas las descargas que mencione arriba, para no descargarlas 1 por 1 http://www.multiupload.com/KYDG8137OU |