Home Homebrew ProtoPwn sblocca la PS2 originale: homebrew avviabili da memory card su...

[Scena PS2] ProtoPwn sblocca la PS2 originale: homebrew avviabili da memory card su tutti i modelli, anche prototipo

6676
0

ProtoPwn è un nuovo exploit rilasciato dal developer pcm720, figura storica della scena homebrew, che apre nuove possibilità per l’utilizzo della console PlayStation 2.

Pensato specificamente per i primi modelli della console con kernel Protokernel (SCPH-10000, SCPH-15000 e DTL-H10000(S)), questo exploit consente l’esecuzione di codice non autorizzato sfruttando una vulnerabilità nel codice di aggiornamento del browser OSDSYS.

Il risultato è la possibilità di avviare applicazioni homebrew direttamente da una memory card, senza necessità di dischi, modifiche hardware o supporto MagicGate.

Il cuore tecnico di ProtoPwn è un payload a due stadi, unito a uno strumento di impacchettamento. L’exploit fa leva su un file di aggiornamento del browser non cifrato e privo di controlli d’integrità, che viene caricato all’indirizzo 0x7a0000 della memoria.

Una volta in esecuzione, il payload apporta modifiche a OSDSYS, applica una patch al kernel EELOAD, disattiva il sistema principale e cerca sulla memory card un file BOOT.ELF da eseguire.

Il tutto si rende compatibile con qualsiasi tipo di memory card, incluse quelle non ufficiali, rendendo la procedura particolarmente semplice e accessibile.

L’importanza di ProtoPwn è storica, si tratta del primo metodo a rendere vulnerabili via memory card anche i modelli più antichi e prototipici della PlayStation 2, finora esclusi da exploit come FreeMCBoot.

Con questo rilascio, l’intera famiglia PS2 (compresi i modelli destinati a sviluppatori o arcade) può finalmente accedere al mondo homebrew, offrendo nuove opportunità a sviluppatori indipendenti, collezionisti e appassionati di retroconsole.

Utilizzo

  • Eseguire il comando make.
  • Copiare il file BIEXEC-SYSTEM nella directory principale della memory card.
  • Copiare il payload che si desidera eseguire nel percorso BOOT/BOOT.ELF.

Come funziona

  • ProtoPwn è composto da un payload a due stadi relativamente semplice e da uno strumento di packing.

Sostituzione di MBROWS

  • Viene eseguito a partire dall’indirizzo 0x7a0000.
  • Applicare la patch al codice OSDSYS per eseguire una funzione personalizzata nel thread principale.
  • Applicare la patch al kernel EELOAD.
  • Disattivare OSDSYS.
  • Cercare il file ELF di destinazione su mc0 o mc1.
  • Eseguire il loader ELF incorporato.

Loader ELF incorporato

  • Puliere la memoria lasciata da OSDSYS.
  • Caricare il file ELF di destinazione.
  • Reimpostare l’IOP.
  • Eseguire il file ELF di destinazione.

Script di packing semplice

  • Esegue il minimo indispensabile per fare in modo che OSDSYS accetti e “decomprima” il payload.
  • In realtà aumenta la dimensione del file.
  • Il percorso del file ELF di destinazione può essere modificato in fase di compilazione passando l’argomento BOOT_PATH al comando make.
  • BOOT_PATH deve essere relativo a mc0 o mc1, ad esempio: BOOT/BOOT.ELF.

Aggiornamento del browser

Durante l’inizializzazione, il sistema operativo OSDSYS dei modelli con protokernel verifica la presenza di un file di aggiornamento del browser (MBROWS) nelle directory mc1:/BIEXEC-SYSTEM/ e mc0:/BIEXEC-SYSTEM/.

Il file manifest dell’aggiornamento si chiama OSBROWS ed è composto semplicemente da tre righe:

  1. 101 — versione del modulo; deve essere superiore a 100.
  2. PROTPWN — nome del file del modulo, relativo alla cartella BIEXEC-SYSTEM. Non può superare i 7 caratteri.
  3. 007a0000 — indirizzo di caricamento del modulo.

Quando questo file è presente, OSDSYS lo analizza, carica il file specificato all’indirizzo 0x1000000 e lo “decomprime” all’indirizzo di caricamento indicato. Il modulo così caricato viene poi eseguito come funzione del thread del browser OSD.

Similmente a __mbr, questo modulo deve essere privo di intestazione (headerless), con il punto di ingresso situato all’inizio del payload.

Per qualche ragione, a differenza degli aggiornamenti di sistema, l’aggiornamento del browser è completamente non cifrato, senza controlli di integrità o validità, e utilizza uno schema di compressione molto semplice, che può essere facilmente bypassato.

Grazie a queste caratteristiche, è possibile ottenere l’esecuzione di codice personalizzato semplicemente creando un payload da far girare nel thread del browser.

Compressione del modulo

I moduli OSD vengono sempre compressi. Lo schema di compressione è basato su blocchi e ha la seguente struttura:

  • 4 byte che indicano la lunghezza del payload non compresso, in little endian.
  • 4 byte di descrittore del blocco.
  • 30 byte di dati del blocco.
  • 4 byte di descrittore del blocco successivo.
  • 30 byte di dati.
  • …e così via.

Il descrittore del blocco indica se i byte del blocco sono compressi e contiene le informazioni su shift e mask da applicare per decomprimere i dati.

L’utility di decompressione di OSDSYS interrompe l’elaborazione una volta raggiunta la lunghezza del payload dichiarata, ignorando tutti i byte successivi.

Per bypassare la compressione, è sufficiente scrivere il payload non compresso così com’è, anteponendo l’intestazione con la lunghezza all’inizio del file e quattro byte nulli prima di ogni blocco da 30 byte. Per maggiori dettagli, si può consultare il codice di osdpack.

Download: ProtoPwn v1.0.0

Download: Source code ProtoPwn v1.0.0

Fonte: x.com

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

🔥 Prodotti in promozione e articoli più venduti: Nintendo Switch

Vedi altri prodotti Nintendo Switch

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

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.