Editing System File Object (SFO) (PSF)
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 1: | Line 1: | ||
[[Category:Software]] | [[Category:Software]] | ||
These config strings are inside the [[PS_VITA_Packages_%28.PKG%29#Game_Packages|Game Package (PKG)]]. | |||
{| class="wikitable" | |||
{| class="wikitable | |||
|- | |- | ||
!Name Variable | |||
!Length Variable | |||
!Parameter (Example) | |||
!Length Parameter | |||
!Notes | |||
|- | |- | ||
|APP_VER | |||
|0x8 | |||
|1.00 | |||
|0x3 | |||
|Application Version | |||
|- | |||
|ATTRIBUTE | |||
|0x9 | |||
| 00 00 80 81 | |||
|0x3 | |||
| Special functions | |||
|- | |||
|ATTRIBUTE2 | |||
|0xA | |||
| 00 00 ?? ?? | |||
|0x3 | |||
| This parameter can not exist on some PKG (used for special functions??) | |||
|- | |||
|CATEGORY | |||
|0x8 | |||
|gdc | |||
|0x3 | |||
|Category | |||
|- | |||
|CONTENT_ID | |||
|0xA | |||
|JP0365-PCSG90004_00-SKP2TRIAL0000000 | |||
|0x24 | |||
| | |||
|- | |||
|GC_RO_SIZE | |||
|0xA | |||
|00 00 00 00 | |||
|0x3 | |||
|?? | |||
|- | |||
|GC_RW_SIZE | |||
|0xA | |||
|00 00 00 00 | |||
|0x3 | |||
|?? | |||
|- | |||
|PARENTAL_LEVEL | |||
|0xE | |||
|00 00 00 00 | |||
|0x3 | |||
|This should be the same as in the PS3 (from 0 to 11) | |||
|- | |||
|PSP2_DISP_VER | |||
|0xD | |||
|00 01 00 00 | |||
|0x3 | |||
|???? | |||
|- | |||
|PSP2_SYSTEM_VER | |||
|0xF | |||
|01.500 | |||
|0x5 | |||
|Minimum FW to be play this game | |||
|- | |||
|PUBTOOLINFO | |||
|0xB | |||
|c_date=20111205 | |||
|0x202 | |||
|Don't know what this is, but it contain creation data (c_date=20111205) | |||
|- | |||
|SAVEDATA_MAX_SIZE | |||
|0x11 | |||
|00 00 04 00 ( = 1024) | |||
|0x4 | |||
| i found this value here OFFSET: 0x1043 (File: JA0003-PCSC80003_00-UKETORNE00000000.PKG) in this case this game can use 1024 Bytes (1MB) | |||
|- | |||
|STITLE | |||
|0x6 | |||
|uke-torne | |||
|0x32 | |||
|Title of the ???? | |||
|- | |||
|STITLE_00 | |||
|0x9 | |||
|uke-torne | |||
|0x32 | |||
|Title of the ???? | |||
|- | |||
|TITLE | |||
|0x5 | |||
|uke-torne | |||
|0x80 | |||
|Title of the game | |||
|- | |||
|TITLE_00 | |||
|0x8 | |||
|uke-torne(?????????????? | |||
|0x80 | |||
|Title of the game | |||
|- | |||
|TITLE_ID | |||
|0x8 | |||
|PCSG90004 | |||
|0x8 | |||
|APP_ID | |||
|- | |||
|VERSION | |||
|0x8 | |||
|01.01 | |||
|0x4 | |||
|PKG Version | |||
|- | |||
|} | |} | ||
= Header = | |||
This is the Header of a SFO/PSF file | |||
{| class="wikitable sortable" | |||
{| class="wikitable sortable | |||
|- | |- | ||
! Offset !! Data !! Arch !! Notes | |||
|- | |- | ||
| | | 0x0 || 0x00505346 || Little Endian || PSF Magic | ||
|- | |- | ||
| | | 0x4 || 0x01010000 || Little Endian || Version | ||
|- | |- | ||
| | | 0x8 || 0x24010000 || Little Endian || Value Start | ||
|- | |- | ||
| | | 0xC || 0xdc000000 || Little Endian || Params Start | ||
|- | |- | ||
| | | 0x4 || 0x11000000 || Little Endian || N° of params/values | ||
|- | |- | ||
|} | |} | ||
= Body = | |||
Before understanding the algorithm, a few things: | |||
There are 3 variables: | |||
==Type of data== | |||
0x6+0x10*i<br /> | 0x6+0x10*i<br /> | ||
(i=0,1,2,3,4,5,...) | (i=0,1,2,3,4,5,...) | ||
{| class="wikitable sortable" | |||
{| | |||
|- | |- | ||
! Data !! Arch !! Notes | |||
|- | |- | ||
| 04 | | 04 02 || Little Endian || The value is an Integer | ||
|- | |- | ||
| 04 | | 04 04 || Little Endian || The value is an UTF8 | ||
|- | |- | ||
| 04 | | 04 00 || Little Endian || The value is an UNKNOWN | ||
|- | |- | ||
|} | |} | ||
== | == Position == | ||
The position is stored with this algo: | |||
0x1C+0x10*i<br /> | |||
(i=0,1,2,3,4,5,...) | |||
{| class="wikitable sortable" | |||
{| class="wikitable" | |||
|- | |- | ||
! Offset !! Data !! Arch !! Notes | |||
|- | |- | ||
| | | 0x0 || 0x00505346 || Little Endian || SFO/PSF Header | ||
|- | |- | ||
| | | 0x4 || 0x01010000 || Little Endian || Version | ||
|- | |- | ||
|} | |} | ||
==== | == Length == | ||
The length is stored with this algo: | |||
* | 0x1C+0x10*i [Param]<br /> | ||
(0x24+0x10*i)-(0x14+0x10*i) [Value]<br /> | |||
(i=0,1,2,3,4,5,...) | |||
{| class="wikitable sortable" | |||
{| class="wikitable sortable" | |||
|- | |- | ||
! Offset !! Data !! Arch !! Notes | |||
|- | |- | ||
| | | 0x24-0x14 || 0x0800 || Little Endian || Length Value | ||
|- | |- | ||
| | | 0x1C || 0x08000000 || Little Endian || Length Param | ||
| | |||
| | |||
|- | |- | ||
|} | |} | ||
== Algorithm == | |||
[PSF offset] + (0x06 * (0x10*i)) | |||
= PSF Dump (From 0xBF0 to 0x11F0) = | |||
The length of this is 0x5D0 | The length of this is 0x5D0 | ||
<pre> | <pre> |