Xbox 360 CON File Tool

The CON file tool updates signatures found in Xbox 360 user content files ("CON" file). CON is the format used for saved games and settings. The tool requires a valid keyvault file to work.

How to use:
Firstly a valid keyvault must be extracted. This requires decryption; there is a tool for doing this but this is not covered here.

Open X360.exe. Load the modified file you want to resign. When clicking "Sign", it will ask for the keyvault file (if kv.bin is not in the current directory). Point it to the keyvault you extracted.

It should now correctly resign the file.

How it works:
In the keyvault of every Xbox 360 is a unique CON keypair that is used for signing CON files. The public key component of this keypair is signed by Microsoft to ensure that arbitrary keypairs cannot be used.

A copy of the public key and its signature is stored in each CON file. This allows Xbox 360 consoles to verify CON files that may be signed by other Xbox 360 consoles.

Because the signing keys are per-box, individual consoles can have their keypair revoked in firmware updates.

For more information, see the source code included in the archive.

What can it do?
The tool is not very interesting from the perspective of running unsigned code or Linux. It would require an exploit that is unlikely given the architecture of the Xbox 360.

It is useful for activities such as porting saved game content from PC to Xbox.

roofus & angerwound for proving it was possible and posting on the basic outline of how it works.
Rene Ladan for package file research, including hash table research.

No Credit
superaison & haxalot88 (ie Michael Kaufman of Talent, Oregon 97540) who stole this work in order to try to live up to fantasies of messing with Xbox Live and somehow making financial gain out of it, then trying to claim it as their own work. Due to them not understanding how it actually works, yet being keen to pretend to understand it, they inadvertently gave away most of the detail to like-minded individuals. In some cases this was implementation specific and irrelevant (unbeknown to them, such as the use of a dummy value for input into the RSA library). In other cases they gave away key detail, such as the type of signature and offsets of the keys. Because I think many of the people who have it now are using it for stupid things, I'm making it public in the hope that it will be used for better things.