PS5 ESP32S2XploitHost
krakHEN Srv32 v1.2
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?
*No se facilitará ningún enlace de descarga de ninguna herramienta o material software con copyright.
Requisitos
- PS5 FW4.03/4.50/4.51
- ESP32 / ESP32-S2 / ESP32-S3
- [PC] Arduino IDE
- [PC] Proyecto PS5-Servidor32 de stooged
- [PC] Librería HTTPS Server para ESP32
- [PC] Plugin SPIFFS ESP32
- [PC] Microsoft .NET Framework 4.8.1 (requerido por PS Multi Tools)
- [PC] 7-Zip
- PKG PS Multi Tools de SvenGDK
- PKG Navegador Web de Leeful
- prospero-publishing-tools (necesarias para crear el PKG)
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
- [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
- c) Sketch > Include Library > Ad .ZIP Library... "
- Seleccionar el archivo ZIP descargado y aceptar
- c) Sketch > Include Library > Ad .ZIP Library... "
- [PC] Actualizar el core del ESP32, añadiendo la siguiente URL en Additional Boards Manager URLs:
- Preferences > Settings > Additional Boards Manager URLs
- [PC] Instalar el board Arduino ESP32:
- Tools > Boards > Boards Manager > "esp32"
- [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
- [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
- [PC] Abrir el proyecto/sketch PS5_Server 32
- File > Open > ..\PS5-Server32-main\PS5_Server32\PS5_Server32.ino
- [PC] Incluir la librería ESP32 HTTPS Server al proyecto (en caso de no incluirse por defecto)
- [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
* Error de identificación del board esp32.
- Es necesario instalar los drivers USB to UART Bridge
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
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
- [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
Acceso Web ESP32
- [PC] Se puede acceder, por defecto, a las siguientes páginas del ESP:
- http://10.1.1.1/admin.html / http://ps5.local
- Página principal de administración del ESP
- http://10.1.1.1/info.html
- Página de información de la placa ESP
- http://10.1.1.1/upload.html
- Página de carga de archivos (.bin) al board ESP del servidor web
- http://10.1.1.1/update.html
- Página para actualizar el firmware del ESP (fwupdate.bin)
- http://10.1.1.1/fileman.html
- Página para visualizar, descargar y subir archivos al almacenamiento interno del ESP
- http://10.1.1.1/config.html
- Página de configuración de la red WiFi (SSID/Password) e IP del ESP
- http://10.1.1.1/format.html
- Página para formatear el almacenamiento interno del ESP
- http://10.1.1.1/reboot.html
- Página para reiniciar el ESP
- http://10.1.1.1/admin.html / http://ps5.local
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)
- 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.
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)
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)
FPKG
- [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.
- [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
- Modificar los siguientes parámetros: (Modify selected parameter > Modify value) *IMPORTANTE guardar los cambios tras modificar cada parámetro
- [:Manifest Editor] Cerrar ventana.
- [:Manifest Editor] File > New
- 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)
- DeeplinkUri: http://10.1.1.1/index.html
- File > Save
- File name: param.json
- Modificar los siguientes parámetros:
- [:Param Editor] Cerrar ventana.
- [:Param Editor] File > New
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
- Create or modify a project > Save Path: [PATH]\krakHEN.gp5 Ruta donde se hayan creado los archivos manifest y param.
- Acceder a Tools > Build/Create > GP5 Creator
- 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
- [:PKG Builder] Save To > krakHEN Srv32 v1.0.pkg
- Click en botón Build selected gp5 project as PKG
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
- 14/02/2024. krakHEN Srv32 v1.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