Skip to content

v2.8

Latest

Choose a tag to compare

@Coder787-source Coder787-source released this 17 Aug 02:10
· 3 commits to main since this release

KytyPlus v2.8 — PKG Parser + Full PFS Filesystem Parser + Launcher GUI Install
Tag: v2.8 · License: GPL-2.0

Downloads

  • Windows: KytyPlus-Windows-x64.zip
  • macOS: KytyPlus-macOS-x86_64.zip
  • Linux: KytyPlus-Linux-x86_64.zip

PKG Package Parser (New)
v2.8 adds support for Sony's .pkg container format — the package format used for PS4/PS5 digital games and updates. The parser reads the big-endian header (magic 0x7F504B47), content ID, file table, and body offset/size, then extracts the inner PFS image.

  • --install-pkg <pkg> CLI flag — parses a .pkg, detects encryption, extracts the body.pfs image
  • Pre-decrypted PKGs extract without keys
  • Encrypted PKGs report "requires user-supplied keys.bin" (same legal stance as the PUP parser — the emulator never provides keys)
  • Wired into the PFS parser for full filesystem extraction

Honest part: the parser has not been validated against a real .pkg file yet. The container parsing is based on publicly documented specifications (PSDevWiki), same clean-room approach as the PUP parser. Decryption of encrypted commercial PKGs requires user-supplied keys.bin; pre-decrypted PKGs (user legally decrypted via their own console) extract without keys.

Full PFS Filesystem Parser (New)
v2.8 adds a complete PFS (PlayStation File System) parser that walks the filesystem inside extracted PKG/PUP bodies. This is substantially deeper than the v2.7 PUP parser — it doesn't just parse a container, it enumerates a full filesystem.

The parser handles:

  • PFS superblock parsing (magic 20130315, version detection for PS4 vs PS5)
  • Full inode support — D32 (32-bit, PS4), S32 and S64 (64-bit, PS4/PS5), with auto-detection from version + mode flags
  • Directory enumeration — reads directory entries, resolves file names, handles nested directories
  • Indirect block traversal — files larger than 12 blocks (~768KB+ at 64KB block size) follow indirect block chains (ib[0-4]) for both 32-bit and 64-bit block pointers
  • AES-XTS decryption — full self-contained AES-128 inverse cipher (InvSubBytes, InvShiftRows, InvMixColumns) with XTS tweak computation via GF(2^128) multiplication. Encrypted PFS images decrypt with user-supplied EKPFS keys
  • PFSC decompression — zlib is now linked to the firmware library; PFSC-compressed blocks decompress via zlib::uncompress()

Honest part: the AES-XTS decryption hasn't been tested against a real encrypted PFS image (no EKPFS keys to validate with). PFSC's offset-table parsing is simplified — it does direct zlib decompression rather than walking the full offset table. The plaintext/uncompressed case (superblock → inode → directory → file extraction) is complete; encrypted + compressed cases are structurally complete but runtime-unvalidated.

Launcher GUI Install Buttons (New)
v2.8 adds two buttons to the launcher dialog so users no longer need the command line to install firmware or packages:

  • Install Firmware (.pup) — opens a file dialog filtered for .pup files, launches the emulator with --install-firmware
  • Install Package (.pkg) — opens a file dialog filtered for .pkg files, launches the emulator with --install-pkg

Both use a shared RunInstall helper that handles cross-platform launching (Windows: cmd + new console; Linux: bash script + terminal). This reuses the existing CreateBashScript/FindTerminal pattern from RunInterpreter, so it works the same way the game launch already works.

Help test
This project's bottleneck is validation, not implementation. If you have a PS5 and can run a game, or a PS4 and can dump a game:

All specs welcome — dGPU or iGPU. Reports are reviewed and added to COMPATIBILITY.md.

This is experimental software. "Boots to menu" is not "playable." You must legally obtain any game content you use with it.