Quitar Protección en DLL para usarlo en otros Emuladores

Iniciado por henryxs87, 2 Noviembre 2010, 23:04 PM

0 Miembros y 3 Visitantes están viendo este tema.

karmany

#10
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):


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:

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:
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.





henryxs87

#11
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



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)


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



Leyendo el mensaje de karmany y analizando..............Luego edito.....Saludos!!!

karmany

#12
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:

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).

henryxs87

#13
Yo orita estuve pensando un poco la cuestion que me mencionaste
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


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




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
CitarIncluye todas las descargas que mencione arriba, para no descargarlas 1 por 1

http://www.multiupload.com/KYDG8137OU