Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: henryxs87 en 2 Noviembre 2010, 23:04 pm



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
Address    Disassembly                               Comment
10007EC3   CMP DWORD PTR DS:[100C39A4],EDI
10007F2A   MOV DWORD PTR DS:[100C39A4],EDI
10008107   CMP DWORD PTR DS:[100C39A4],0             DS:[100C39A4]=00000000
100082A3   CMP DWORD PTR DS:[100C39A4],0             DS:[100C39A4]=00000000
100083F9   CMP DWORD PTR DS:[100C39A4],1             DS:[100C39A4]=00000000
1000842D   MOV DWORD PTR DS:[100C39A4],EAX
10008930   CMP DWORD PTR DS:[100C39A4],1             DS:[100C39A4]=00000000
1000A5B6   CMP DWORD PTR DS:[100C39A4],ESI           (Initial CPU selection)
1000A763   CMP DWORD PTR DS:[100C39A4],0             DS:[100C39A4]=00000000
1000A940   CMP DWORD PTR DS:[100C39A4],1             DS:[100C39A4]=00000000
1000AF71   CMP DWORD PTR DS:[100C39A4],EDI
1000B040   MOV DWORD PTR DS:[100C39A4],EAX
1000B0C0   CMP DWORD PTR DS:[100C39A4],1             DS:[100C39A4]=00000000

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.

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)


Por suerte donde aparece los primeros MOV añadi otro MOV arriba

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?

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
En verdad gracias por el punto de vista, mientas mas ayuda reciba mejor

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
   Characteristics:        0x00000000
   TimeDateStamp:          0x495BED80  (GMT: Wed Dec 31 22:09:04 2008)
   MajorVersion:           0x0000
   MinorVersion:           0x0000  -> 0.00
   Name:                   0x000BDAD8  ("Jabo_Direct3D8.dll")
   Base:                   0x00000001
   NumberOfFunctions:      0x00000018
   NumberOfNames:          0x00000018
   AddressOfFunctions:     0x000BD9E8
   AddressOfNames:         0x000BDA48
   AddressOfNameOrdinals:  0x000BDAA8

   Ordinal RVA        Symbol Name
   ------- ---------- ----------------------------------
   0x0001  0x0000A940 "CaptureScreen"
   0x0002  0x000083E0 "ChangeWindow"
   0x0003  0x00007EA0 "CloseDLL"
   0x0004  0x0000A530 "DllAbout"
   0x0005  0x0000A5A0 "DllConfig"
   0x0006  0x000080A0 "DrawFullScreenStatus"
   0x0007  0x00007FB0 "DrawScreen"
   0x0008  0x00008010 "GetDllInfo"
   0x0009  0x00007F80 "GetRomBrowserMenu"
   0x000A  0x0000ADD0 "InitiateGFX"
   0x000B  0x00008060 "MoveScreen"
   0x000C  0x0000BD10 "OnRomBrowserMenuItem"
   0x000D  0x00008050 "PluginLoaded"
   0x000E  0x000080C0 "ProcessDList"
   0x000F  0x00008290 "ProcessRDPList"
   0x0010  0x00008930 "RomClosed"
   0x0011  0x0000B0C0 "RomOpen"
   0x0012  0x00036640 "SetSettingInfo"
   0x0013  0x00036670 "SetSettingInfo2"
   0x0014  0x000083B0 "ShowCFB"
   0x0015  0x00008320 "SoftReset"
   0x0016  0x0000A760 "UpdateScreen"
   0x0017  0x00028680 "ViStatusChanged"
   0x0018  0x000083C0 "ViWidthChanged

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.


PD. No consigo el plugin Jabo. Todos los que me he descargado están ya modificados y alguno ni me da error en el Mupen 64. Si puedes subir el original podré echarle un vistazo.


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 -> esta es la call importante para no salir
02C3AF6D    test eax,eax
02C3AF6F    je short 02C3AF86
02C3AF71    cmp dword ptr ds:[2CF39A4],edi
02C3AF77    jnz short 02C3AF99
02C3AF79    push 2CD80C8    ; ASCII "InitiateGFX called without CloseDLL"
02C3AF7E    call 02C36890
02C3AF83    add esp,4
02C3AF86    xor eax,eax <- si entra aquí devuelve que InitiateGFX fue mal

02C3AF68    call 02C66680:
Código:
02C66680    movzx eax,byte ptr ds:[2CF4EBC]
02C66687    retn

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
02C3AFCA    push 9
02C3AFCC    lea ecx,dword ptr ss:[ebp-1C8]
02C3AFD2    push 2CD7BB8       ; ASCII "Project64"
...
...
02C3AFF1    call near dword ptr ds:[2CD712C]  ; kernel32.GetModuleHandleA
02C3AFF7    push eax
02C3AFF8    call near dword ptr ds:[2CD7148]  ; kernel32.GetModuleFileNameA
02C3AFFE    lea eax,dword ptr ss:[ebp-1C8]
02C3B004    push 2CD7BB8                            ; ASCII "Project64"

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]
00CE6885    add eax,dword ptr ds:[D74E8C]
00CE688B    mov ecx,dword ptr ds:[D74E9C]        
00CE6891    push eax
00CE6892    push ecx
00CE6893    call near dword ptr ds:[D74EA0]       ; Project6.00414AC0
00CE6899    add esp,8
00CE689C    retn

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