131w ago - As a follow-up to his
PS3 Hypervisor Reverse Engineering Progress report, today
graf_chokolo has published on
xorloser's blog (linked above) his updated PSGroove payload which now allows for decrypting PKGs from PS3 PUP files.
Download:
Grafchokolo PSGroove Payload /
Grafchokolo GIT
To quote: "So guys, I promised to you that I will made my PSGroove payload public.
I just uploaded it to github. Let me first explain how it works. I do not have much free time, so please do not expect me to explain every detail to you. The target group of this release are advanced programmers among you. The source code is not commented but it's clean, well structured and self-explaining.
My payload has 2 stages. The 1st stage is actually a PSGroove payload. It initializes the gelic device and allocates memory needed for the 2nd stage. Just compile the 1st stage binary, convert it to C hex array and replace the PSGroove payload.
The 2nd stage does the real job, e.g. decrypts a CORE_OS_PACKAGE.pkg from a PUP file, runs some isolated SPU module or dumps FLASH. The 2nd stage binary is sent to PS3 over Ethernet with "sendfile" which I also provided.
The 1st stage code receives this data and stores it in a memory region of size 64 kb. After the upload is complete, the 1st stage code jumps to the 2nd stage code and executes it. So, you have to program PSGroove only once and can just change the 2nd stage binary to execute different code.
In order to be able to run isolated SPUs, you first need to dump your FLASH memory.
Then extract these files from dump and after that you can use it e.g. to decrypt packages I described how to extract files from FLASH dump on my Hypervisor Reverse Engineering page.
To be able to decrypt packages from PUP file, first you need to extract a revoke list for packages from PUP file 3.41 e.g. (RL_FOR_PACKAGE.pkg).
Just extract it, convert it to C hex array and paste it into rvk_pkg_341.c. You have to do it yourself because i don't want any legal problems with SONY.
I didn't use any GameOS functions in my code because my goal is to reverse Hypervisor and I wanted to learn how to do it without GameOS. I don't plan to release any GameOS tools, so feel free to create new cool and helpful programs for GameOS using my code.
I'm using ppu toolchain for Linux provided by IBM to compile the source code.
I will try to answer any of your questions here. But please do not ask me questions like how to install ppu compiler or something like that. You will find everything on the Internet.
I don't have much time, so try to do as much as you can by yourself, you will benefit from it yourself. So, have fun guys"
No, it’s not packet_id I think it’s just a counter, request id maybe or something like that. GameOS reads it, stores into DM header and then increments it.
xorloser says:
that is how a packet id is commonly used, like a counter. it ensures each packet has a unique id.
graf_chokolo says:
No, packet_id is something diffrent in DM, it’s not request id.
graf_chokolo says:
Look for string “_USB_DONGLE_AUTH_USB_DONGLE_” in the dump
graf_chokolo says:
For method 2, you have first to reconstruct Process 3 where DM runs. After that you have to translate EA address from Process 6 to RA and patch it in HV
graf_chokolo says:
I have got my 1st fat PS3 with HV 3.15. Let the fun begin, guys
graf_chokolo says:
2E 02 01 is the header of data that is sent by USB Dongle Authenticator. And 2E 02 02 is the header of data that is sent to USB Dongle Authenticator. JIG doesn’t communicate with USB Dongle Authenticator directly
First, USb packets are sent to GameOS. then GameOS extracts them, repacks and send it to DM and DM sends it to USB Dongle Authenticator. The same is for the data sent by USB Dongle Authenticator. So, GameOS just adds it’s own header or something like that
graf_chokolo says:
Sorry, still waiting for my SX28 devboard
graf_chokolo says:
In the mean time i’m working on self decryption
graf_chokolo says:
Look at function at address 0×00297640 in HV dump. I called this function get_proc_table_entry because it returns a pointer to a HV proc. This function references the HV proc table
graf_chokolo says:
The HV procs are not continuous in HV dump, you have first to extract/dump them from HV dump, every page of a proc have to be extracted from HV dump before you will be able to see any string refrences