Home Homebrew Annunciato Yarpe: Helloyunho adatta tecniche Lua a Ren’Py, scoperto un possibile exploit...

Annunciato Yarpe: Helloyunho adatta tecniche Lua a Ren’Py, scoperto un possibile exploit userland su PlayStation 4 e PlayStation 5

236
0

Yarpe, acronimo di “Yet another Ren’Py PlayStation exploit”, è stato annunciato come un lavoro tecnico significativo del developer Helloyunho che trasferisce approcci già noti nell’analisi e nello sfruttamento di titoli basati su Lua, al contesto delle visual novel sviluppate con Ren’Py.

Ren’Py è un motore open source scritto in Python molto diffuso per la creazione di visual novel; la sua adozione su console implica porting e adattamenti che possono introdurre superfici d’attacco diverse rispetto alla versione desktop.

Secondo le comunicazioni pubbliche, Yarpe prende di mira queste caratteristiche specifiche dell’ambiente Ren’Py su console PlayStation, e come esempio concreto viene citato il titolo “A Year of Springs” per PlayStation 4 (CUSA30428).

La segnalazione parla di capacità di raggiungere un livello di accesso in userland sulle console PlayStation 4 e PlayStation 5, cioè un controllo dell’ambiente software a livello utente.

Pur non configurandosi come un controllo totale del sistema, un exploit che agisce a livello userland — come sempre più spesso accade — può comunque compromettere l’integrità delle applicazioni, permettere l’esecuzione di codice non autorizzato nell’ambito dell’utente e facilitare azioni quali la modifica dei contenuti di gioco, l’esecuzione di payload non firmati o l’analisi invasiva del comportamento del software.

Giochi supportati

  • A YEAR OF SPRINGS PS4 (CUSA30428)
  • Arcade Spirits: The New Challengers PS4 (CUSA32097)

Come usare

Grazie a https://github.com/shahrilnet/remote_lua_loader/blob/main/SETUP.md per la base di questa guida.

“Pickling” dei dati di salvataggio (può essere saltato se si scarica il file di salvataggio già pronto)

  • Prerequisiti: Python 2.7.18
  • Eseguire il comando python2 pack_savegame.py per generare il file di salvataggio 1-1-LT1.save.
    • Impostare la variabile d’ambiente DEBUG a 1 o true per abilitare i messaggi di debug.

Nota: Cambiare il nome di savegame_container/log in persistent e copiare quello al posto di 1-1-LT1.save se si intende eseguire il codice immediatamente, ma questo rende il gioco non giocabile fino a quando non vengono eliminati i dati di salvataggio.

La guida qui sotto assume che l’utente abbia già creato un file di salvataggio nel gioco che desidera modificare

Modificare i dati di salvataggio su PS4/PS4 Slim/PS4 Pro

Jailbroken

  • Utilizzare Apollo Save Tool per esportare i dati di salvataggio decrittati su una chiavetta USB usando l’opzione “Copy save game to USB”.
  • Andare su (/PS4/APOLLO/id_{YOUR_GAME_CUSA_ID}_savedata) e copiare il file di salvataggio 1-1-LT1.save in quella cartella, sovrascrivendo il file esistente.
  • Utilizzare Apollo Save Tool per importare i nuovi dati di salvataggio dalla chiavetta USB con “Copy save game to HDD”.
  • Eseguire il gioco e verificare se i dati di salvataggio sono cambiati (controllando l’anteprima del salvataggio).

PSN (o attivazione finta) attivato

  1. Assicurarsi di essere loggato con l’utente attivato su PSN (o con attivazione finta).
  2. Collegare la chiavetta USB alla PS4/PS4 Slim/PS4 Pro.
  3. Utilizzare il menu delle impostazioni PS4 per esportare i dati di salvataggio su USB. (Impostazioni -> Gestione dei dati di salvataggio dell’applicazione -> Dati salvati nella memoria di sistema -> Copia su dispositivo di archiviazione USB -> Seleziona il tuo gioco e copia).
  4. Dovreste avere i file SAVEDATA00 e SAVEDATA00.bin in /PS4/SAVEDATA/(hash)/CUSA(tuo id gioco)/ sulla chiavetta USB. Utilizzare Save Wizard o un bot Discord per decrittare i dati di salvataggio.
  5. Andare nella cartella dei dati di salvataggio decrittati e copiare il file di salvataggio 1-1-LT1.save in quella cartella, sovrascrivendo il file esistente.
  6. Utilizzare Save Wizard o un bot Discord per criptare nuovamente i dati di salvataggio modificati.
  7. Rimettere i file criptati SAVEDATA00 e SAVEDATA00.bin in /PS4/SAVEDATA/(hash)/CUSA(tuo id gioco)/ sulla chiavetta USB.
  8. Collegare la chiavetta USB alla PS4/PS4 Slim/PS4 Pro.
  9. Utilizzare il menu delle impostazioni PS4 per importare i dati di salvataggio modificati dalla USB. (Impostazioni -> Gestione dei dati salvati dell’applicazione -> Dati salvati su dispositivo di archiviazione USB -> Copia nella memoria di sistema -> Seleziona il tuo gioco e copia).
  10. Eseguire il gioco e verificare se i dati di salvataggio sono cambiati (controllando l’anteprima del salvataggio).

Modificare i dati di salvataggio su PS5/PS5 Slim/PS5 Pro

  • Requisiti:
    • PS5/PS5 Slim/PS5 Pro attivata su PSN. Può essere una versione firmware non recente se è stata attivata in passato.
    • Una PS4 attivata su PSN (o attivazione finta) con una versione firmware precedente o equivalente a quella della PS5/PS5 Slim/PS5 Pro. Fare riferimento a questa tabella. Per esempio, una PS4 9.00 può essere usata per creare salvataggi per PS5 >=4.00 ma non per versioni inferiori.

Passaggi

  1. Trovare l’ID account PSN con cui si è loggati sulla PS5/PS5 Slim/PS5 Pro, è possibile farlo dalle impostazioni PlayStation o usando questo sito web.
  2. Prendere nota del proprio ID account (~19 caratteri per PSPlay) e convertine l’hex usando questo sito web.

PS4

  1. Seguire la guida “PSN-Activated” per PS4/PS4 Slim/PS4 Pro sopra fino al passo 7 per esportare i dati di salvataggio su chiavetta USB.

PSN-Activated PS5/PS5 Slim/PS5 Pro

  1. Assicurarsi di essere loggato con l’utente attivato sul PSN.
  2. Collegare la chiavetta USB alla PS5/PS5 Slim/PS5 Pro.
  3. Utilizzare il menu delle impostazioni PS5 per importare i dati di salvataggio criptati dalla chiavetta USB. (Saved Data and Game/App Settings -> Saved Data (PS4) -> Copy or Delete from USB Drive -> Seleziona il tuo gioco e importa).
  4. Eseguire il gioco e verificare se i dati di salvataggio sono cambiati (controllando l’anteprima del salvataggio).

Eseguire codice personalizzato sul gioco

  1. Prendere un qualunque client TCP socket (es. nc, hermes-link) sul PC.
  2. Preparare uno script Python che si intende eseguire sul gioco.
  3. Inviare i dati dello script alla console sulla porta 9025.
  4. Lo script verrà eseguito nel contesto del gioco.

API Python

  • sc: Istanza di SploitCore
    • sc.errno: Ultimo numero di errore.
    • sc.exec_addr: Indirizzo base dell’eseguibile del gioco in memoria.
    • sc.libc_addr: Indirizzo base di libc nella memoria del gioco.
    • sc.libkernel_addr: Indirizzo base di libkernel nella memoria del gioco.
    • sc.run_function(address, rdi, rsi, rdx, rcx, r8, r9, syscall=False, ...): Esegue la funzione all’indirizzo con gli argomenti dati.
    • sc.get_error_string(): Restituisce l’ultima stringa di errore.
    • sc.send_notification(message): Invia una notifica alla PS4/PS5.
  • readbuf(addr, length): Legge length byte da addr.
  • readuint(addr, size): Legge un intero senza segno di size byte da addr.
  • refbytes(data): Restituisce un puntatore al contenuto dell’oggetto bytes data che può poi essere passato a funzioni.
  • refbytearray(data): Restituisce un puntatore al contenuto dell’oggetto bytearray data.
  • alloc(size): Alloca size byte nella memoria del gioco e restituisce il bytearray.
  • get_ref_addr(data): Restituisce l’indirizzo del contenuto dell’oggetto bytes/bytearray data.

Download: yarpe v1.1.0

Download: Source code yarpe v1.1.0

Fonte: x.com