Rewriting PS4 application dumper from scratch in C++. This repo will be deleted when a permanent repo is setup. Don't bother cloning unless you're going to be making immediate changes.
No code here is finished or guaranteed to work. Goal is for readability first to allow easier collaboration until everything is working 100%, don't want to optimize it too early:
- Get it all working. For the first draft we will assume the asset is completely installed and is currently running on the system.
- Refactor to make more sense.
- More robust. Find/fix edge cases and have good, descriptive, error messages for issues that cannot be handled automatically.
- Setup tests so we don't break anything trying to enhance performance.
- Performance.
"Move fast break things"
ANYONE can contribute. Code is currently licensed under GPLv3, by submitting a pull request you agree to this term and agree to possible relicensing later.
- sc0 entry decryption (Like
npbind.dat
)* - "New" binary decryption function crashes*
- Games that have multiple supported languages or multiple discs may not "install" all the files and the dumper will hang trying to copy it
- Can also apparently happen if the disc is dirty and not installing correctly when you start the dump
- Current workaround is to make sure you have all the languages and all the discs completely installed prior to dumping
- Thoughts: Is there a PFS flag that mark these files? Or is there some other way to detect "optional" files?
* These currently have work arounds in the dumper built into the homebrew store
- Fix known issues listed above
- NpBind
- Implementation
- Tests
- SFO
- Implementation
- Tests
- GP4
- Implementation
- Basic GP4 Generation
- PlayGo Related Issues (Want to match retail PKG settings)
- PFS Compress Option (Want to match retail PKG settings)
- Tests
- Implementation
- PKG
- Implementation
- Basic
- Decrypt encrypted Sc0 entries
-
is_pkg
andis_fpkg
functions
- Tests
- Implementation
- PFS
- Implementation
- Tests
- Decrypt SELF
- Implementation
- Tests
- FSELF
- Implementation
- Zero'd ELF header(?)
- Tests
- Implementation
- RIF (For Additional Content w/o Data & Entitlement Keys)
- Implementation
- Tests
- Dump
- Base
- Patch
- Additional Content w/ Data
- Theme
- Retail Theme + Theme "Unlock"
- Remaster
- Build a script to diff the actual files with the original content PC side to make a patch PKG vs a Remaster (?)
- Additional Content w/o Data
- Multi-Disc (Does it just work without changes?)
- Verification
- Save encrypted/modified files for backup/preservation purposes
- Encrypted Binary (FILENAME.EXT.encrypted)
- Decrypted Binary (FILENAME.EXT)
- FSELF (FILENAME.fself)
- Encrypted sc0 entries (FILENAME.EXT.encrypted)
- Decrypted sc0 entries (FILENAME.EXT)
- Check decrypted binaries vs hash in encrypted header
- SFV-like file to compare vs known good rips
- External service to verify/submit rip data
- Optional submission to database
- No actual data downloaded/uploaded, only metadata
- Save encrypted/modified files for backup/preservation purposes
- Remove extra/unnecessary checks
- ex. Calling
std::filesystem::is_regular_file
andelf::is_self
together. Becauseelf::is_self
callsstd::filesystem::is_regular_file
on the input itself
- ex. Calling
- Split into self contained, read/write, individual libraries to be used in other applications
- UI integration
- Dump via dump options in main menu
- Progress shown within notifications
- Errors via error dialog