Le Fameux Md5


fuktop13
 Share

Messages recommandés

BOnjour monsieurs dames ! :marteau:

TRouvé sur http://www.chez.com/mph/

La demarche est interressante , les eXplications et l avancement sont clair , ca a l'air d'etre du costaud pour trouver lol

Recherche sur les updates au format EBOOT.PBP :

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

3 facons possibles pour updater :

- Par la memory stick ( PSP/GAME/UPDATE/EBOOT.PBP )

- Par un UMD ( SYSDIR/UPDATE/PARAM.SFO, EBOOT.BIN et DATA.BIN )

- Par connexion internet ( recherche du dernier EBOOT.PBP sur un site )

Comment trouver le MD5 du EBOOT.PBP :

Un EBOOT.PBP d'update de la memory stick contient :

- un PARAM.SFO  (informations pour le vshell, notamment la version du firmware)

- un ICON0.PNG  (un icone affiché par le vshell)

- un DATA.PSP  (le programme d'update, signé)

- un DATA.PSAR  (les données de l'update)

Le dossier SYSDIR/UPDATE de l'umd contient :

- PARAM.SFO (Pareil que le PARAM.SFO de l'EBOOT.PBP de la memory stick)

- EBOOT.BIN (Pareil que le DATA.PSP de l'EBOOT.PBP de la memory stick)

- DATA.BIN  (Pareil que le DATA.PSAR de l'EBOOT.PBP de la memory stick)

Si on compare les fichiers entre eux :

- PARAM.SFO de l'EBOOT.PBP est identique a PARAM.SFO de SYSDIR/UPDATE

- DATA.PSP de l'EBOOT.PBP est identique a EBOOT.BIN de SYSDIR/UPDATE

- DATA.PSAR de l'EBOOT.PBP est identique a DATA.BIN de SYSDIR/UPDATE MAIS contient 16 octets supplementaires a la fin

En fait DATA.PSAR et DATA.BIN sont identiques et les 16 octets rajoutés le sont a la fin du fichier EBOOT.PBP mais comme le fichier EBOOT.PBP ne contient pas d'informations de taille mais des informations d'adresses de fichier, PBP-Unpacker et n'importe quel autre programme de gestion de PBP croit que ces 16 octets font parties de DATA.PSAR.

-> 16 octets * 8 bits = 128 bits -> Taille d'un MD5

Pourquoi vouloir connaitre le MD5 :

Si on veut downgrader en 1.50, il faut absolument mettre la version de UPDATER_VER dans le PARAM.SFO > 2.00 pour qu'il veuille bien demarrer mais si on modifie un octet dans l'EBOOT.PBP, le MD5 va changer et ne correspondra plus au MD5 contenu dans EBOOT.PBP.

J'ai ensuite fait des tests sur l'EBOOT.PBP en modifiant des octets :

- Si un octet est modifié a PARAM.SFO, l'archive est corrompue -> PARAM.SFO fait partie du calcul MD5

- Si un octet est modifié a ICON0.PNG, l'archive est corrompue -> ICON0.PNG fait partie du calcul MD5

- Si un octet est modifié a DATA.PSAR, l'archive est corrompue -> DATA.PSAR fait partie du calcul MD5

- Si un octet est modifié a DATA.PSP, le programme d'update ne se lance pas -> Erreur 0xFFFFFED2 (Le jeu ne se lance pas),  est ce qu'il fait partie du calcul MD5 ?

J'ai ensuite créé un programme PSP qui calcule le MD5 d'un fichier (Voir sur http://www.chez.com/mph), le calcul MD5 de la PSP est identique a celui d'un programme sur PC.

Pour calculer le MD5 du fichier EBOOT.PBP, il faut d'abord retirer les 16 derniers octets du fichier (le MD5 deja ajouté par sony).

Ensuite, on peut faire le calcul qui donne (pour le EBOOT.PBP de l'update 1.50 JAP) :

AF D4 B8 F4 6C 89 BC F7 FC 32 EC 3D C7 1D C7 60

et celui qui est dans l'EBOOT.PBP (les 16 derniers octets) :

81 C8 EA 64 16 B2 3B 85 B7 A5 6B BF A9 32 35 58

Ce qui ne correspond pas !

J'ai ensuite extrait le DATA.PSP de l'EBOOT.PBP et je l'ai decodé avec un programme (voir http://www.chez.com/mph).

J'ai recuperé le code asm avec asmdump pour comprendre comment le MD5 est calculé.

J'ai trouvé du code qui fait appel au coprocesseur (Le coprocesseur qui decrypte ??) avec des calculs complexes, je pense que ce code correspond au code qui calcule le MD5 :

  89774:  3c020010  lui        v0,0x10

  89778:  c441fbbc  lwc1      at,-1092(v0)                      <- acces au coprocesseur

  8977c:  3c030024  lui        v1,0x24

  89780:  c4609200  lwc1      zero,-28160(v1)

  89784:  46016b42  mul.s      $f13,$f13,$f1                    <- calcul avec registres du coprocesseur ?

  89788:  46016302  mul.s      $f12,$f12,$f1

  8978c:  00803021  addu      a2,zero,32

  89790:  ac80000c  sw        zero,12(a0)

  89794:  4600683c  c.lt.s    $f13,$f0

  89798:  e48c0004  swc1      t4,4(a0)

  8979c:  45000003  bc1f      c

  897a0:  e48d0018  swc1      t5,24(a0)

  897a4:  24020001  addiu      v0,zero,1

  897a8:  ac82001c  sw        v0,28(a0)

  897ac:  3c020024  lui        v0,0x24

  897b0:  c4419204  lwc1      at,-28156(v0)

  897b4:  c4c00004  lwc1      zero,4(a2)

  897b8:  c4629200  lwc1      v0,-28160(v1)

  897bc:  3c020010  lui        v0,0x10

  897c0:  46010002  mul.s      $f0,$f0,$f1

  897c4:  c441fbc0  lwc1      at,-1088(v0)

  897c8:  acc50020  sw        a1,32(a2)

  897cc:  460000cd  trunc.w.s    $f3,$f0

  897d0:  acc00010  sw        zero,16(a2)

  897d4:  46801820  cvt.s.w    $f0,$f3

  897d8:  46020002  mul.s      $f0,$f0,$f2

  897dc:  46010002  mul.s      $f0,$f0,$f1

  897e0:  4602003c  c.lt.s    $f0,$f2

  897e4:  00000000  nop

...

Ca continue apres et je pense que pour calculer le MD5, il faudrai créer un programme PSP en assembleur qui accede au coprocesseur pour lui faire calculer ce MD5.

Je continue les tests ...

Modifié par fuktop13
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