diff --git a/SabreTools.Models/PlayStation3/Constants.cs b/SabreTools.Models/PlayStation3/Constants.cs index f43fa76..0344c71 100644 --- a/SabreTools.Models/PlayStation3/Constants.cs +++ b/SabreTools.Models/PlayStation3/Constants.cs @@ -4,6 +4,16 @@ namespace SabreTools.Models.PlayStation3 /// public static class Constants { + /// + /// Identifying bytes for SFO file + /// + public const uint SFOMagic = 0x00505346; + + /// + /// Identifying bytes for SFB file + /// + public const uint SFBMagic = 0x2E534642; + #region Hybrid Flags /// diff --git a/SabreTools.Models/PlayStation3/SFB.cs b/SabreTools.Models/PlayStation3/SFB.cs index 445b1b7..da6843d 100644 --- a/SabreTools.Models/PlayStation3/SFB.cs +++ b/SabreTools.Models/PlayStation3/SFB.cs @@ -9,8 +9,7 @@ namespace SabreTools.Models.PlayStation3 /// /// ".SFB" /// - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] - public byte[]? Magic; + public uint Magic; /// /// File version(?) diff --git a/SabreTools.Models/PlayStation3/SFOHeader.cs b/SabreTools.Models/PlayStation3/SFOHeader.cs index 054111f..5b0576f 100644 --- a/SabreTools.Models/PlayStation3/SFOHeader.cs +++ b/SabreTools.Models/PlayStation3/SFOHeader.cs @@ -9,8 +9,7 @@ namespace SabreTools.Models.PlayStation3 /// /// "\0PSF" /// - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] - public byte[]? Magic; + public uint Magic; /// /// Version diff --git a/SabreTools.Models/PlayStation4/AppPkgHeader.cs b/SabreTools.Models/PlayStation4/AppPkgHeader.cs new file mode 100644 index 0000000..78a0584 --- /dev/null +++ b/SabreTools.Models/PlayStation4/AppPkgHeader.cs @@ -0,0 +1,236 @@ +using System.Runtime.InteropServices; + +namespace SabreTools.Models.PlayStation4 +{ + /// + [StructLayout(LayoutKind.Sequential)] + public class AppPkgHeader + { + /// + /// Identifying bytes for app.pkg file, "\7FCNT" + /// + public uint Magic; + + /// + /// PKG Type + /// + public uint Type; + + /// + /// PKG Unknown Field + /// + public uint PKGUnknown; + + /// + /// PKG File count + /// + public uint FileCount; + + /// + /// PKG Entry count + /// + public uint EntryCount; + + /// + /// SC Entry count + /// + public ushort SCEntryCount; + + /// + /// PKG Entry count (duplicated) + /// + public ushort EntryCount2; + + /// + /// PKG File Table offset + /// + public uint TableOffset; + + /// + /// PKG Entry data size + /// + public uint EntryDataSize; + + /// + /// Offset of PKG Entries + /// + public ulong BodyOffset; + + /// + /// Length of all PKG Entries + /// + public ulong BodySize; + + /// + /// PKG Content offset + /// + public ulong ContentOffset; + + /// + /// PKG Content size + /// + public ulong ContentSize; + + /// + /// PKG Content ID + /// + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x24)] + public string? ContentID; + + /// + /// PKG Content Padding (Zeroes) + /// + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0xC)] + public byte[]? ContentZeroes; + + /// + /// PKG DRM Type + /// + public uint DRMType; + + /// + /// PKG Content Type + /// + public uint ContentType; + + /// + /// PKG Content Flags + /// + public uint ContentFlags; + + /// + /// PKG Promote Size + /// + public uint PromoteSize; + + /// + /// PKG Version Date + /// + public uint VersionDate; + + /// + /// PKG Content Flags + /// + public uint VersionHash; + + /// + /// PKG Padding Section 1 + /// + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x78)] + public byte[]? Zeroes1; + + /// + /// PKG SHA256 for Main Entry 1 + /// + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] + public byte[]? MainEntry1SHA256; + + /// + /// PKG SHA256 for Main Entry 2 + /// + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] + public byte[]? MainEntry2SHA256; + + /// + /// PKG SHA256 for Digest Table + /// + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] + public byte[]? DigestTableSHA256; + + /// + /// PKG SHA256 for Main Table + /// + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] + public byte[]? MainTableSHA256; + + /// + /// PKG Padding Section 2 + /// + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x280)] + public byte[]? Zeroes2; + + /// + /// PFS Unknown Field + /// + public uint PFSUnknown; + + /// + /// PFS Image Count + /// + public uint PFSImageCount; + + /// + /// PFS Image Flags + /// + public ulong PFSImageFlags; + + /// + /// PFS Image Offset + /// + public ulong PFSImageOffset; + + /// + /// PFS Image Size + /// + public ulong PFSImageSize; + + /// + /// Mount Image Offset + /// + public ulong MountImageOffset; + + /// + /// Mount Image Size + /// + public ulong MountImageSize; + + /// + /// PKG Size + /// + public ulong PKGSize; + + /// + /// PKG Signed Size + /// + public uint PKGSignedSize; + + /// + /// PKG Signed Size + /// + public uint PKGCacheSize; + + /// + /// SHA256 for PFS Image + /// + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] + public byte[]? PFSImageSHA256; + + /// + /// SHA256 for PFS Signed + /// + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] + public byte[]? PFSSignedSHA256; + + /// + /// PFS Split Size nth 0 + /// + public ulong PFSSplitSize0; + + /// + /// PFS Split Size nth 1 + /// + public ulong PFSSplitSize1; + + /// + /// PKG Padding Section 3 + /// + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0xB50)] + public byte[]? Zeroes3; + + /// + /// SHA256 for PKG + /// + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] + public byte[]? PKGSHA256; + } +} diff --git a/SabreTools.Models/PlayStation4/Constants.cs b/SabreTools.Models/PlayStation4/Constants.cs new file mode 100644 index 0000000..fdca14d --- /dev/null +++ b/SabreTools.Models/PlayStation4/Constants.cs @@ -0,0 +1,11 @@ +namespace SabreTools.Models.PlayStation4 +{ + /// + public class Constants + { + /// + /// Identifying bytes for app.pkg file, "\7FCNT" + /// + public const uint AppPkgMagic = 0x7F434E54; + } +}