PS5 ESP32S2XploitHost

krakHEN Srv32 v1.2

Portada de krakHEN Srv32 v1.2
Europa
FW 4.03/4.50/4.51
Plataformas
Medio
Hilos oficiales
Hilo Oficial PlayStation 5.png


Contenido

Introducción

Este tutorial detalla los pasos a seguir para ejecutar un Exploit Host (FW 4.03/4.50/4.51) de forma offline, configurado en un SoC ESP32/ESP32-S2/ESP32-S3 y desde un FPKG instalado en la PS5

*En este tutorial de hace uso del sketch PS5_Server32 de stooged

  • ¿Qué es ESP32 (Web de Espressif Systems)? Se trata de una familia de chips SoC (System on a chip) de bajo coste y consumo de energía, que incorpora tecnología Wi-Fi y Bluetooth de forma integrada, según el modelo. El ESP32 fue creado y desarrollado por Espressif Systems y es el sucesor de la la familia ESP8266.

*¿Qué diferencias técnicas hay entre los modelos ESP32, ESP32-S2 y ESP32-S3?

Tutorial PS5 ESP32 00.png

*No se facilitará ningún enlace de descarga de ninguna herramienta o material software con copyright.

Requisitos

Instalación Arduino IDE y configuración sketch

  • [PC] Descomprimir el archivo comprimido y ejecutar la aplicación Arduino IDE.exe
  • [PC] Permitir la actualización de paquetes de Arduino IDE y Nuevos Dispositivos

Tutorial PS5 ESP32 02.png

  • [PC] Añadir la librería ESP32 HTTPS Server a Arduino IDE (3 opciones)
    • a) Sketch > Include Library > Manage Libraries... > "ESP32 HTTPS Server" > Install
    • b) Descomprimir el archivo ZIP de la librería en la carpeta Arduino/libraries
      • Reiniciar Arduino IDE

Tutorial PS5 ESP32 15.png

    • c) Sketch > Include Library > Ad .ZIP Library... "
      • Seleccionar el archivo ZIP descargado y aceptar

Tutorial PS5 ESP32 03.png

  • [PC] Instalar el board Arduino ESP32:
    • Tools > Boards > Boards Manager > "esp32"

Tutorial PS5 ESP32 04.png

  • [PC] Conectar el ESP32 al puerto USB y acceder al modo DFU
    • Presionar el botón de arranque ("0") y, acto seguido y sin soltar el botón "0", presionar el botón reset ("RST"). Mantener pulsados ambos botones hasta escuchar el sonido de conexión de dispositivo extraíble de Windows.
  • [PC] Seleccionar el board esp32s2 Dev Module y aceptar la instalación/actualización del board

Tutorial PS5 ESP32 05.png

Tutorial PS5 ESP32 06.png

  • [PC] Comprobar qué puerto COM se ha asignado al ESP32 y asignar el mismo puerto en Arduino IDE
    • Administrador de dispositivos > Puertos (COM y LPT) > Dispositivo serie USB (COMX)

*Cada vez que se conecte el ESP32-S2 al PC, es posible que se asigne un puerto COM diferente

Tutorial PS5 ESP32 07.png

  • [PC] Abrir el proyecto/sketch PS5_Server 32
    • File > Open > ..\PS5-Server32-main\PS5_Server32\PS5_Server32.ino

Tutorial PS5 ESP32 09.png

  • [PC] Incluir la librería ESP32 HTTPS Server al proyecto (en caso de no incluirse por defecto)

Tutorial PS5 ESP32 16.png

  • [PC] Compilar el proyecto (botón "Verify")
  • [PC] Cargar el proyecto en el ESP32 (botón "Upload")

Errores conocidos

*  WARNING:  ESP32-S2FNR2 (revision v1.0) chip was placed into download mode using GPIO0.
esptool.py can not exit the download mode over USB. To run the app, reset the chip manually
To suppress this note, set --after option to 'no_reset'.
  • Esta advertencia se produce en fase de publicación (carga del proyecto en el ESP32), al no poder reiniciarse el SoC de forma automática y abandonar el modo descarga. Se corrige pulsando el botón RST.
    • IMPORTANTE: Aunque la consola muestre este aviso como un ERROR, éste no impide la publicación del sketch ni su posterior ejecución

Tutorial PS5 ESP32 17.png

* Error de identificación del board esp32.

Flashear BIN en ESP32

  • Este tutorial describe los pasos a seguir para poder editar y configurar un ESP32 de forma libre, sin necesidad de flasher una imagen cerrada en el firm del SoC.
  • En caso de disponer de un archivo BIN o generar una imagen de este proyecto y querer flashearla, se deben seguir los siguiente pasos:
    • Descargar NodeMCU PyFlasher 5.0.0
    • Configuración de NodeMCU para SoC's ESP32:
      • Serial port: Puerto COM asignado al ESP por el SSOO
      • Firmware: Ruta del archivo BIN
      • Baud rate: 115200
      • Flash mode: Dual I/O (DIO)
      • Erase flash: Yes, wipes all data

Tutorial PS5 ESP32 18.png

Sistema de archivos SPIFFS

  • ¿Qué es SPIFFS? Se trata del sistema de archivos por defecto, para las memorias SPI Flash NOR, que utiliza el ESP32. La característica principal es que este sistema de archivos no tiene una organización de directorios (carpetas), sino que usa una estructura plana, lo que condiciona el contenido de los archivos del Exploit Host que se quieran cargar en el SoC.


  • [PC] Descargar el plugin SPIFFS ESP32 indicado en la sección "Requisitos"
  • [PC] Crear la carpeta Tools en el directorio donde se haya creado el sketch PS5-Servidor32 (en caso de que no exista)
  • [PC] Descomprimir el archivo ZIP dentro de la carpeta Tools

Tutorial PS5 ESP32 22.png

  • [PC] Reiniciar Arduino IDE
  • [PC] Acceder a Sketch > Show Sketch Folder (carpeta donde se ubica el archivo .ino)
    • Crear la carpeta data. Depositar en esta carpeta los archivos a desplegar en el ESP32
  • [PC] Seleccionar la opción Tools > ESP32 Sketch Data Upload para subir los archivos.
    • En la barra de estado de Arduino IDE (margen inferior de la ventana) se mostrará el estado de la subida

*En algunos modelos, es necesario mantener presionado el botón BOOT de la placa mientras se suben los archivos.

Visualizar el contenido de los archivos

  • [PC] Picar el siguiente código para visualizar el contenido de los archivos desplegados:
#include "SPIFFS.h"

void setup() {
  Serial.begin(115200); //Velocidad de transmisión 115200 baudios

  //Error al iniciar SPIFFS
  if (!SPIFFS.begin(true)) {
    Serial.println("Error de ejecución SPIFFS."); return;
  }

  File file = SPIFFS.open("/NOMBRE_ARCHIVO.js");

  //Error de lectura del archivo
  if (!file) {
    Serial.println("Error de apertura del archivo"); return;
  }

  while (file.available()) {
  Serial.write(file.read());
  }

  file.close();
}

Listar archivos almacenados en memoria

  • [PC] Picar el siguiente código para listar los archivos almacenados en la memoria del ESP32:
#include "SPIFFS.h"

void listarArchivos() {
  File root = SPIFFS.open("/"); //Se declara "/" como ubicación root

  File file = root.openNextFile(); 

  while (file) {
    Serial.println(file.name()); 
    file = root.openNextFile();
  }
}

void setup() {
  Serial.begin(115200); //Inicia puerto serial. Velocidad de transmisión 115200 baudios

  //Error al iniciar SPIFFS
  if (!SPIFFS.begin(true)) {
    Serial.println("Error de ejecución SPIFFS."); return;
  }

  listarArchivos();
}

Eliminar archivos almacenados en memoria

  • [PC] Añadir el siguiente comando en la función setup() para eliminar un archivo:
void setup() {
...
  listarArchivos();
  SPIFFS.remove("/NOMBRE_ARCHIVO.js");
}

Uso del ESP32

Conexión Access Point PS5_WEB_AP

  • [PC] En modo DFU, acceder a la red WiFi del SoC:
    • SSID (por defecto): PS5_WEB_AP
    • Contraseña (por defecto): password

USB WiFi FPKG 12.png

Acceso Web ESP32

Tutorial PS5 ESP32 13.png

Edición de archivos .js

  • El sketch PS5_Server32 de stooged incluye los archivos necesarios para lanzar el KeX v1.02 de Cryptogenic, resultando necesaria la inyección manual del payload ps5-kstuff-v1.2bin (o etaHEN-1.Xb.bin, según preferencia)

Tutorial PS5 ESP32 0917.jpg

  • En este tutorial se hace uso del Exploit Host de idlesauce.
  • IMPORTANTE: Dadas las prestaciones del SoC ESP32 (1.26MB de almacenamiento interno) y el peso de los payloads, para poder cargar todos los payloads disponibles en el SoC y disponer de un host 100% funcional, es necesario comprimir los archivos .bin
  • IMPORTANTE: Dado que el sistema de archivos del ESP32 no permite la gestión de directorios, se deben incluir en el root todos los archivos necesarios para la ejecución del KeX y la inyección de los payloads seleccionados.
  • [PC] Editar los archivos *.js del Exploit Host, eliminando las referencias a los directorios 'offsets/' y 'payloads/'. Por ejemplo, en el archivo exploit.js:
const response = await fetch('payloads/' + filename);
const response = await fetch(filename);
  • [PC] Editar el archivo payload_map.js, eliminando los listeners de los payloads que no se vayan a utilizar.
    • IMPORTANTE: Eliminar la coma (,) tras el cierre del último listener
const payload_map =
[
...
 {
    displayTitle: 'K-Stuff',
    description: 'FW 4.03-4.51 Only. FPKG enabler',
    fileName: 'ps5-kstuff-v1.2.bin',
    author: 'sleirsgoevy',
    source: 'https://github.com/sleirsgoevy/ps4jb2/blob/ps5-403/ps5-kstuff.bin',
    version: '1.2'
  },
];

Ejecución PSFree

  • [PC] Para poder ejecutar el método de carga del exploit PSFree, es necesario editar el archivo index.html, eliminando las referencias al directorio 'module/' en la importación de los scripts y copiar los archivos de dicha carpeta en el root (se recomienda editar el archivo int64.js del root, incluyendo las funciones propias del archivo de PSFree (que tiene el mismo nombre) o renombrar los archivos de la carpeta module/, para evitar conflictos)
<script defer src="psfree_utils.js"></script>
<script defer src="psfree_constants.js"></script>
<script defer src="psfree_int64.js"></script>
<script defer src="psfree_mem.js"></script>
<script defer src="psfree_memtools.js"></script>
<script defer src="psfree_rw.js"></script>

Compresión de payloads en formato .gz

  • La memoria de los SoC ESP32-S2/S3 es limitada (~1.26MB), lo que impediría a priori la carga de todos los payloads disponibles (etaHEN 1.4B pesa 1.35MB). Para solventar esta limitación, se pueden comprimir los payloads (.bin) en formato gzip mediante la aplicación 7-Zip.
  • [PC] Descargar la aplicación 7-Zip
  • [PC] Seleccionar el archivo .bin y, desde el menú contextual, seleccionar "7-Zip > Añadir al archivo..."
    • Seleccionar el Formato de archivo: gzip
    • Seleccionar el Nivel de compresión: 9- Ultra
    • Aceptar
  • [PC] Sustituir los archivos .bin por los nuevos archivos .bin.gz
  • Cuando se seleccione el payload comprimido desde el host de la PS5, el SoC descomprimirá el archivo .gz en fase de ejecución, permitiendo su inyección.

23.png

Websites anclados al ESP

  • El host de idlesauce permite fijar URLs (a modo Favoritos) que son accesibles desde el propio index. De este modo, aunque el ESP no permite la navegación por red externa (Internet), esta funcionalidad es útil para poder modificar su contenido (archivos cargados en el almacenamiento del SoC) o la configuración del AP, sin tener que desconectarlo de la PS5.
  • [PC] Para ello, se debe modificar el archivo custom_host_stuff.js e incluir el enlace al site de administración del ESP en la constante default_pinned_websites:
 const default_pinned_websites = [
    "https://es7in1.site/ps5",
    "https://10.1.1.1/admin.html"
  ]
  • [PS5] Cuando se ejecute el host desde la PS5, se puede acceder a los websites anclados pulsando L2 (Redirect) y seleccionando la URL "https://10.1.1.1/admin.html".

Carga del Exploit Host

  • [PC] Cargar los archivos en la memoria interna del ESP32, a través de la página de carga http://10.1.1.1/upload.html o copiando los archivos en la carpeta 'data' del Sketch Folder (plugin ESP32 Sketch Data Upload)

Tutorial PS5 ESP32 14.png

Ejecución del ESP32

  • Existen distintas formas de ejecutar el Exploit Host. En este tutorial se describen los pasos a seguir para ejecutarlo desde la Guía de Usuario y desde un FPKG

Guía de Usuario

  • Conectar el ESP32 al puerto USB de la PS5
  • Conectar la PS5 a la red del SoC (SSID PS5_WEB_AP, en caso de no haber modificado la configuración de la red WiFi)
  • Acceder a la Guía de Usuario y ejecutar el KeX
    • Los tiempos de carga del Host dependerán del modelo del ESP y del contenido de los archivos cargados (peso y funcionalidad del exploit host menu)

Tutorial PS5 ESP32 0931.jpg

FPKG

Instalación FPKG Navegador Web
  • [PC] Buscar y descargar el archivo InternetBrowserPS5.pkg de Leeful
  • [PC] Copiar el archivo en la raíz de una unidad USB, cuyo sistema de archivos sea FAT32 o exFAT. Conectar el USB a la PS5.
  • Acceder a Configuración > ★ Debug Settings > Game > Package Installer y seleccionar el PKG del navegador, para su instalación
Creación FPKG
Para crear el PKG es necesario descargar las herramientas "prospero-publishing-tools",que no se incluyen en PS Multi Tools por motivos de copyright.
Una vez descargadas, se deben ubicar en la siguiente ruta: C:\Users\XXXX\Desktop\PS Multi Tools v13.1.1\Tools\PS5\.


  • [PC] Buscar y descargar el paquete de herramientas PS Multi Tools de SvenGDK.
    • [PC] Actualizar PS Multi Tools desde la propia aplicación. porque si no la opción Crear Manifest no aparece, aunque se descargue la última versión desde el github de SvenGDK.

USB WiFi FPKG 04.png

  • [PC] Ejecutar la aplicación y acceder a Game Library > Tools > Build/Create > Manifest Editor.
    • [:Manifest Editor] File > New
      • Modificar los siguientes parámetros: (Modify selected parameter > Modify value) *IMPORTANTE guardar los cambios tras modificar cada parámetro
        • applicationName: krakHEN Srv32 v1.0
        • applicationVersion: 1.0.0 + 000
        • commitHash: e817ad8a3a2b471dd068d979a97e16e84f30aae9
        • titleId: NPXS46970
        • repositoryUrl: https://github.com/idlesauce/PS5-Exploit-Host
        • reactNativePlaystationVersion: 1.00.0-100.0
      • File > Save
        • File name: manifest.json
    • [:Manifest Editor] Cerrar ventana.
  • Acceder a Tools > Build/Create > Param Editor
    • [:Param Editor] File > New
      • Modificar los siguientes parámetros:
        • ApplicationDrmType: free
        • ConceptId: 46970
        • ContentId: IV9998-NPXS46970_00-KRAKHENSRV32DOCT
        • ContentVersion: 01.100.000
        • LocalizedParameters > Open advanced param editor
          • ArAE: krakHEN Srv32 v1.0
          • DeDE: krakHEN Srv32 v1.0
          • EnGB: krakHEN Srv32 v1.0
          • EnUS: krakHEN Srv32 v1.0
          • EsES: krakHEN Srv32 v1.0
          • FrFR: krakHEN Srv32 v1.0
        • MasterVerion: 01.00
        • TitleId: NPXS46970
      • Añadir el siguiente parámetro: (Add a parameter > Select param)
      • File > Save
        • File name: param.json
    • [:Param Editor] Cerrar ventana.


Para crear el PKG es necesario disponer de la estructura de carpetas Guide\sce_sys.
* Se pueden crear manualmente o extrayendo el FPKG de SvenGDK que se enlaza en el vídeotutorial del final del post. 
* La extracción se puede realizar desde PS Multi Tools, accediendo a PS5 > Game Library > Tools > Build/Create > GP5 Creator (la contraseña del FPKF es la misma que pone la app por defecto).
* Una vez extraído, se debe borrar la carpeta "about", para que no se produzca ningún error en la creación del nuevo FPKG
* La extracción del FPKG permite disponer, también, de los archivos icon0.png y pic0.png, necesarios para la creación del GP5.

@viericrespo:"Al final, después de muchas vueltas con errores en el param.json al crear el PKG, he acabado por editar el extraído del HEN cambiando los valores con Notepad++. Si se hace así es importante incluir el título de la app en idioma EsES para que aparezca en el menú y también cambiar el id del NPXS para que no se machaque con el del HEN y se puedan tener ambas aplicaciones instaladas a la vez.".

    • Acceder a Tools > Build/Create > GP5 Creator
      • Create or modify a project > Save Path: [PATH]\krakHEN.gp5 Ruta donde se hayan creado los archivos manifest y param.
        • Click en botón Create
      • Add a file or folder > Source Path > File: [PATH]\manifest.json
      • Destination Path: manifest.json
        • Click en botón Add to chuck
      • Add a file or folder > Source Path > Folder: [PATH]\Guide\sce_sys
      • Destination Path: sce_sys
        • Click en botón Add to chuck
      • Add a file or folder > Source Path > File: [PATH]\param.json
      • Destination Path: sce_sys\param.json
        • Click en botón Add to chuck
      • Add a file or folder > Source Path > File: [PATH]\Guide\icon0.png
      • Destination Path: sce_sys\icon0.png
        • Click en botón Add to chuck
      • Add a file or folder > Source Path > File: [PATH]\Guide\pic0.png
      • Destination Path: sce_sys\pic0.png
        • Click en botón Add to chuck

USB WiFi FPKG 05.png

    • Click en botón Build selected gp5 project as PKG
      • [:PKG Builder] Save To > krakHEN Srv32 v1.0.pkg
        • Click en botón Build PKG

USB WiFi FPKG 06.png

Instalación FPKG krakHEN Srv32 v1.0
  • [PC] Copiar el archivo krakHEN Srv32 v1.0.pkg en la raíz de una unidad USB, cuyo sistema de archivos sea FAT32 o exFAT. Conectar el USB a la PS5.
  • Acceder a Configuración > ★ Debug Settings > Game > Package Installer y seleccionar el PKG del navegador, para su instalación.

Descarga krakHEN Srv32

  • Listado de archivos del host de idlesauce modificados para su ejecución offline desde un ESP32/S2/S3.
    • 14/02/2024. krakHEN Srv32 v1.3
      • Almacenamiento del host en caché
      • Ejecución del exploit vía webkit PSFree/FontFace
      • Inyección de payloads comprimidos
      • Acceso al site de administración del ESP desde el propio host
    • Descarga: krakHEN_Srv32_1.3

Listado de archivos

(Offset) 3.00.js
(Offset) 3.10.js
(Offset) 3.20.js
(Offset) 4.00.js
(Offset) 4.02.js
(Offset) 4.03.js
(Offset) 4.50.js
(Offset) 4.51.js
appcache_handler.js
Browser_appCache_remove.elf
cach.appcache
custom_host_stuff.js
elfldr.elf
etaHEN-1.4B.bin.gz
exploit.js
ftps5-np.elf
ftps5-p.elf
getOsVersion.elf
index.html
int64.js
main.css
payload_map.js
ps5debug.elf
ps5-kstuff-v1.4.bin.gz
psfree_constants.js
psfree_int64.js
psfree_mem.js
psfree_memtools.js
psfree_rw.js
psfree_utils.js
rop.js
rop_slave.js
versions.elf
webkit.js
webkit_fontface.js
webkit_psfree.js