WipEout Pure DLC Region Converter

2021-01-01

Next post: Bytes vs unicode codepoint handling in Python 3

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 keys for UCES00001DCLASSICMPAK1, UCES00001DURBANBENELUX, UCES00001DURBANFRANCE, UCES00001DURBANGERMANY, UCES00001DURBANITALY, UCES00001DURBANSPAIN and UCES00001DURBANUK.

Update 2021-05-30: Another version has been tagged, which adds support for the final missing EU DLC, "Exit 15" (UCES00001DMSCSLOT1).


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 different checksums:

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

Regional Incompatibilities

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:

thp/wipeout-pure-dlc2dlc

Local mirror with C source, 32- and 64-bit builds (updated build with 8-round XTEA implementation):

wipeout-pure-dlc2dlc-2021-05-30.zip


Continue reading: Bytes vs unicode codepoint handling in Python 3
Thomas Perl · 2021-01-01