System Software

From PS4 Developer wiki
Revision as of 09:01, 14 December 2013 by Euss (talk | contribs) (→‎Unpacking)
Jump to navigation Jump to search
System Software Update Installing

PlayStation 4's Operating System

Name: ORBIS OS
Based on: FreeBSD 9.0
Platform: 64 bits (x86_64)

Disc vs Download

PUP files on PS4 discs are 1GB, regardless of version, as they are zerofilled at the end of the file, just like PS3 PUP were zerofilled to 256MB. Hence, their hash will differ.

Regioning

Shop server is offline (wrong url?) : http://fshop01.ps4.update.playstation.net/update/ps4/list/shop/ps4-updatelist.txt / ps4-updatelist.xml / ps4-updatefeature.html

PS4 Update list

<?xml version="1.0" ?>
<update_data_list>
  <region id="jp" >
    <force_update>
      <system level0_system_version="00.000.000" level1_system_version="00.000.000" />
    </force_update>
    <system_pup version="00.000.000" label="0.000" >
      <update_data update_type="full" >
       <image size="1" >http://djp01.ps4.update.playstation.net/update/ps4/image/xxxx/PS4UPDATE.PUP?dest=jp</image>
      </update_data>
    </system_pup>
    <recovery_pup type="default" >
      <preinst_pup  version="00.000.000" />
      <system_pup version="00.000.000" label="0.000" />
      <system_ex_pup id="0" version="00.000.000.000" label="0.000.000.000" />
      <image size="1">http://djp01.ps4.update.playstation.net/update/ps4/image/xxxx/PS4UPDATE.PUP?dest=jp</image>
    </recovery_pup>
  </region>
</update_data_list>

PS4 Playstation Update Packages links use the same structure as the PS Vita and PS3:

http://d<TLD>01.ps4.update.playstation.net/update/ps4/image/YYYY_MMDD>/pre_<md5>/PS4UPDATE.PUP?dest=<TLD>
(TLD=2 region letter abbreviation (jp,us,..), YYYY_MMDD is release date, md5 is 22-digits long HASH)

SLB2 structure

PS4 SLB PUP container format - SKFU
/* file structure of SLB goes as following, if unpacking make sure you use 64 bits little endian on windows os */
typedef unsigned char u8;
typedef unsigned long int u32;
typedef unsigned long long int u64;

typedef struct{
	u32 offset; //1 block is headersize (512 padded)
	u32 cryptSize;
	u64 reserved; //probably file alignment
	u8 fileName[32];
} fileEntry;

typedef struct{
	u32 magic; //SLB2
	u64 version; //1
	u32 fileCount;
	u32 blockCount;
	u8 reserved[12];
	fileEntry files[10];
} ps4pup;

SLB2 files to play with

1.500.000:

1.501.000 :

Unpacking

SLB PUP Files

These files are contained inside of SLB2 containers. They contain data pertaining to system firmware. All inner pup files begin with the same bytes:

Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000  4F 15 3D 1D 00 01 01 12 04 00 00 00              O.=.........

After that the bytes begin to differentiate. It could be a file count, or a hash used later on to decrypt the inner pup files.