A background payload for PlayStation 5 that automatically allows system library sideloading.
Backpork monitors game launches on the PS5. When a game (PPSA/CUSA title) is launched, it automatically mounts a fakelib folder from the game's app directory over the game's library path using unionfs. This allows for library replacement/injection without modifying originals files.
Original concept and some code by idlesauce
- Game Launch Detection: When a game is launched, it retrieves the app info to get the title ID (PPSA/CUSA format)
- Sandbox Discovery: Locates the game's sandbox directory at
/mnt/sandbox/<title_id>_XXX/ - Fakelib Check: Checks if a
fakelibfolder exists in the game'sapp0directory - Union Mount: If fakelibs exist, mounts them over the game's
common/libdirectory using unionfs - Cleanup: When the game exits, unmounts the fakelibs and cleans up the sandbox directory
- PS5 Payload SDK
- A jailbroken PS5 with payload execution capability
export PS5_PAYLOAD_SDK=/path/to/sdk
make- This produces
ps5-backpork.elf
Note: To boot a game, you must downgrade its
eboot.binand everyprx/sprxusing this tool ps5_elf_sdk_downgrade.py; without this, the system will refuse to launch the title.
- Place your replacement libraries in a
fakelibfolder inside the game's installation directory (PPSSAXXXXX/fakelib/) - Run the
backpork.elfpayload on your PS5 - Launch your game - the fakelibs will be automatically mounted
- When the game closes, cleanup is performed automatically
The libraries you want to sideload must come from a firmware version compatible with the game you want to run. However, you cannot use them directly - they must be modified to remove dependencies that are not available on your current firmware, otherwise the loader will crash.
It is recommended to sideload as few libraries as possible, as there is no guarantee that there won't be side effects. Most games seem to only need the two Agc libraries, but some games like Minecraft required additional libraries.
I provide patches in the patches/ folder (BPS format) to patch libraries from firmware 10.01 and make them functional on firmware 7.61. This is probably achievable for lower firmwares as well, but it has not been tested and would require additional patches.
Warning: Patches are split by firmware. I recommend using the highest patch set that matches your firmware instead of using lower versions because I had to alter the normal behavior of some functions to make it work.
To apply a patch:
- The library to patch must be decrypted (ELF format, not SELF)
- Use an online patcher like RomPatcher.js
- Select the decrypted library as the ROM file
- Select the corresponding
.bpspatch file - Apply the patch
- Fake sign the patched library (make_fself.py)
- Use the resulting library in your
fakelibfolder
This software is provided "as is", without warranty of any kind. I do not guarantee anything and I am not responsible for any damage or issues that may occur. Use at your own risk.
This project is provided for educational and research purposes.
- idlesauce for the idea, code and support
- john-tornblom for the SDK
- EchoStretch for endlessly testing my stupid, broken patches!
- kira for helping me figure out some patches (also known as my useful notepad)
- SlimGary for being there every day, for years.
- Hakim for the love of pork 🐷😍