PSP prxldr plugin è una versione aggiornata di prxldr che corregge alcuni problemi con i puntatori a 32 bit e aggiunge la configurazione del decompilatore (richiede il decompilatore hexrays MIPS per decompilare).
PRX è l’abbreviazione di PSP RelocatebleeXecutable. Sony ha esteso il formato file ELF standard, diverso dallo standard perché utilizza un tipo ELF speciale, ridefinisce il significato degli indirizzi fisici in ProgramHeader, aggiunge sezioni speciali e adotta un formato di riposizionamento personalizzato ELF.
Questo è anche il motivo fondamentale per cui il caricatore di file ELF di IDA non può supportare bene il formato PRX. Questo sarà descritto in dettaglio di seguito.
Il tipo ELF speciale PRX utilizza 0xFFA0
come tipo di file invece di 0x0002
nell’ELF MIPS standard. Questa è la caratteristica principale che contraddistingue PRX ed ELF.
Allo stesso tempo, puoi vedere che la CPU è espansa a 0xA2
nei flag dell’header ELF, che indica il processore allegrex utilizzato sulla PSP.
Installazione
- Per installare copiare i file
prxldr.dll
eprxldr64.dll
nella directoryIDA/loaders
. - Se si copia anche il file
psplibdoc.xml
nella directoryIDA/loaders
, questo plugin lo utilizzerà per denominare correttamente le importazioni e le esportazioni.
Crediti
- xyzz per aver scritto prxldr.
- balika011 per aver aggiornato prxldr per una versione più recente di IDA.
- xorloser per aver aggiornato prxldr per IDA v7.5 sp3, corretti alcuni problemi con i puntatori a 32 bit e aggiunta la configurazione del decompilatore (richiede il decompilatore hexrays MIPS per decompilare).
- thecobra per aver creato il file
psplibdoc.xml
in bundle nello zip delle versioni (afaik).
Limitazioni
Non supporta i file PRX crittografati.
Non supporta correttamente l’ABI della PSP durante la decompilazione (ma funziona in modo decente). Sembra che l’ABI della PSP sia in realtà qualcosa di sony “mips eabi” personalizzato, ma IDA ci permette solo di scegliere tra o32 e n32.
- o32 ha registri a 32 bit e supporta fino a 4 registri come parametri per le funzioni.
- n32 ha registri a 64 bit e supporta fino a 8 registri come parametri per le funzioni.
Ho scelto n32 poiché mostrerà correttamente i parametri per le funzioni. Tuttavia mostrerà i valori a 64 bit per i valori immediati che appariranno strani per i valori immediati che hanno il bit superiore impostato.
Ciò significa che vedrai: some_var = 0xFFFFFFFF80000000
invece di some_var = 0x80000000
Changelog
- Tenta di correggere potenziali problemi di stringa che causano la mancata etichettatura corretta delle funzioni NID.
Download: PSP prxldr plugin per IDA v20210304_1442
Download: Source code PSP prxldr plugin per IDA v20210304_1442
Fonte: github.com