Bonjour !

Voici enfin le 1er article pour la PS4 par rapport à mes travaux !

Note: Certains points peuvent être flou, il n’est pas facile de comprendre un système complexe comme ça, mais je vais m’efforcer de retranscrire le fonctionnement exact.

Aujourd’hui, nous allons parler de l’outil « OrbisSWU » qui gère le système de mise à jour de la PS4.

OrbisSWU est une application spéciale stockée dans tous les PUP de la PS4. Elle permet la mise à jour des Firmware de la PS4. Kernel, Application, Lecteur Blueray et Chipset WiFi/Bluetooth. Tout passe par lui.

Tout commence dans le SceShellUI, quand votre PS4 demande à faire une mise à jour, elle va commencer par récupérer celle-ci dans un dossier spécifique. Par chance, SceShellUI est une application qui charge en vérité un .exe codé en C# (Oui, oui) basé sur Mono. Cette librairie est appelée app.exe.sprx.

Il suffira de récupérer cette librairie depuis le FTP de xVortex (Qui a la particularité de décrypter les exécutables de la PS4 en ELF). Puis d’en extraire l’exécutable Windows.

Vue Hexadécimal de la librairie PS4 contenant l’exécutable
DoUpdateJob.cs dans app.exe.sprx

Le SceShellUI va copier le PUP dans l’espace /update/PS4UPDATE.PUP et extraire le orbis_swu.elf. Puis, un redémarrage sur le mode update va être initié.

Lors du démarrage, le mini-syscore (le processus 1 après le chargement du kernel) va vérifier sur quel mode il doit être chargé.

Le mini-syscore vérifie quel mode il doit charger lors du démarrage de la console, ici le mode « update »

Une fois le mode update initié, l’exécutable orbis_swu.self préalablement extrait va être exécuté par la console au moyen de la fonction sc_spawn.

Lancement du orbis_swu.self à partir de mini-syscore en utilisant le mode update

Durant son exécution, le PUP va être entièrement déchiffré. Les PUP sont des fichiers de mise à jour constitués de « blobs », des parties encryptés, parfois compressés qui seront décryptés un à un par le SAMU (Le processeur de sécurité de la Playstation 4).

Une liste de blobs pour le Firmware 5.05, ici la signature est en md5 et correspond à la version encrypté. Le contenu des fichiers lui est décrypté.

Les blobs entre eux forment différents types de fichiers, voici une (petite) liste de fichier qu’ont peut retrouver à l’intérieur :

1, ???, /dev/sflash0s0x32b
2, ???, /dev/sflash0s0x33
3, ???, /dev/sflash0s0x38
3, ???, wlan_firmware.bin
4, ???, /dev/sflash0s1.cryptx2b
5, secure_modules.bin, /dev/sflash0s1.cryptx3b
6, system.img, /dev/da0x4b.crypt
7, ???, /dev/da0x2
8, eap.img, /dev/da0x3.crypt
9, recovery.img, /dev/da0x0.crypt
10, /dev/sflash0s1.cryptx40
11, /dev/da0x1.crypt
11, preinst.img
12, system_ex.img, /dev/da0x5b.crypt
13, /dev/sflash0s0x32b
14, /dev/sflash0s0x33

Pour décrypter le PUP, la PS4 va utiliser une liste de commande (ioctl) pour le « device » /dev/pup_update0 :

Nom de la fonctionIdentifiant de la commande
Decrypt PUP Header0xC0184401
Verify Segment (1)0xC0184402
Verify Segment (2)0xC0184403
Verify BLS Header0xC010440D
Decrypt Segment0xC0184404
Decrypt Segment Block0xC0284405
Listes des commandes ioctl pour le déchiffrage de la mise à jour

Il est à noter que le SAMU (Coprocesseur de sécurité) refuse de décrypter les PUP de version inférieur à la version actuelle, c’est un des mécanismes de sécurité qui détecte les tentatives de downgrade.

Une fois les morceaux déchiffrés, Orbis_SWU va utiliser des fonctions spécialisés pour mettre à jour les différentes parties de la console, tel que le lecteur BlueRay, le chipset Wifi/Bluetooth, etc…

Une petite partie des fonctions du orbis_swu.self

Lancement de la mise à jour hors Mode Update

Il est possible de lancer l’utilitaire de mise à jour sans mettre la console en mode update, celle-ci pourra tout de même mettre à jours les composantes de la PS4. Pour se faire, il faut disposait d’un exploit Kernel, Le H(omebrew) EN(abler), et le make_fself.py de Flat_Z

L’idée est qu’au travers d’un Homebrew « Hôtes », d’exécuter un orbis_swu.self modifié qui effectuera ce que nous voulons. Il suffira d’utiliser la fonction sceSystemServiceLoadExec(char* path, void* unk);

La modification du orbis_swu devras appliquer 2 patch pour le rentre utilisable avec une application hôtes.

  • La modification de la sortie vidéo : orbis_swu est normalement utilisé dans un contexte ou SceShellUI n’existe pas. Il faudra donc maintenant lui indiquer qu’il doit prendre la sortie des Application.
  • Lui donner des permissions : Comme tout processus système, orbis_swu doit pouvoir avoir accès à certaine chose. Il faudra donc lui donner des permissions spéciales et le faire s’échapper de sa sandbox au travers d’un appel système. Il est aussi nécessaire de patcher le kernel pour pouvoir avoir accès au sflash en écriture.
Modification du « start » pour exécuter un syscall (ici 67) qui va simplement supprimer la sandbox de l’application.
Ici, il faut définir le registre ESI (Argument 2) à 0 pour le définir sur MAIN

Une fois ceci fait, votre homebrew est prêt à utiliser le orbis_swu pour effectuer des mises à jours ! C’est maintenant que les choses commencent à devenir intéressantes !

Le orbis_swu.self lancé sans la présence d’une mise à jour.

Cas 1 : Mettre à Jour une PS4 sans lecteur Blu-ray

La première utilisation possible de ceci est de rentre la mise à jour des consoles sans lecteur Blu-ray possible.

BdWriter::checkDeviceExist -1PupReader::checkSegmentUpdate initialize failed: 0x801809a8 PupReader::Estimate::2019 checkSegmentUpdate failed: 0x801809a8 [ERROR]sceUpdaterVerifySign() failed : 801809a8

Ici, nous pouvons voir que la mise à jour est impossible car la fonction BdWriter::checkDeviceExist ne parvient pas à trouver le lecteur Blu-ray. Il suffirait de modifier cette fonction pour lancer une mise à jour à un firmware supérieur.

L’emplacement d’affichage de l’erreur

Le patch sera très simple, il suffira de modifier l’instruction de retour de l’erreur par un xor eax, eax au lieu d’un mov eax, ebx

L’instruction à modifier

Tadaaaa ! La PS4 se met à jour même sans lecteur Blu-ray 😀

ATTENTION ! Mettre à jour sa PS4 sans lecteur Blu-ray n’est pas sans risque sans backup du disque dur, vous ne pourrez plus utiliser les outils de restauration (Soft Brick). Il sera toujours possible d’ajouter un lecteur Blu-ray pour débloquer la situation.

Mise à jour de la PS4 sans être dans le mode update

Cas 2 : Tentative de Downgrade

Même s’il peut sembler fantaisiste de tenter de downgrade de la plus simple manière qui soit, il faut tout de même que ce procédé rappel le downgrade de la PSVita Modoru par TheFlow qui exécute son module de mise à jour pour downgrade avec une version modifier.

Ici l’idée est simple, si la PS4 ne peut pas décrypter des blobs de PUP inférieur à sa version, nous allons les décrypter pour lui. L’attaque est simple, nous allons accrocher (hook) le syscall dédié au ioctl et intercepter les appels fait au « device » de décryptions puis :

  • Faire une signature MD5 de la version encrypté
  • Chercher la version décryptée dans une clé USB
  • Retourner la version décryptée sans faire appel au SAMU
Hook du syscall « ioctl » est accroche des fonction utiles.

Une fois ceci en place, j’ai été surpris que cela fonctionne ! La PS4 a accepté la mise à jour !

Néanmoins, une erreur au niveau du Switch Bank. Ce qui annule la mise à jour et rebascule sur la version en cours (La bank de secours)

L’erreur 0x8018085F (SCE_UPDATER_CORE_ERROR_PUP_US_NEEDAUTH )

Après analyse du SFLASH, il est possible de remarquer que des valeurs ont tout de même changé, tel que la version de celle-ci.

Je continue mes recherches pour savoir comment corriger la switch bank et pourquoi pas avoir la possibilitée de Downgrade ^^

J’espère que l’article vous aura plus, moi je continue mes travaux. Ciao !


18 commentaires

Chronoss · 1 juin 2020 à 14 h 52 min

Un article super 👍 intéressant. Espérant que cella apportera un plus pour la scène PS4. Un seul mot : bravo 🍾

    theorywrong · 1 juin 2020 à 14 h 55 min

    Merci ! ^^ J’ai essayée de faire le plus simple possible même si dans se cas là c’est commpliqué 😛

johanno · 1 juin 2020 à 18 h 37 min

vive la france…especially cannes…

Amanu · 1 juin 2020 à 19 h 39 min

I love how you you made it on point explaining every detail i have you fix that error with the help of the devs in the discord alot of end users need this bad aside from the mira project this is a huge project for the PS4 and you have our supporr from Africa we are routing for you good luck on your research much respect @Theory_wrong 🙌🏾

Hyndrid · 1 juin 2020 à 19 h 58 min

Merci pour l’article en francais.

Badboy · 2 juin 2020 à 1 h 36 min

Bonne initiative de l’avoir publié 😉

Anonyme · 2 juin 2020 à 2 h 24 min

TRES INTERESSENT..es possible de downfrader la ps4 dans un future proche ?

Samuel · 3 juin 2020 à 12 h 10 min

bon travail monsieur
J’ai une question à laquelle personne ne m’a répondu. Y a-t-il de l’espoir de cette rétrogradation d’une PS4 dans un firmware supérieur comme 7.51 à 5.05 parce que j’ai perdu l’espoir de jailbreaker une PS4?

    theorywrong · 3 juin 2020 à 14 h 10 min

    Bonjour !
    Pour le moment nous somme en train de voir si déjà le downgrade est possible depuis un exploit kernel.
    Néanmoins il faut se rappelé qu’il est nécessaire de by-pass une 1er protection, à savoir donné des donnée pré-décrypté pour lancer le downgrade.
    Je ne pense pas malheureusement qu’un downgrade depuis un firmware supérieur est envisageable durant ses 2 ou 3 années sans les clé du SAMU.

      Amanu · 3 juin 2020 à 17 h 40 min

      you might have the SAMU keys from people who exploited in private like the way they did in the mira project for higher firmwares and make a specific firmware to downgrade from like 6.50 cause the keys are rare. im not sure if they will be willing to share those keys but worth the try if you asked

      theorywrong · 3 juin 2020 à 18 h 08 min

      Mira Team don’t have SAMU keys ! We have do some preparation if a jailbreak come. We have also got some dump from people with kexploit for 6.XX. But SAMU keys was not dumped ^^

Amanu · 3 juin 2020 à 19 h 21 min

Sorrh for the confusion as rare are SAMU keys the downgrade might be impossible to do without a kxploit on higher firmware but what your doin here is awesome and find we hope you find some other way good luck on your research

Samuel · 4 juin 2020 à 10 h 46 min

Soo without samu keys there is no way to downgrade a higher firmware at this time but sir one more question what do u think about kexploit of higher firmware 7.51 or coming updates is there hope to see fully jailbreak when ps5 release ? Cuz I heard they have the jailbreak of any PS4 version but devs are waiting the ps5 to try it cuz Sony will patch it is that right sir ?

somo · 8 juin 2020 à 9 h 38 min

Hi, first of all, thanks for this great article!

I’m investigating an error on my 2.02 PS4 that nos allow me tu update the firmaware, I would like to know how you decompile the orbis_swu.self file and how you know the funcion names. Mi idea is to find my error codes and know why this errors are thrown to know if there is a Bios, Mobo, Hdd controller error.

Thanks.

    theorywrong · 19 juin 2020 à 23 h 25 min

    Hi ! I’m simply use IDA. For got the decrypted orbis_swu, extract it from the 2.02 PUP, upload it to the PS4 and simply re-get it. PS4 FTP have a special features for decrypt executable on the fly during download. Can you give me the error code ?

alex96 · 15 juin 2020 à 22 h 27 min

hey (sorry for my bad english)
i have a question..
i bought a ps4 with fw 5.05 without hard drive and blu ray drive
can i install a 5.05 firmware without blu ray drive?
my error is su-42118-6 🙁

    theorywrong · 19 juin 2020 à 23 h 22 min

    Hey ! You can follow this article here. Don’t forget to read the Warning sections !

qyesqjdjyu · 8 novembre 2020 à 20 h 59 min

Muchas gracias. ?Como puedo iniciar sesion?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.