Blog créé grâce à Iblogyou. Créer un blog gratuitement en moins de 5 minutes.

3DS-linker.com

R4 3DS par la boutique 3ds-linker.com

3DS 2.1.0-3E dumpé Posté le Mardi 28 Juin 2011 à 10h00

UpSilon nous poste que le firmware 2.1.0-3E de la 3DS dumpé.  Dumpé, c'est quoi ? un dump permet donc de vider la mémoire d'une base de données. c'est comme créer une image de la mémoire afin que des développeurs puissent trouver un dysfonctionnement dans un programme .  dans le domaine du jeux video , cela permet plusieurs choses comme créer des sauvegardes de jeux ou encore permettre à des développeurs en herbe de trouver une faille dans un système d'exploite , tel q'un firmware  d'une console.

Image

 Les firmwares sur les consoles sont toujours téléchargés par la console et en aucun cas gardé en mémoire. Si des développeurs reprenaient ce firmware, qu'ils le décryptaient cela pourrait un jour donner lieu à une quelconque faille et un jour lancer des backups, ce qui n'avait pas été le cas de la DS qui ne se mettait pas à jour et ne pouvait pas éxécuter de contenu hacké.

La 3DS est sortie il y a presque 2 mois, le 25 mars plus précisément. Mais la communauté du hack s'est posée la question que tout le monde se pose au lancement d'une nouvelle console : qu'en est-il au niveau du hack ? Linker R4 gold 3DS par la équipe R4 ou Supercard DS two par la équipe Supercard .

Mais très rapidement, les développeurs avaient réagi en lançant pour chaque linker une mise à jour ajoutant la compatibilité avec la Nintendo 3DS. Par contre, le hack, lui n'a pas fait parlé de lui.

En attendant vous pouvez retrouver le dump du firmware ci-dessous accompagné pour retrouver les composants sur les fichiers de Nintendo.

Structure des metadata

_Header
DEBUT     |               |LONGUEUR      |DESCRITPION
RSA 2048|RSA 4096 |                      |
0x000    | 0x000      |4                   |Signature type
0x004    | 0x004      |256 / 512      |Signature
0x104    | 0x204      |60                 |Padding modulo 64
0x140    | 0x240      |64                 |Issuer
0x180    | 0x280      |1                   |Version
0x181    | 0x281      |1                   |ca_crl_version
0x182    | 0x282      |1                   |signer_crl_version
0x183    | 0x283      |1                   |Padding modulo 64
0x184    | 0x284      |8                   |System Version
0x18C    | 0x28C      |8                   |Title ID
0x194    | 0x294      |4                   |Title type
0x198    | 0x298      |2                   |Group ID
0x19A    | 0x29A      |62                 |reserved
0x1D8    | 0x2D8      |4                   |Access rights
0x1DC    | 0x2DC      |2                   |Title version
0x1DE    | 0x2DE      |2                   |Number of Contents
0x1E0    | 0x2E0      |64                  |Content Records
0x220    | 0x320      |40                 |Padding modulo 64
0x248    | 0x348      |4                   |Boot content
0x252    | 0x352      |4                   |Banner content
0x256    | 0x356      |4                   |Banner size
0x260    | 0x360      |32                 |Hash

_Content Records
DEBUT     |LONGUEUR |DESCRIPTION
0x00     |4       |Content ID
0x04     |32       |SHA-256 Hash

_Certificates
DEBUT     |LONGUEUR |DESCRIPTION
0x000     |4               |Signature type
0x004     |*                |Signature
0x104     |64             |Issuer
0x124     |4               |Tag
0x128     |64             |Name
0x168     |                 |Key


Exemple de Code Source pour Programme.
===================================
typedef struct {
         u32 cid;         // Content ID
         u8  hash[0x20];  // SHA-256 hash
 } content_record;        // Taille: 0x24 bytes
 
 enum sig_type {
         RSA_2048_SHA256 = 0x00010004,
         RSA_4096_SHA256 = 0x00010003,
         RSA_2048_SHA1   = 0x00010001,
         RSA_4096_SHA1   = 0x00010000
 };
 
 typedef struct {
         u32 sig_type;
         u8 sig[*];     // * = Taille de la Signature
         u8 fill1[60];
         u8 issuer[64]; // Root-CA%08x-CP%08x
         u8 version;
         u8 ca_crl_version;
         u8 signer_crl_version;
         u8 fill2;
         u64 sys_version;
         u64 title_id;
         u32 title_type;
         u16 group_id;  // Editeur
         u8 reserved[62];
         u32 access_rights;
         u16 title_version;
         u16 num_contents;
         content_record contents[0x40];
         u8 padding[0x28];
         u32 boot_content;
         u32 banner_content;
         u32 banner_size;
         u8 hash[0x20]; /* Inconnu */
 } tmd;
 
 //Le tmd est alors suivi par une chaîne de certificats.
 typedef struct {
         u32 sig_type;
         u8 sig[*];        // * = Taille de la Signature
         u8 issuer[64];
         u32 tag;          // Identifie ce qui est signé.
         u8 name[64];      // Nom de chose étant signée.
         u8 key[...];
 } certificate; "

 

0 commentaire - Permalien - Partager
Commentaires