- As a follow-up to his recent PS3 SELF Decrypter PSGroove Payload
and PS3 3.50 Firmware Decryption
work, today PlayStation 3 developer graf_chokolo
has released a PS3 LV2 Kernel Decrypter payload for PSGroove.
Download: PS3 LV2 Kernel Decrypter PSGroove Payload
To quote from his comment on xorloser
's blog, linked above:
I just release my lv2 kernel decrypter
You need metldr, lv2ldr, RL_FOR_PROGRAM.img and lv2_kernel.self. You have first to dump your metldr from FLASH memory. lv2ldr you will find also in your FLASH memory or in decrypted CORE_OS_PACKAGE.pkg from PUP files.
RL_FOR_PROGRAM.img is a revoke list for programs and can be also found in PUP files. lv2_kernel.self is on your FLASH memory or in decrypted CORE_OS_PACKAGE.pkg.
First i send all files to PS3 and store them in memory. After that i load metldr in isolation mode and pass it the addr e ss of lv2ldr. The code is very low level and many things are done by directly manipulating SPU registers
If you have any questions or problems then feel free to contact me or ask here. I will try to help you. I will try to document my findings on my homepage
I also uploaded a code which can communicate with USB Dongle AUthenticator by using Dispatcher Manager without using any GameOS functions
It’s exactly what GameOS does, just low level
Have fun guys
lv2_kernel.self from 1.10 firmware decrypted
Guys, just to make sure that you know
LV2 decrypter is also PS2 emu decrypter, just change LPAR auth id in code
PS2 emu is like GameOS, it’s LV2 and is decrypted by lv2ldr
Just decrypted vsh.self from 1.10 firmware
Just like old good days
I decrypted software_update_plugin.sprx but didn’t have time to reverse it yet
- Physical/Virtual memory address of an isolation module that should be loaded by metldr is written into SPU register SPU_In_Mbox. The SPU register SPU_In_Mbox is 32bit, so 64bit memory address is written in 2 steps.
- MFC relocation is turned off by clearing R-bit in SPU register MFC_SR1. By doing this, HV enables real address mode for MFC of SPU.
- On GameOS, it also works with relocation on. You just have to initialize SLB of SPU and insert valid SLB entries.
- Physical/Virtual memory address of metldr is written to SPU registers Sig_Notify1 and Sig_Notify2
- Isolation load request is enabled by writing SPU register SPU_PrivCntl
- Isolation load request is made by writing value 0x3 into SPU register SPU_RunCntl
SPE_load_request_metldr - 0x002B00A4 (3.15)
- lv2ldr is used to decrypt lv2_kernel.self
- syscalls 0x10042 and 0x1004A use lv2ldr
- syscall 0x10042 is used by HV Process 3 during LV2 LPAR construction
- syscall 0x1004A uses different parameters as syscall 0x10042
SPE_load_request_lv2ldr_1 - 0x002AE82C (3.15)
SPE_load_request_lv2ldr_2 - 0x002AE8D8 (3.15)
Decrypting SELFs with appldr and lv1_undocumented_function_99
- 64 bit memory address of lv2ldr is written into 32 bit SPU register SPU_In_Mbox
- metldr is loaded
- lv1_undocumented_function_99 loads and prepares appldr for SELF decryption.
- When appldr is ready to decrypt data, it sends a message via mailbox.
- The address and the size of the encrypted data is passed to appldr via a shared memory.