Cyclowiz Firmware V3.0 Dumpés


zouzzz
 Share

Messages recommandés

Salut,

Pour info :

************ - **************** - 2007

CycloWiz Firmware Dumped from f10.exe

---------------------------------------

Zip

| Readme.txt

|

+---asm

| CycloWizLog_V3.0B_D2B_PAL.asm

|

\---bin

CycloWizLog_V3.0B_D2B_JAP.bin

CycloWizLog_V3.0B_D2B_PAL.bin

CycloWizLog_V3.0B_D2B_USA.bin

CycloWizLog_V3.0B_DMS-D1A_JAP.bin

CycloWizLog_V3.0B_DMS-D1A_PAL.bin

CycloWizLog_V3.0B_DMS-D1A_USA.bin

- English -

-------

+------------------------------------------------------------------------------------------+

| Firmwares are extracted from the binary file but untested to generate a cyclowiz modchip |

+------------------------------------------------------------------------------------------+

If you are bored read this.

The f10.exe tool offers the posibility of reflash a "broken" cyclowiz modchip and as recently ALEJO3R7

discovered [1], the tool is able to flash an empty sx28 chip creating a new fully functional cyclowiz modchip,

so, knowning this you can quickly think "If thats possible, the full firmware must be inside the exe"

The first logical attemp its to use a RS232 sniffer to try to get the firmware, but due to the especific

method to program a chip sending special values to active different modes inside the pic etc this is not

the best way to doit.

So lets Dissasembly the f10.exe and take a look, quickly you can get the offset of the 6 differents firmware

files inside the exe plus a common piece of firware always sent before the especific version of it.

One option its to copy this data to a file but maybe the firmware is encrypted and they do some kind of xor

or something like that so this way isnt so good.

No RS232 sniffer (also hooks at Out32() inpout32.dll) and no "copy&paste" from memory so.. lets hook some

functions before the Out32(), where every firmware byte is written to the LPT port.

We prepare a DLL to inyect it to the f10.exe and in the DllMain() hooks the "write" function by patching

the CALL [2](WriteProcessMemory() writing at 00401302 this E8 79FD8A00 to get CALL DLLHookM.00CB1080) and at

0x00CB1080 [3] a function with an fwrite() dumping the values to a file.

Also you need to patch the return value from the "WiiDetect()" function of the f10.exe that looks if the computer

is connected to the wii [4](something trivial, if the return is 1 the exe thinks that is connected to a DMS and

2 to a D2B)

When this done, we just execute the f10.exe and then inject the DLL to patch the funcion calls, select your favourite

firmware and "continue,continue,continue" till the message says that the chip is uploaded and voila, the firmware

in a file ;)

Its funny to see some sleeps in the code triying to show that something its going on when only its waiting, also

the "erasing chip" message are faked

- Español -

+------------------------------------------------------------------------+

| Los firmwares estan extraidos del ejecutable pero no han sido probados |

+------------------------------------------------------------------------+

Si estas aburrido leete esto.

La aplicacion f10.exe the ofrece la posibilidad de reflashear un cyclowiz cuando se ha "roto" por una

mala actualizacion o similares, y como recientemente ha publicado ALEJO3R7 [1], la aplicacion es capaz

de programar un chip sx28 vacio creando un cyclowiz totalmente funcional, por lo que sabiendo esto rapidamente

se te viene a la cabeza "Si esto es posible, el firmware del cyclowiz ha de esta entero en el exe".

El primero intento logico de intentar obtener este firmware es por medio de un sniffer de RS232 pero debido

a que para programar un chip los datos se han de enviar de determinada manera por el puerto paralelo enviando

datos a mayores para habilitar estados internos del pic etc, esta no es la mejor manera de obtenerlo.

Entonces vamos a desensamblar el f10.exe y echar un vistazo, rapidamete puedes obtener los offsets de los

6 diferentes firmwares que supuestamente contiene (o que puede usar) mas un codigo comun que siempre se

manda antes de los firmwares especificos.

Una opcion es copiar y pegar directamente estos bloques del exe a fichero pero puede que el firm este cifrado

de algun modo por lo que es posible que lo que obtengamos no nos valga para nada entonces vuelve a ser una mala

opcion.

Ni sniffer de RS232 (hooks en las fuciones de escritura Out32() de la inpout32.dll tampoco valen) y tampoco

"copy&paste" de los bloques, entonces... Vamos a hookear funciones antes de las llamadas a Out32.dll, donde

cada byte del firm es enviado y justo antes de la escritura al puerto LPT

Se prepara una DLL para inyectarsela al f10.exe y en el DllMain() se hookea la funcion de escritura parcheando

el CALL [2] (WriteProcessMemory() escribiendo en 00401302 esto E8 79FD8A00 para obtener CALL DLLHookM.00CB1080) y en

0x00CB1080 [3] esta nuestra funcion con un fwrite() volcando los valores a fichero.

Ademas hace falta falsear los valores devuelto por la funcion encargada de detectar que la Wii esta conectada al

puerto [4] (algo trivial, si se devuelve un 1 se cree que esta conectado a una DMS y si es un 2 a una D2B)

Con estas cosas ejecutamos f10.exe y le inyectamos la DLL para parchear las llamadas de las funciones, seleccionas

tu firmware favorito y dale a continuar hasta que te diga que el chip esta programado y voila, tendras el firmware

en un fichero :)

Es gracioso ver en el codigo un par de Sleep() para hacer creer que esta haciendo algo cuando en realidad simplemente

esta esperando, al igual que los mensajes de borrado del chip y similares cuando en realidad no hace nada de nada

[1] http://www.elotrolado.net/hilo_-TUTORIAL--...-euros-_824270)

[2]

.text:004012FF push edx

.text:00401300 push eax

.text:00401301 push esi

.text:00401302 call MuchosWriteLPT // CALL DLLHookM.00CB1080

[3]

//---------------------------------------------------------------------------

// 0x00CB1080

#define Ruta "CycloWizLog.txt"

int __cdecl MiMuchosWriteLPT(int a1,int a2,byte CharDelFirm) {

FILE *f=fopen(Ruta,"a+b");

fwrite(&CharDelFirm,sizeof(byte),1,f);

fclose(f);

return(1);

}

[4]

.text:0040139B cmp al, 0C9h //

.text:0040139D setz cl // XOR EAX,EAX

.text:004013A0 mov eax, ecx // ADD EAX,2

.text:004013A2 pop ecx //

.text:004013A3 retn

************** - ********** - 2007

Disponible dans les bonnes crémieries

Lien vers le commentaire
Partager sur d'autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
 Share