Editing PSSE
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 4: | Line 4: | ||
PSSE stands for PlayStation Suite Encrypted. It is an encryption layer that encrypts the PSM game's filesystem. | PSSE stands for PlayStation Suite Encrypted. It is an encryption layer that encrypts the PSM game's filesystem. | ||
The encryption layer is comparable to the PS Vita | The encryption layer is comparable to the PS Vita [[Filesystem]] in many ways; however, it seemed that there was a bug at Sony, where besides executable files, the first directory level of a PSM app is not encrypted with PSSE, whose directory level is below the root of RO/. Similarly, the PSM SaveData is not encrypted by such layer either. | ||
== Data Structure == | == Data Structure == | ||
{| class="wikitable" style="font-size:small; text-align: center;border;" | {| class="wikitable" style="font-size:small; text-align: center;border:3px ridge #123AAA;" | ||
|- | |- | ||
|'''offset''' | | style="background-color:#FFFFFF; color:#123AAA;" |'''offset''' | ||
|'''value''' | | style="background-color:#FFFFFF; color:#123AAA;" |'''value''' | ||
|'''description''' | | style="background-color:#FFFFFF; color:#123AAA;" |'''description''' | ||
|- | |- | ||
|0x00||0x50535345 (ASCII "PSSE" / "PSME")||Magic Number / File Header | |0x00||0x50535345 (ASCII "PSSE" / "PSME")||Magic Number / File Header | ||
Line 17: | Line 17: | ||
|0x4|| int32 || Version | |0x4|| int32 || Version | ||
|- | |- | ||
|0x8 || | |0x8 || int32 || Decrypted file size | ||
|- | |- | ||
|0x14|| char[0x24] [[System_File_Object_(SFO)_(PSF)#CONTENT_ID|CONTENT_ID]]||Contents of /RW/System/content_id | |0x14|| char[0x24] [[System_File_Object_(SFO)_(PSF)#CONTENT_ID|CONTENT_ID]]||Contents of /RW/System/content_id | ||
|- | |- | ||
|0x70|| char[0x10] ||Encrypted IV | |0x70|| char[0x10] ||Encrypted IV | ||
|- | |- | ||
|0x680||Content Data|| Actural encrypted file data | |||
|0x680|| | |||
|- | |- | ||
|} | |} | ||
Line 47: | Line 31: | ||
AES-128-CBC decrypt 0x10 bytes from 0x70 using [[Keys#PSSE_Header_IV|PSSE Header IV]] and [[Keys#PSSE_Header_Key|PSSE Header Key]] | AES-128-CBC decrypt 0x10 bytes from 0x70 using [[Keys#PSSE_Header_IV|PSSE Header IV]] and [[Keys#PSSE_Header_Key|PSSE Header Key]] | ||
the resulting decryption is the Contents IV, now take 0x10 bytes from 0x120 of the game's NoPsmDrm RIF, this is the Content Key | the resulting decryption is the Contents IV, now take 0x10 bytes from 0x120 of the game's NoPsmDrm RIF, this is the Content Key | ||
the content data section (0x680 onwards) is made up of blocks, each 0x8000 bytes in size | the content data section (0x680 onwards) is made up of blocks, each 0x8000 bytes in size | ||
Line 69: | Line 51: | ||
A script that implements the above algorithm can be found here: | A script that implements the above algorithm can be found here: | ||
https://github.com/KuromeSan/psse-decrypt | https://github.com/KuromeSan/psse-decrypt/blob/master/decrypt.py | ||
it is in the public domain, so feel free to use it for whatever you want | it is in the public domain, so feel free to use it for whatever you want |