Les irréductibles réfractaires aux dongles DRM tels que le Cobra USB ou le True Blue risquent de bientôt pouvoir se consoler de ne pas pouvoir profiter des avantages proposés par ces dongles. Un développeur, sous le pseudonyme de Shadoxi, s'est penché sur les tréfonds de ces deux petites bêtes et a réussi à apporter un viatique plus qu'important à la scène PS3. En effet, ses recherches (pas encore finalisées, c'est-à-dire en "Work In Progress") lui ont permis d'aboutir à des découvertes plus que fascinantes.
Tout d'abord, un des ses premiers exploits consiste à être parvenu à trouver l'endroit où se terrait le payload des dongles dans le firmware et dans la mémoire PS3, même s'il n'est pas le premier à le faire. Sa seconde trouvaille est plutôt une explication. Dans celle-ci, on découvre de quelle manière il est possible d'implanter dans un firmware les deux payloads, pour pouvoir de cette façon exploiter les fonctionnalités offertes comme notamment le lancement des jeux 3.6+ et ce donc sans dongle.
Voici les propos tenus par Shadoxi :
J'ai compris où était situé le payload des dongles True Blue et Cobra. Vous pouvez le trouver à l'offset
@360000 dans le lv2_kernel et 7f0000 dans la mémoire de la PS3. Selon les développeurs de ps3devwiki (ps3devwiki.com/index.php/ReDRM_/_Piracy_dongles), le dump du payload du LV2 à 0x7f0000 a aussi été décrypté. @ LV2 dump 0x7f0000 (pastebin.com/3VG76HQs)
Faites un glisser/déposer du payload dans IDA et lancez-le en mode Binary file, Processor type PPC. Appuyez sur "C" pour convertir en code ASM.
Pour commencer, vous devez éditer l'header du lv2_kernel.self (venant du CFW True Blue) à l'offset 0x1D. Remplacez 36 1A 00 par 4C FC F0 et décryptez-le avec l'outil unself de fail0verflow. Ouvrez le lv2_kernel.elf avec IDA Pro (en mode binary file), rendez-vous à l'offset 360000 et appuyez sur "C" pour convertir en code ASM.
Le True Blue utilise certains HVCALL :
- lv1_insert_htab_entry
- lv1_undocumented_function_114
- lv1_undocumented_function_115
- lv1_allocate_device_dma_region
- lv1_map_device_dma_region
- lv1_net_start_tx_dma
- lv1_net_control
- lv1_panic (shutdown ps3 when TB is unplugged)
Ce paylaod fait certains HVCALL:
- lv1_insert_htab_entry (map lv1)
- lv1_allocate_device_dma_region (?)
- lv1_map_device_dma_region (?)
- lv1_net_start_tx_dma (?)
- lv1_net_control (?)
- lv1_panic (shutdown ps3 when TrueBlue dongle is unplugged)
- lv1_undocumented_function_114 (map lv1)
- lv1_undocumented_function_115 (unmap lv1)
Nous devions dumper la mémoire du lv2 et du lv1 quand le dongle était branché. J'ai donc créé un CFW True Blue modifié avec le syscall peek and poke. Il fonctionne parfaitement !
Pour ceux qui auraient du mal à comprendre certains mots, des explications quant à leur sens s'imposent :
? DRM (Digital Rights Management) : se traduit par "Gestion des Droits Numériques". Dans le cas des dongles PS3, cela permet de vérifier que le dongle est bien présent pour qu'ainsi, les fonctions du CFW puissent être débloquées.
? Payload : traduisible par "Charge utile". On pourrait donner comme définition générale : partie utile d'un message, par opposition à la partie servant pour assurer la transmission. Dans le cadre de la PS3, cela signifie : micro-programme chargé d'exécuter sur le firmware les actions pour lesquelles il est programmé, comme par exemple lancer un syscall contenu dans son code.
? Syscall : donne en français "Appel système". Il permet d'accomplir de multiples actions sur le système d'exploitation comme entre autres ouvrir, lire ou encore écrire sur les systèmes de fichiers. En d'autres termes, avoir un accès direct aux syscalls est un grand plus car cela ouvre pas mal de portes. Sur la PS3, le syscall 159 permet d'initialiser le SPU du système, le syscall 348 permet d'allouer de la mémoire, le syscall 386 de la console permet de contrôler l'allumage des LED... Pour la petite histoire, depuis l'OFW 3.55, Sony a corrigé les restrictions de la région mémoire et les permissions d'accès en lecture et en écriture. C'est pour cette raison que le lv1 peek (lv2_lv1_peek - graf_chokolo) et le lv1 poke (lv2_lv1_poke - graf_chokolo) avaient été créés.
? LV1/LV2 : kernels contenus dans le dev_flash du disque dur interne de la PS3. Ils sont au format .self (Signed Executable and Linkable Format), à peu près l'équivalent du .exe sous Windows.
Espérons que cette avancée porte ses fruits dans les jours ou semaines qui vont suivre ou que l'avenir nous réserve autre chose de très bon.
Il n'est pas possible d'avoir les fonctionnalités du Cobra ou du True Blue en injectant un des payloads ci-dessous sur n'importe quel autre dongle (PS3Key, X3MAX, etc.) !