diff --git a/tools/pkg extractor/PFS.cpp b/tools/pkg extractor/PFS.cpp new file mode 100644 index 00000000..d58abb39 --- /dev/null +++ b/tools/pkg extractor/PFS.cpp @@ -0,0 +1,18 @@ +#include "PFS.h" + +PFS::PFS() +{ + +} + + +PFS::~PFS() +{ + +} + +bool PFS::pfsOuterReadHeader(U08* psfOuterStart) +{ + psfOuterheader = (PFS_HDR&)psfOuterStart[0]; + return true; +} \ No newline at end of file diff --git a/tools/pkg extractor/PFS.h b/tools/pkg extractor/PFS.h new file mode 100644 index 00000000..1c55df1d --- /dev/null +++ b/tools/pkg extractor/PFS.h @@ -0,0 +1,59 @@ +#pragma once +#include +#include "Types.h" +#include +#include +#include +#include + +struct PFS_HDR { + U64 version; + U64 magic; + U64 id; + U08 fmode; + U08 clean; + U08 ronly; + U08 rsv; + U16 mode; + U16 unk1; + U32 blocksz; + U32 nbackup; + U64 nblock; + U64 ndinode; + U64 ndblock; + U64 ndinodeblock; + U64 superroot_ino; +}; + +class PFS +{ +private: + PFS_HDR psfOuterheader; +public: + PFS(); + ~PFS(); + bool pfsOuterReadHeader(U08* psfOuterStart); + + void printPsfOuterHeader() + { + printf("PS4 PSF Outer Header:\n"); + printf("- version: 0x%" PRIx64 "\n", psfOuterheader.version); + printf("- magic: 0x%" PRIx64 "\n", psfOuterheader.magic); + printf("- id: 0x%" PRIx64 "\n", psfOuterheader.id); + printf("- fmode: 0x%X\n", psfOuterheader.fmode); + printf("- clean: 0x%X\n", psfOuterheader.clean); + printf("- ronly: 0x%X\n", psfOuterheader.ronly); + printf("- rsv: 0x%X\n", psfOuterheader.rsv); + printf("- mode: 0x%X\n", psfOuterheader.mode); + printf("- unk1: 0x%X\n", psfOuterheader.unk1); + printf("- blocksz: 0x%X\n", psfOuterheader.blocksz); + printf("- nbackup: 0x%X\n", psfOuterheader.nbackup); + printf("- nblock: 0x%" PRIx64 "\n", psfOuterheader.nblock); + printf("- ndinode: 0x%" PRIx64 "\n", psfOuterheader.ndinode); + printf("- ndblock: 0x%" PRIx64 "\n", psfOuterheader.ndblock); + printf("- ndinodeblock: 0x%" PRIx64 "\n", psfOuterheader.ndinodeblock); + printf("- superroot_ino: 0x%" PRIx64 "\n", psfOuterheader.superroot_ino); + + printf("\n\n"); + } +}; \ No newline at end of file diff --git a/tools/pkg extractor/PKG.cpp b/tools/pkg extractor/PKG.cpp index a55d92b6..bec29736 100644 --- a/tools/pkg extractor/PKG.cpp +++ b/tools/pkg extractor/PKG.cpp @@ -1,5 +1,6 @@ #include "PKG.h" #include "FsFile.h" +#include "PFS.h" #include PKG::PKG() @@ -101,11 +102,15 @@ bool PKG::extract(const std::string& filepath, const std::string& extractPath, s out.Close(); } } + //PFS read + PFS pfs; + pfs.pfsOuterReadHeader(pkg + pkgheader.pfs_image_offset); + pfs.printPsfOuterHeader(); //extract pfs_image.dat - FsFile out; + /*FsFile out; out.Open(extractPath + "pfs_image.dat", fsWrite); out.Write(pkg + pkgheader.pfs_image_offset, pkgheader.pfs_image_size); - out.Close(); + out.Close();*/ munmap(pkg); return true; } \ No newline at end of file diff --git a/tools/pkg extractor/PKG.h b/tools/pkg extractor/PKG.h index 61f922e5..2a690411 100644 --- a/tools/pkg extractor/PKG.h +++ b/tools/pkg extractor/PKG.h @@ -243,7 +243,7 @@ public: printf("- PKG body offset: 0x%" PRIx64 "\n", pkgheader.pkg_body_offset); printf("- PKG body size: 0x%" PRIx64 "\n", pkgheader.pkg_body_size); printf("- PKG content offset: 0x%" PRIx64 "\n", pkgheader.pkg_content_offset); - printf("- PKG conteít size: 0x%" PRIx64 "\n", pkgheader.pkg_content_offset); + printf("- PKG content size: 0x%" PRIx64 "\n", pkgheader.pkg_content_offset); printf("- PKG pkg_content_id: %s\n", pkgheader.pkg_content_id); printf("- PKG drm type: 0x%X\n", pkgheader.pkg_drm_type); diff --git a/tools/pkg extractor/pkgextract.vcxproj b/tools/pkg extractor/pkgextract.vcxproj index 735d7e16..0e1ace56 100644 --- a/tools/pkg extractor/pkgextract.vcxproj +++ b/tools/pkg extractor/pkgextract.vcxproj @@ -128,11 +128,13 @@ + + diff --git a/tools/pkg extractor/pkgextract.vcxproj.filters b/tools/pkg extractor/pkgextract.vcxproj.filters index 0a91041f..41a03969 100644 --- a/tools/pkg extractor/pkgextract.vcxproj.filters +++ b/tools/pkg extractor/pkgextract.vcxproj.filters @@ -24,6 +24,9 @@ Source Files + + Source Files + @@ -35,5 +38,8 @@ Source Files + + Source Files + \ No newline at end of file