PFU is a Python tool for extracting and analyzing PS4 firmware update files (PUPs). It provides an easy way to unpack and inspect the contents of PUP packages.
- Extracts all files and metadata from PUP archives
- Prints extensive details about the package contents, including:
- Firmware version
- Number of files contained
- Installation instructions
- File paths
- File sizes
- SHA-256 hashes
- Intuitive GUI to select PUP files to unpack
- Saves extracted files to output directory
- Actively maintained and open source
PFU requires Python 3 and the following modules:
- PyQt6
- struct
- lzma
- pycryptodome
Install dependencies with:
pip install -r requirements.txt
- Clone the GitHub repository:
git clone https://github.com/seregonwar/PFU-PupFileUnpacker.git
- Install dependencies:
pip install -r requirements.txt
- Run the script with:
python src/main.py
- Use the dialog to select a PUP file.
- The content will be extracted to your working directory.
The pup_unpacker.py
script has extensive documentation on all functions and classes. Developers can easily integrate the PUP extraction functionality into their applications.
See the wiki for more usage details.
core
: Application core and implementation of basic functions.crypto
:Crypto util for reading and extraction from LBS2 container.gui
: A graphical interface using PyQt6, it consists of only one module.utils
: Error and file upload management.main.py
: Main entry of the program.
The PUP extraction logic was adapted from ps4_dec_pup_info by SocraticBliss.
This project is licensed under the GNU License - see the LICENSE file for details.
This tool is only for educational and investigative purposes. I am not responsible for any misuse or damage caused by this tool.
The development of this software is currently at a standstill. The code is complete and partially fulfills its intended functionality, but I am seeking a way to decrypt all update files encrypted with AES-128. The PFU feature is finished, but it cannot fully and properly extract the files. If I had access to Sony’s encryption keys and integrated them into the code, the decryption process would be much simpler. I will continue to release patches to address any bugs.
The project has little likelihood of being continued, and the latest commits I have made are nothing more than minor improvements to the program because it lacked stability and, above all, had a bad structure in that it was not very modular and not much was understood about how it worked. It still remains a very good program for educational purposes, I find no other use in a program that does 30%(to be good) of what it was designed to do.