1

Discussion : [c++] Extraire Fcrt

Bonjour

Je sais que je pars de très loin mais bon, en plus d'apprendre à programmer j'apprends comment marche les xbox360.

Je voudrais extraire le fcrt des nand Corona, ceux qui suivent le xkey comprendront pourquoi ^^

J'ai remarquer en étudiant un peut le code source de fcrt-eXtractor-V0.3-by-BestPig

Un fcrt extrait avec ce log est crypté? Un fcrt extrait avec flash Tool comme proscrit par la team Xkey est différent de celui de bestpig (dans flashTool on rentre la clé Cpu pour extraire)

Je code en c++ avec Qt pour avoir mon interface graphique. J'ai réussi en étudiant les sources de 360 Flash Tool a implémenter les méthode sha1 tous ca. donc avec un keyvault + une clé j'arrive a décrypter un keyvault.

Ma question est : j'ai pas compris comment à partir du pattern "fcrt.bin", on trouve l'offset de départ du fcrt ^^

Et surtout, est ce que je dois décrypter ma nand avant? A ce que j'ai compris je peux pas exploiter le code source de fcrt-eXtractor-V0.3-by-BestPig sauf si je prend une Nand déjà décrypter?

Et es ce que la nand est crypté comme un key vault? Je veux dire l'en tête d'une nand est lisible, il me semble avoir lu que la nand est crypté à partir d'un certain offset? C'est ca ? Mais une fois que ca commence a être crypté c'est fait partout pareil?

Merci

2

Discussion : [c++] Extraire Fcrt

Bonjour,

Le résultat du fcrt.bin est different car celui qu'extrait mon logiciel est chiffré.
Alors que 360 flash tool le dechiffre.

Le .meta est necessaire si on veux injecter le fcrt.bin dans une nouvelle nand sans en connaitre la clef de chiffrage.

Pour extraire a partir du pattern "fcrt.bin" c'est assez simple.

Voici ce que l'on retrouve toujours dans la nand.
[nom fichier][offset dans la nand sur 8 octets][taille du fichier sur 4 octets][meta sur 4 octets]

C'est les donnees que je lis ici :
Code C : [Séléctionner le code]

  void    get_fcrt_info(t_file *nand, int offset) {   nand->fcrt_offset = read_nb(nand->file, offset, 8);   printf("Data start block is at offset %#.4xx98AnTiSlAsHx98n", nand->fcrt_offset);   offset += 8;   nand->fcrt_len = read_nb(nand->file, offset, 4);   offset += 4;   printf("Fcrt lenght is %dx98AnTiSlAsHx98n", nand->fcrt_len);   strncpy(nand->fcrt_meta, nand->file + offset, 4);   printf("Meta is : %x %x %x %xx98AnTiSlAsHx98n", nand->fcrt_meta[0],nand->fcrt_meta[1], nand->fcrt_meta[2], nand->fcrt_meta[3]); }  

Une fois que l'on connait l'offset et la taille, il suffit d'un petit lseek pour ce positionner au bon endroit dans le fichier, et on lit de la bonne taille et l'on possede le fichier wink.

Les offsets sont donnees par rapport a des blocks de 16896 octets.
Donc si ton offset est 2, l'offset reel dans le fichier sera 2 * 16896.

Ceci est applicable sur une nand directement dumper, donc aucun dechiffrage a faire avant.

La nand en elle meme n'est pas chiffrer, ce sont juste certaine partie qui le sont, comme le kevault ou des fichiers les CB etc.
Tu peux voir ce script qui dechiffre certain fichier
http://www.logic-sunrise.com/forums/files/file/4782-buildpy-14719-by-marchisio-vola-fixed/

On vois bien que pour chaque fichier, ca differe un peu, mais ca reste tout le temps a peu pres la meme chose.
http://webstatus.kd2.org/userbar.php/jid/zbp.yvnzt..28tvcgfro/image.png
http://bestpig.fr/status_msn.png

3

Discussion : [c++] Extraire Fcrt

Je te remercie c'est bon ça marche ^^

Je sais comment trouvé le FCRT, me reste plus voir comment le décrypté...

Par contre. Je prend ton programme fcrt_extractor.exe

Je glisse ma nand dessus, ça me fait un fcrt.bin.

J'ouvre ma nand en hexa, je me place à l'offset de départ de mon fcrt, je copie colle dans un nouveau fichier mon fcrt, et j'obtiens pas le même que le tiens, c'est normal? Ou c’était juste une erreur? Il me manque la ligne de l'offset 200.

Sinon ben je te remercie ^^

4

Discussion : [c++] Extraire Fcrt

Je relis mon code, et je vois que j'ai oublie de te dire un petit detail wink.

Code C : [Séléctionner le code]

  offset = nand->fcrt_offset * 16896; while (writed < nand->fcrt_len)   {     fwrite(nand->file + offset, 1, 0x200, stream);     writed += 0x200;     offset += 0x210;   }  

Je lis bloc par bloc, donc de 200 en 200, mais a la fin de chaque bloc, j'ignore 16 octets (0x10).
Car a chaque fois il y a 16 octets qui sont des infos hors fcrt, c'est pour savoir si il y a des badblocs et ce genre de chose.
Donc normal que tu differes a l'offset 0x200, tu doit sauter 16 octets a chaque fois wink.

Desole pour ce petit oublie.

EDIT : Je viens de tenter d'extraire plusieurs fcrt.bin avec 360 Flash Tool et mon logiciel, a chaque fois les fcrt sont identiques.
360 Flash Tool le les dechiffres donc pas, d'ailleur cela parais logique puisque il les nomment fcrt_enc.bin
http://webstatus.kd2.org/userbar.php/jid/zbp.yvnzt..28tvcgfro/image.png
http://bestpig.fr/status_msn.png

5

Discussion : [c++] Extraire Fcrt

Donc j'ai vu ton post sur Xboxhacker et depuis ben j'avais compris mon erreur, et j'ai finis mon prog pour extraire le FCRT.

Mais je te remercie pour ton explication pour le fcrt, et oui j'avais vu après le nom fcrt_ENC.bin j'ai été con sur ce coup ...

Enfin bref d'ici quelques jours je pourrais mettre à jour mon prog sur Gueux ^^