Editing Packages (.PKG)
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]] | |||
There are two kinds of PS VITA package files (.pkg): | |||
1. PS VITA Game Packages (.pkg) | |||
2. PS VITA System Packages (.pkg) | |||
== Game Packages == | |||
Debug and Retail v1.0 (not the actual ones) PS VITA Game Package files (.pkg) can be decrypted & extracted using the "[http://www.vitadevwiki.com/index.php?title=Tools PS VITA .pkg xTractor]" | |||
A picture showing the unpacked game .pkg structure: | |||
[[File:PKGdirstruct.png]] | |||
See also: [[System_File_Object_(SFO)_(PSF)]], [[Keys]] | |||
<pre> | |||
typedef struct{ | |||
u32 magic; | |||
u32 pkg_type; | |||
u32 pkg_info_offset; | |||
u32 pkg_info_size; | |||
u32 header_size; | |||
u32 item_count; | |||
u64 total_size; | |||
u64 data_offset; | |||
u64 data_size; | |||
char contentid[0x30]; | |||
u8 digest[0x10]; | |||
u8 k_licensee[0x10]; | |||
u8 sha1_hash[0x40]; //header hash | |||
} PKG_Header; | |||
typedef struct{ | |||
u32 magic; // 0x7f657874 ".ext" | |||
u32 unknown_01; // static = 1 | |||
u32 header_size; // header size | |||
u32 data_size; // data size | |||
u32 data_offset; // data start offset | |||
u32 data_type; // Beta = 0x390, Retail 0x490 | |||
u64 pkg_data_offset; // there is some data at the end: size is always 0x1a0 on retail and beta pkg. | |||
u32 padding1; // 0x00000000 | |||
u32 data_type2; // Beta = 0x1, Retail 0xc0000002 | |||
u32 unknown_02; // on Retail = 0x930, Beta 0x0 | |||
u32 padding2; // 0x00000000 | |||
u64 padding3; // 0x0000000000000000 | |||
u64 padding3; // 0x0000000000000000 | |||
} Unknown_Header; | |||
</pre> | |||
== Firmware Packages == | |||
PS VITA Firmware Package files (.pkg) are inside PS VITA Update Files (.pup). | |||
Those packages can not be decrypted, yet. | |||
== PSN == | |||
=== Game Update === | |||
It is a bit upgraded but basicly the same as on PS3. Once a game tab is opened, the VITA downloads a PKG for this game tab. This includes update information, such as if an update if available. If thats the case, the game tab will show you a yellow arrow on the top of the screen which gives you information about the update available. | |||
This information is stored in XML's which are gathered via URL's like this example one: | |||
<pre> http://gs.ww.np.dl.playstation.net/ppkg/np/PCSG00001/PCSG00001_T1/0101/c653f481544f8b19/changeinfo.xml</pre> | |||
this is the content: | |||
<pre> | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<changeinfo titleid="PCSG00001"> | |||
<changes app_ver="01.01"> | |||
<![CDATA[ | |||
オンライン仕様に関わる動作の安定性を向上しました | |||
]]> | |||
</changes> | |||
</changeinfo> | |||
</pre> | |||
This is the original update PKG. | |||
<pre> http://gs.ww.np.dl.playstation.net/ppkg/np/PCSG00001/PCSG00001_T1/c653f481544f8b19/JP0700-PCSG00001_00-RIDGERACERPSVITA-A0101-V0100-fd9baf01343b2db6df0d434b17ef822a9699c6da-PE.pkg </pre> | |||
[http://streetskaterfu.blogspot.com/2012/01/ps-vita-game-updates.html original link(SKFU BLOG)] | |||
the update is stored with the XML. | |||
<pre> http://gs.ww.np.dl.playstation.net/ppkg/np/[TITLE_ID]/[TITLE_ID]_T1/[Version]/[An HASH]/changeinfo.xml</pre> | |||
= System Package = | |||
Bytes are in '''Little Endian'''!! | |||
<pre> | |||
typedef struct { | |||
unint32_t type; /*type of pkg. must be 0x3 (Offset 0x04)*/ | |||
unint64_t unknown; /*unknown but static (Offset 0x08)*/ | |||
unint64_t hdr_size; /*header size (Offset 0x10)*/ | |||
unint64_t content_size; /*package content size (Offset 0x18)*/ | |||
unint64_t size; /*package size (Offset 0x20)*/ | |||
}s_pkg | |||
</pre> |