Les acteurs :
Gogoackman : pret pour un portage de fbaxxx ?
Soulheaven : fournisseur des cygnos, voir plus ?
Nounours59330 : recherche d'infos / technicien
Sadovich : technicien
_n3o_ : technicien / bidouilleur
Artik : technicien / bidouilleur
Le matériel :
- Une Xbox 360 non mise à jour disponible le 11 Aout
- Une puce Cygnos V2 http://consoles.libr...r-xbox-360.html
- 3 résistances 330 Ohm
- Des compétences en soudures
Les projets :
- Un portage de fbaxxx par Gogoackman (j'attends ses infos)
- Un portage de XBMC (je dois contacter la team XBMC)
Les infos :
-----------------------------------------------------
Maj 17 Aout :
Les lilbrairies Libxenon sont disponibles. Elles permettent de compiler du code sans avoir le sdk360 officiel.
http://www.free60.org/wiki/Libxenon
http://free60.git.so...fc4967b93c0c619
Un émuleur, Snes9x est déjà porté en 1 jour. Une vidéo de l'ému :
-----------------------------------------------------
http://www.logic-sunrise.com/news-40263-ne-mettez-pas-tout-de-suite-votre-console-a-jour-maj-video.html
D'après le site free60.org, une faille permettant le lancement de homebrews serait comblée en intallant la dernière version du NXE, disponible depuis aujourd'hui, en connectant votre console sur internet. C'est au niveau du 1er niveau de boot que la faille serait réparée, et depuis toutes les mises à jours qui existe, c'est jusqu'à aujourd'hui la seule à toucher à cette partie vitale permettant le boot du dashboard.
Sur environ 1000 mises à jour de faites, 1 console aurait un soucis. Etant donné que cette mise à jour touche cette partie de code si importante, le moindre soucis résulterait d'un non fonctionnement complet de la console. Cette mise à jour comble donc cette faille, que la team free60 exploite depuis un moment, alors qu'elle était proche de la releaser.
La faille permettait de lancer du code non signé, c'est à dire le lancement de n'importe quel homebrew, le tout sans puce, permettant ainsi de placer la Xbox 360 au même rang que la Xbox 1 en terme de hack.
C'est pour ça que Logic-sunrise vous invite à ne pas faire cette mise à jour, sauf si le lancement d'homebrews ne vous interesse pas. On vous tient au courant dès que des news arrivent de Free60.org.
Plan de montage de la puce Cygnos V2 :
build.py et montage résistances :
Suite à la publication d'une documentation complète concernant la mise en oeuvre de l'exploit Free60/KK voici quelques informations complémentaires pouvant faciliter quelque peu la mise en pratique.
Tout d'abord voic une photo d'un montage des 3 résistances 330 Ohm.
Rappel sur l'utilisation des 3 résistances :
Certains composants sont nécessaire afin d'utiliser le JATG pour paramétrer l'adresse DMA à utiliser dès que la séquence de boot se lance et tant que le JTAG fonctionne.
Au départ un microcontroller externe a été utilisé, mais il existe déjà un microcontroller, le SMC. Il y a quelques ports GPIO, qui sont au moins sur les cartes Xenon facilement accessibles.
Ils utilisent du 3.3V, de ce fait il est nécessaire d'ajouter quelques résistances pour maintenir un voltage de 1.8V permettant de conserver le niveau logic du GPU.
Les Zephyr et supérieures n'ont pas assez de GPIO disponibles, mais pas d'inquiétude, une autre solution a été trouvée.
Dans le cas ou vous utilisez le SMC hacké avec les GPIO, utilisez des résistance 330 Ohm pour connecter :
J1F1.3 --- [330R] --- J2D2.1
J1F1.4 --- [330R] --- J2D2.2
J1F1.5 --- [330R] --- J2D2.4
Note : ne tenez pas compte des fils verts, uniquement les rouges
Réalisation d'une image permettant de lancer l'attaque. Pour cela il est nécessaire d'utiliser un script python qui permettra de construire cette image à partir des différents fichiers.
Script python : http://free60.cvs.so...ree60/imgbuild/
Source : gx-mod
Exploit Free60 : tous les détails :
Un texte très intéressant a été rédigé par gx-mod, il est disponible à cette adresse : http://x360.gx-mod.c...hp?storyid=2174
Exploit Free60 : hack SMC et configuration JTAG
Toujours dans l'optique de mieux cerner l'exploit Free60/KK et d'entrer encore plus dans le détails de la documentation complète voici un complément d'information concernant le hack SMC ainsi que la configuration JTAG. Ces informations sont une traduction par Bono2007 d'explications de tmbinc sur Xboxhacker.net.
Configuration JTAG
Ici je veux décrire la séquence JTAG qui prépare un peu plus le controleur NAND. Lire le fichier hack.txt avant de poser des questions ici, c'est vital pour comprendre ceci
Rappelez-vous qu'on ne peut pas écrire l'adresse DMA cible depuis le SMC, donc nous avons besoin de faire ça via le JTAG. Tout cela a déjà été discuté sur le JTAG-thread (xboxhacker), mais reconsidérons ce que nous avons à écrire :
Code: write32(0xd0000018, 0x20100); // enable PCI bridge
write32(0xd0140010, 0xea00c000); // enable BAR0 for nand controller (to appear in pci space at ea00c000)
write32(0xd0140004, 0x6); // enable NAND, enable busmaster
write32(0xea00c00c, PAYLOAD_BASE + 0x20000); // address of exploit buffer, in flash (we could write this in SMC, too, but it's easier here)
write32(0xea00c01c, 0x00130360); // target address of main data (overwrites idle thread context and first stage exploit code)
write32(0xea00c020, 0x00002080); // target address of ECC data, overwrites HV offset
Nous devons aussi faire attention que cela arrive assez tôt, mais pas trop, puisque nous ne pouvons interférer avec le CPU. La 1e méthode implémentée dans un microcontroleur AVR était d'attendre simplement que l'IDCODE soit valide, attendre un peu et ensuite démarrer l'écriture JTAG
Les routines sont du genre :
static inline int j(int tdi, int tms) { int v = 0; if (tdi) v |= TDI; if (tms) v |= TMS; set_bits(v); set_bits(v | TCK); int res = !!(get_bits() & TDO); return res; } unsigned long long jtagn(int IR, unsigned long long val, int n) { j(0, 0); // if we were in TLR, nop if we are in RTI already j(0, 1); j(0, 1); j(0, 0); j(0, 0); j_scanIR(IR); j(0, 1); j(0, 1); j(0, 0); j(0, 0); unsigned long long res = j_n(val, n); j(0, 1); j(0, 0); // and we are in RTI again return res; } static unsigned long jtag32(int IR, unsigned long val) { j(0, 0); // if we were in TLR, nop if we are in RTI already j(0, 1); j(0, 1); j(0, 0); j(0, 0); j_scanIR(IR); j(0, 1); j(0, 1); j(0, 0); j(0, 0); unsigned long res = j_n(val, 32); j(0, 1); j(0, 0); // and we are in RTI again return res; } void write32(unsigned long addr, unsigned long data) { jtagn(0xe0, 3 | addr | (0xFULL << 32), 36); jtag32(0xe1, data); jtagn(0xe4, 1, 1); } void jtag_doit(void) { int i = 20; while (i--) { volatile long j = 10000; while (j--); } write32(0xd0000018, 0x20100); write32(0xd0140010, 0xea00c000); write32(0xd0140004, 0x6); write32(0xea00c00c, PAYLOAD_BASE + 0x20000); // address in flash of exploit write32(0xea00c01c, 0x00130360); write32(0xea00c020, 0x00002080); } static void TLR(void) { int i; for (i=0; i<5; ++i) j(0, 1); } void main() { ... hw init while (1) { if (hack_state == 1) /* hacked */ { TLR(); if (!is_valid_id(jtag32(0x50, 0))) hack_state = 0; /* poweroff */ } else { /* power off */ TLR(); if (is_valid_id(jtag32(0x50, 0))) { jtag_doit(); hack_state = 1; } } } }
Tiros a fait un hack formidable en ajoutant ce code dans le SMC, donc nous avons juste besoin d'utiliser les résistances pour rendre le SMC capable de dialoguer au JTAG du GPU.
Hack SMC - Part1
Ici un petit howto sur le patch du code SMC. D'abord, rappelez vous que le code SMC est stocké dans la NAND de 0x1000 à 0x4000 (habituellement), et qu'il est encrypté, mais peut être décrypté de façon triviale. Le script imgbuild produit le SMC décrypté pour vous. C'est un code 8051, et c'est le code qui est en charge de booter le CPU, et il contrôle aussi des éléments hardware. Le CPU peut dialoguer au SMC via PCI-e, donc il y a une "command handling" dans le code. Il a plusieurs versions du SMC (même multiples pour un type de carte), mais utiliser n'importe quel SMC fait pour votre type de carte conviendra (ie la révision importe peu, mais il est important que ce soit fait pour votre type de carte, ie, Xenon/Zephyr/Falcon/Jasper)
Le hack fonctionne ainsi :
Juste au démarrage du kernel, le kernel demande le RTC depuis le SMC. C'est la command 04, qui est envoyée à travers les registres ea00108x. Dans le SMC, approximativement à l'offset 0x836 (diffère suivant les versions des SMC), il y a un code semblable (pseudo code pour éviter de coller de l'assembleur)
Code:if (A == 1) goto CMD_01;
else if (A == 4) goto CMD_04;
else if (A == 7) goto CMD_07;
else if (A == 0xa) goto CMD_0A;
else if (A == 0xF) goto CMD_0F;
...
suivez la CMD_04. La fonction finie par une série de "mov A, ; lcall write_fsr_d5". C'est la fonction que nous voulons hacker, et nous avons besoin de la fonction suivante :
"mov FSR_F5, 7"
Comme FSR_F5 est le registre de la command NAND (aussi accessible depuis ea00c0xx), et 7 est la commande "read physical page, DMA" . Encodé, c'est "75 f5 07", on doit donc réécrire "E5 30 12 xx xx" avant le "22" (ret) avec "75 f5 07 22", i.e. "mov FSR_F5, 7; ret".
That's it.
Source : gx-mod