WipEout Pure DLC Region Converter
Update 2021-01-02: Fixed a bug that caused invalid conversion results, if you used version 2021-01-01, please upgrade to the new version 2021-01-02 (download link below and on Github).
Update 2021-01-31: A pre-converted set of ships (including the "Stealth" ship from the UMD movie demo) is available over at the WipEoutZone forums: 7 converted out-of-region ships for Wipeout Pure EUR
Local mirror: 2021-01-11-Pure-JPN-USA-Stealth-Ships-for-EUR.zip
Update 2021-05-29: A new version has been tagged with new
Update 2021-05-30: Another version has been tagged, which
adds support for the final missing EU DLC, "Exit 15"
WipEout Pure was probably one of the first games on consoles where Downloadable Content was a thing. Back in 2005 when the game was released, DLC was free and released over the Internet.
For various reasons, the DLCs have so far been region-specific, which means you can't use DLC released in Japan on the European release of the game. There's some interesting content such as the Cokestyle ship that is only available in Japan, and Europe has tracks such as Burgertown, which is not available in any other regions.
This release is for educational purposes only, you have to have the DLC files you want to convert on your PSP. The game itself is more than 15 years old and has been delisted from PSN last year.
Signed and Encrypted WAD Files
A WipEout Pure DLC is basically a specially-crafted PSP savegame
with a file called
PI.WAD that contains the DLC. This file has
a region-specific 256-byte signature at the end (which contains
among other things some checksums of the file and the encryption
key). The rest of the file is a basic WAD file (see the previous
posts about the WAD file format and the
filenames in WAD files) that is encrypted.
This has nothing to do with PSP-specific savegame encryption, it's a game-specific encryption and signing process.
Re-Encrypting Files for Different Regions
The way the converter works is by "borrowing" the 256-byte
signature from an existing DLC
PI.WAD file (and knowing its
encryption key) so that the target-region game can verify the
signature and decrypt the WAD data using the right key.
In order for this to work, the payload data of the WAD (all bytes of the file except the last 256 bytes) first needs to be decrypted with the original encryption key (so that it's an unencrypted WAD file) and then encrypted using the key that is found in the "borrowed" signature.
Patching Out Signature Checks
This basically leaves us with a
PI.WAD for the destination
region that can be opened. However, the signature contains 3
- A checksum for the signature content
- A checksum for the first N bytes of the payload
- A checksum for ALL bytes of the payload
If we don't modify the signature, the checksum of it will of course stay valid. However, we DO change the payload, so that the other two checksums will be wrong. In order to fix this, we can simply apply a "cheat" that makes the payload checksum checks always return "it's all good".
DLC Signature Check Removal for UCES-00001
Here's a cwcheat-style cheat code for removing the signature checks for the EUR version of the game, it can be used on a real PSP (using cwcheat) or in the PPSSPP emulator:
_S UCES-00001 _G WipeOut Pure [EU] _C1 Remove DLC Signature Check _L 0x200A6FC0 0x00000000 _L 0x200A70A0 0x00000000
DLC Signature Check Removal for UCUS-98612
If you own the US version of the game, the same mechanism can be used (again, using cwcheat on a real PSP or in PPSSPP):
_S UCUS-98612 _G Wipeout Pure [US] _C1 Remove DLC Signature Check _L 0x200A45F4 0x00000000 _L 0x200A4690 0x00000000
The EUR version of the game is the "newest" one. Because of this, the developers might have had some more time to add new features to it. One such feature seems to be that it has support for using the DEFLATE algorithm.
This means that EUR content can at the moment not be converted to JAP or USA, because those releases of the game cannot handle WAD files with DEFLATE-compressed files.
Source Code and Download
The source code and Windows builds for the converter are available from Github:
Local mirror with C source, 32- and 64-bit builds (updated build with 8-round XTEA implementation):