Home Homebrew Rilasciato ps5debug-NG v1.2.4: Supporto regioni Sony-aux, memory read più veloce, fix...

[Scena PS5] Rilasciato ps5debug-NG v1.2.4: Supporto regioni Sony-aux, memory read più veloce, fix breakpoint e scan AOB migliorati

242
0

Pubblicato un nuovo aggiornamento per ps5debug-NG, il potente debugger open source per PlayStation 5 jailbroken nato come evoluzione del celebre ps5debug di Ctn.

Con la versione 1.2.4, il progetto continua a consolidarsi come uno degli strumenti più avanzati e completi per lo sviluppo homebrew, il reverse engineering e la creazione di trainer e cheat dedicati alla console Sony.

Il software viene iniettato direttamente all’interno di SceShellCore e trasforma la PS5 in una piattaforma di debugging remoto accessibile tramite protocollo TCP.

Uno dei suoi principali punti di forza è la piena compatibilità con il vecchio ps5debug 1.0b5, caratteristica che consente ai principali client già esistenti, come Reaper Studio e numerosi strumenti personalizzati sviluppati dalla community, di continuare a funzionare senza alcuna modifica.

Le funzionalità offerte da ps5debug-NG coprono praticamente ogni aspetto del debugging avanzato. Il payload permette di leggere e scrivere la memoria dei processi, gestire breakpoint software e hardware, eseguire il single-step del codice, monitorare registri e thread.

Inoltre, permette di effettuare anche scansioni della memoria tramite ricerca di valori o pattern AOB multipli, utilizzare strumenti integrati di disassemblaggio e assemblaggio basati rispettivamente su Zydis e Keystone, eseguire codice arbitrario, caricare file ELF e accedere direttamente alle strutture del kernel.

Sono disponibili notifiche a schermo, inoltro dei log del kernel, riavvio del sistema e supporto alla modalità riposo, consentendo al debugger di rimanere operativo anche dopo il risveglio della console.

L’aggiornamento 1.2.4 introduce una serie di miglioramenti significativi focalizzati soprattutto sulla stabilità, sulle prestazioni e sulla gestione della memoria.

Una delle novità più importanti riguarda il comando CMD_PROC_MAPS, che ora è in grado di rilevare automaticamente anche le cosiddette regioni ausiliarie di Sony, come SceGnm, SceAgc, JIT e DMEM.

Queste aree di memoria normalmente non sono visibili attraverso il tradizionale vm_map e vengono ora individuate tramite un sistema di scansione delle page table basato su DMAP, indipendente dalla versione del firmware installato.

Le operazioni di lettura della memoria beneficiano inoltre di un nuovo percorso ibrido che accelera sensibilmente l’accesso alle regioni ausiliarie, migliorando l’efficienza delle analisi e delle scansioni effettuate dai client collegati.

Sul fronte del debugging, gli sviluppatori hanno corretto i problemi relativi ai breakpoint software che potevano generare tempeste di eccezioni SIGSEGV in ambienti multi-thread, una situazione che in alcuni casi comprometteva la stabilità delle sessioni di debug.

Sono stati inoltre perfezionati gli algoritmi di scansione AOB multi-pattern, ridotta la latenza degli eventi associati ai breakpoint e introdotti nuovi meccanismi di locking per prevenire corruzioni o conflitti quando più client tentano di accedere contemporaneamente al debugger.

Anche il processo di installazione è stato ottimizzato, risultando più rapido e affidabile, mentre il sistema di rilevamento del firmware è stato completamente riscritto per garantire un codice più pulito, moderno e facilmente manutenibile nel lungo periodo.

ps5debug-NG si rivolge principalmente agli sviluppatori homebrew che desiderano testare e analizzare i propri eseguibili ELF, ai creatori di trainer e cheat interessati a individuare offset e strutture dati nei giochi, ai reverse engineer impegnati nello studio del software PS5 e, più in generale, agli utenti avanzati che vogliono sfruttare tutte le potenzialità offerte da una console jailbroken.

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

Changelog

Funzionalità

  • CMD_PROC_MAPS ora amplia l’elenco vm_map includendo anche le regioni ausiliarie Sony (SceGnm, SceAgc, JIT e DMEM) che normalmente non vengono rilevate da vm_map. Queste aree vengono individuate tramite una scansione delle tabelle delle pagine x86-64 eseguita lato kernel sul DMAP. La funzione è indipendente dalla versione del firmware grazie al rilevamento dinamico degli offset pmap e alla validazione dei risultati. In caso di errore, viene automaticamente utilizzato il normale risultato restituito da vm_map.
  • Percorso ibrido di lettura della memoria: Le letture vengono indirizzate direttamente tramite DMAP per le regioni ausiliarie non presenti in vm_map, mentre per tutte le altre viene utilizzato mdbg, che funge anche da fallback. Questo migliora le prestazioni delle scansioni sulle regioni ausiliarie sia nel comando CMD_PROC_READ sia nei percorsi di scansione lato server. Nessuna modifica al protocollo; risultati identici byte per byte.

Correzioni

  • Correzione race condition dei breakpoint software in wait4: Eliminata la tempesta di errori SIGSEGV in scenari multi-thread durante la gestione dei breakpoint nell’epilogo delle funzioni. La correzione include la gestione di assorbitori obsoleti TRAP_TRACE/TRAP_BRKPT, il rewind controllato dei thread correlati tramite PT_LWPINFO, cache rapide basate solo su RIP, incremento temporaneo dell’authid durante il riarmo dei breakpoint e l’introduzione di una protezione specifica contro le tempeste di SIGSEGV.
  • Scansione AOB multi-pattern: La modalità “unique” ora termina solo quando il numero di pattern invalidati è maggiore o uguale a pat_count, risolvendo problemi di risultati erroneamente segnalati come unici e scansioni troncate prematuramente.

Prestazioni / robustezza

  • Latenza eventi breakpoint (BP-event): Ridotto il timeout di select da 1000 a 100 microsecondi e quello di poll da 100 a 50 microsecondi.
  • Lock dello stato di debug per singolo comando (0xBDBB): Introdotto un meccanismo di locking per prevenire la corruzione della tabella degli slot dei breakpoint quando più client operano contemporaneamente.
  • Installer: Aggiunta una protezione contro il doppio caricamento tramite controllo di loopback sulla porta 744, applicazione preventiva delle rilocazioni e uso di operazioni ptrace_io in batch per accelerare l’iniezione, sostituendo il precedente sleep fisso con wait4.

Refactoring

  • Rilevamento del firmware: Riscritto utilizzando una struttura diretta basata su switch(fw & 0xffff0000) con annotazioni specifiche per ogni versione. Il comportamento è rimasto invariato ed è stato verificato come equivalente all’implementazione precedente.

Download: ps5debug-NG v1.2.4

Download: Source code ps5debug-NG v1.2.4

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-10 / 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.