Home Homebrew ps5debug-NG PS5: debugger payload avanzato con kernel access, Keystone, Zydis e supporto...

ps5debug-NG PS5: debugger payload avanzato con kernel access, Keystone, Zydis e supporto firmware 3.xx–8.xx

235
0

Il developer OpenSourcereR-dev ha rilasciato una primissima versione di ps5debug-NG, un nuovo e avanzato debugger payload per PlayStation 5 jailbroken che rappresenta un’evoluzione diretta del progetto originale ps5debug di Ctn.

Questa nuova versione si distingue per una struttura più moderna, prestazioni migliorate e un livello di integrazione molto più profondo con il sistema PS5, al punto da diventare uno degli strumenti più completi oggi disponibili per il debugging e l’analisi runtime sulla console Sony.

Alla base del progetto c’è un server TCP in userland che viene iniettato direttamente nel processo SceShellCore, cioè il cuore della shell di sistema della PS5.

Questo approccio permette di mantenere una compatibilità completa con il protocollo originale, rendendo ps5debug-NG utilizzabile con i client già esistenti senza necessità di modifiche.

L’obiettivo principale è garantire continuità con l’ecosistema precedente, ma introducendo al tempo stesso funzionalità più avanzate e una maggiore stabilità nelle sessioni di debug.

Dal punto di vista delle funzionalità, ps5debug-NG offre un set estremamente ricco di strumenti per l’analisi e il controllo dei processi.

È possibile effettuare attach e detach ai processi attivi, inserire fino a 30 software breakpoints utilizzando l’istruzione 0xCC, e gestire 4 hardware watchpoints tramite i registri DR0-DR3 con granularità fino a singolo byte.

Il debugger supporta inoltre single-step, controllo dei thread, sospensione e ripristino dell’esecuzione, oltre all’accesso completo ai registri CPU, inclusi GPR, FPU, YMM e i registri di debug.

Una parte centrale del sistema è la gestione avanzata della memoria. Il payload permette di leggere e scrivere in chunk, enumerare le mappe di memoria virtuale, modificare le protezioni delle pagine, allocare e liberare memoria dinamicamente e utilizzare un memory scanner avanzato con supporto a value scan, AOB scan e pattern multipli in sessioni iterative.

Questo rende lo strumento particolarmente potente per reverse engineering e analisi dinamica dei giochi.

ps5debug-NG introduce anche un sistema completo di code execution e RPC. È possibile installare uno stub RPC persistente, invocare funzioni arbitrarie seguendo la SysV ABI, caricare file ELF direttamente in un processo target e utilizzare un assembler Keystone integrato per generare codice macchina direttamente sulla console.

Questo riduce la dipendenza da tool esterni e velocizza notevolmente il workflow di sviluppo e testing.

Un’altra componente fondamentale è il disassembler integrato basato su Zydis, che consente di analizzare intere regioni di codice direttamente sulla PS5, riducendo drasticamente il traffico di rete rispetto ai metodi tradizionali.

Il sistema include anche la capacità di estrarre XREF e individuare riferimenti incrociati nel codice, migliorando ulteriormente le possibilità di reverse engineering.

Sul fronte kernel, ps5debug-NG offre accesso completo alla base del kernel e la possibilità di eseguire operazioni di lettura e scrittura arbitraria in memoria kernel, ampliando enormemente le capacità di debug avanzato e modifica runtime del sistema.

Tra le funzionalità aggiuntive troviamo notifiche a schermo sulla PS5, forwarding del kernel log tramite porta dedicata, discovery automatico via UDP per facilitare la connessione dei client, supporto completo al Rest Mode con sopravvivenza a suspend e resume e la possibilità di riavvio remoto della console.

Tutto questo contribuisce a rendere l’esperienza di debugging più fluida e continua anche durante lunghe sessioni di lavoro.

Il payload è compatibile con una vasta gamma di firmware PS5, coprendo le famiglie dalla serie 3.xx fino alla 8.xx, incluse le versioni intermedie come la 7.5x.

Il sistema include controlli interni sul firmware e interrompe l’esecuzione in modo sicuro se viene rilevata una versione non supportata, garantendo maggiore stabilità ed evitando crash indesiderati.

Funzionalità principali

Ispezione e manipolazione dei processi

  • Enumerazione dei processi (p_comm + lista PID).
  • Lettura e scrittura della memoria dei processi in blocchi streaming.
  • Elenco delle mappe di memoria virtuale: intervalli, protezioni e nomi dei backing.
  • Query dei metadati del processo: nome, percorso, titleId, contentId.
  • Identificazione dell’app in primo piano (0xBDDD0006): restituisce PID, titleId, contentId, nome del processo e versione del gioco, ricavata lato server dal param.sfo del titolo. Utile per client che devono sapere cosa è in esecuzione senza scansionare tutti i processi.
  • Stack walk lato server (CMD_PROC_READ_STACK): il server percorre la catena RBP da solo (fino a 64 frame) e aggrega per ogni frame RBP salvato, indirizzo di ritorno, byte locali del frame e una finestra di 200 byte attorno all’indirizzo di ritorno in un’unica risposta. In questo modo il client evita molte richieste TCP per ogni frame dello stack.
  • Modifica delle protezioni di memoria su regioni arbitrarie.
  • Allocazione / rilascio / hint-allocazione di memoria dentro qualsiasi processo target.

Esecuzione di codice nel processo target

  • Installazione di uno stub RPC (CMD_PROC_INSTALL): inietta un trampoline riutilizzabile con thread dedicato nel processo target.
  • Chiamata di funzioni arbitrarie con fino a sei argomenti nei registri secondo ABI SysV e lettura del valore di ritorno in rax (CMD_PROC_CALL).
  • Caricamento di ELF nei processi target, con esecuzione immediata dell’entry point (CMD_PROC_ELF) oppure ritorno dell’entry per esecuzione successiva (CMD_PROC_ELF_RPC).

Debugger userland completo

  • Attach a un singolo target con CMD_DEBUG_ATTACH (attiva un canale di interrupt asincrono verso il client).
  • Breakpoint software fino a 30 slot tramite iniezione trasparente di 0xCC.
  • Watchpoint hardware fino a 4 registri DR0–DR3 con supporto read / write / read-write e granularità 1/2/4/8 byte.
  • Controllo dei thread: lista, sospensione, ripresa, single-step e step per thread.
  • Accesso completo ai registri: generali, FPU, YMM e debug registers.
  • Continua / stop / halt dell’intero processo con un singolo comando.
  • Pacchetti di interrupt asincroni su una connessione TCP separata, evitando polling lato client.

Accesso al kernel

  • Ottenimento dell’indirizzo base del kernel.
  • Lettura di memoria kernel arbitraria.
  • Scrittura di memoria kernel arbitraria.

Disassembler Zydis integrato

Le grandi regioni di memoria restano sulla PS5. Tre comandi server-side riducono il traffico:

  • CMD_PROC_DISASM_REGION: stream compatto da 32 byte per istruzione con metadati di controllo flusso e RIP-relative.
  • CMD_PROC_EXTRACT_CODE_XREFS: tutte le destinazioni di branch/call RIP-relative risolte e deduplicate.
  • CMD_PROC_FIND_XREFS_TO: solo istruzioni che referenziano un indirizzo specifico.

Assembler Keystone integrato (x86-64)

Assembler Keystone cross-compilato (solo x86, ~4MB statici), esposto tramite opcode raw 0xBDAA0024. Permette di compilare codice assembly direttamente sulla console.

  • Modalità userspace pura: non richiede processo attaccato né handshake CMD_PROC_AUTH.
  • Richiede: u64 base_addr; u32 ks_opt_syntax; + testo asm (NUL non richiesto). ks_opt_syntax è impostato di default su Intel; passa 1/2/4/8/0x10 per Intel/ATT/NASM/MASM/GAS.
  • Risposta: CMD_SUCCESS + u32 byte_len; u32 insn_count; + byte macchina, oppure CMD_ERROR + u32 ks_errno; u32 msg_len; + errore leggibile dall’uomo di Keystone.
  • L’opcode è volutamente un valore letterale grezzo (senza macro CMD_*) in modo che il set CMD_* pubblicato che alcuni client enumerano rimanga invariato.

Scansione memoria

  • Scansione valori (CMD_PROC_SCAN): 12 tipi di valore e 13 modalità di confronto (uguale, fuzzy, maggiore/minore, tra, aumentato, diminuito, cambiato ecc..).
  • Scansione iterativa (SCAN_STARTSCAN_COUNTSCAN_GET): consente ai client di restringere un insieme di risultati lato server in più passaggi.
  • AOB scan (CMD_PROC_SCAN_AOB): sequenze di byte con caratteri jolly ??.
  • Multi-AOB scan (CMD_PROC_SCAN_AOB_MULTI): molti schemi in un solo passaggio.
  • Autenticazione obbligatoria: i comandi di scansione richiedono un handshake CMD_PROC_AUTH preliminare.

Integrazione con UI di sistema

  • Invia notifiche push allo schermo con testo UTF-8 arbitrario.
  • Stampa su console kernel.
  • Riavvio della console.

Klog forwarder

  • La porta TCP 3232 trasmette in streaming il log del kernel a un client connesso (in stile klog reader lato host). Rimane in esecuzione dopo la sospensione/riattivazione allo stesso modo del server principale.

Discovery

  • Un risponditore broadcast UDP sulla porta 1010 ripete una sequenza magica di handshake (0xFFFFAAAA) in modo che i client possano trovare la PS5 sulla LAN senza dover configurare un indirizzo IP fisso.

Supporto rest mode

  • Il payload rimane attivo anche dopo la sospensione e la ripresa, senza bisogno di essere ricaricato. Un ciclo di supervisione interroga periodicamente la rete: quando la console entra in modalità di riposo, il server si chiude correttamente e, non appena la rete torna attiva, il server si riavvia e viene inviata una nuova notifica di “online”.
  • Quando si avvia la modalità di sospensione, i client rilevano una netta interruzione della connessione sulla porta 744 e possono semplicemente riconnettersi al risveglio.

Design orientato alle prestazioni

  • Socket non bloccanti con TCP_NODELAY, SO_KEEPALIVE e blocchi di trasferimento di grandi dimensioni.
  • Il programma Zydis è stato compilato con le opzioni -O3 e -DNDEBUG per ottenere la massima velocità di decodifica.
  • Rimozione dei dati non più necessari in fase di collegamento (-ffunction-sections -fdata-sections -Wl,--gc-sections).
  • I pacchetti di interruzione vengono trasmessi tramite un canale secondario dedicato per evitare di bloccare il ciclo di comando.

Architettura

L’artefatto distribuibile ps5debug-NG.elf è una build composta da due componenti:

  • installer – PIE caricato tramite SDK umtx. Individua SceShellCore, configura lo stato KEX del processo target e il filtro di origine delle syscall, quindi chiama la primitiva inject_remote_thread_create lato SCE per eseguire il debugger embedded come thread interno a SceShellCore.
  • debugger – viene eseguito dentro SceShellCore dopo l’iniezione. Implementa il protocollo di comunicazione, breakpoint / watchpoint / single-step, scansione memoria, RPC e iniezione ELF. È compilato in debugger/build/debugger.elf e poi incorporato come blob .rodata nell’installer tramite .incbin.

L’esecuzione del protocollo di comunicazione all’interno di SceShellCore permette a PT_ATTACH sui processi dei giochi di apparire, lato kernel, come un attach di origine SCE, condizione che il sistema di AppContext della PS5 consente. Un processo standalone che esegue PT_ATTACH invece viene rilevato e il gioco viene bloccato.

Panoramica sul protocollo di rete

PortaProtocolloDirezioneScopo
744TCPclient → PS5Server comandi
755TCPPS5 → clientInterrupt di debug asincroni
3232TCPPS5 → clientForwarder log kernel
1010UDPbidirezionaleBeacon di discovery (0xFFFFAAAA)

Ogni comando inizia con un header di 12 byte:

ini

struct cmd_packet {
    uint32_t magic;    // 0xFFAABBCC
    uint32_t cmd;      // 0xBDAA..., 0xBDBB..., 0xBDCC..., 0xBDDD...
    uint32_t datalen;  // lunghezza del body della richiesta
};

Segue poi la struttura fissa del comando (se presente), eventuali payload a lunghezza variabile e un valore di risposta uint32_t di stato.

Nota sugli status

Il valore uint32_t di stato su PS5 viene trasmesso con i bit a coppie invertite (la funzione net_send_int32 scambia le posizioni dei bit pari/dispari).

I client devono quindi “debit-swappare” i bit dello status ricevuto prima di confrontarlo con valori come CMD_SUCCESS, CMD_ERROR, CMD_DATA_NULL o CMD_ALREADY_DEBUG.

I dati successivi vengono inviati in forma grezza.

La documentazione completa può essere trovata in PROTOCOL.md e include ogni comando, struttura di pacchetto, enumerazione e codice di stato, con riferimenti file:line.

Copertura dei comandi

NamespaceQuantitàEsempi
Info / ping5VERSION, FW_VERSION, BRANDING, PLATFORM_ID, NOP
Process26READ, WRITE, MAPS, CALL, SCAN_, DISASM_
Debug18ATTACH, SET_BREAKPOINT, GETREGS, STEP, CONTINUE
Kernel R/W3KERN_BASE, KERN_READ, KERN_WRITE
Console6NOTIFY, PRINT, REBOOT, INFO, END, FOREGROUND_APP
Totale58

Download: ps5debug-NG v1.2.2

Download: Source code ps5debug-NG v1.2.2

Alcune parti di questo articolo sono state generate con l’aiuto dell’intelligenza artificiale.

🔥 Prodotti in promozione e articoli più venduti: PS5

Vedi altri prodotti PS5

Questo articolo contiene link affiliati a Amazon. Se acquisti tramite questi link, potrei guadagnare una commissione senza costi aggiuntivi per te.

Ultimo aggiornamento 2026-06-16 / Link di affiliazione / Immagini da Amazon Product Advertising API

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui
Captcha verification failed!
Punteggio utente captcha non riuscito. Ci contatti per favore!

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.