Changes

Jump to navigation Jump to search
212 bytes added ,  14:54, 6 April 2024
no edit summary
Line 1: Line 1: −
packlist.dat is a file in the "Packs" folder in the TrackMania installation directory. It contains the encryption keys for the [[PAK|.pak files]] there.
+
{{DISPLAYTITLE:packlist.dat}}
 +
'''{{c|packlist.dat}}''' is a file in the "Packs" folder in the TrackMania installation directory. It contains the encryption keys for the [[PAK|.pak files]].
 +
 
 +
There is no equivalent file for ManiaPlanet.
 +
 
 +
== File structure ==
   −
==File structure==
   
* byte version (currently 1)
 
* byte version (currently 1)
 
* byte numPacks
 
* byte numPacks
Line 16: Line 20:  
The name and the key of each entry are decrypted as follows.
 
The name and the key of each entry are decrypted as follows.
    +
// md5() is a function that returns the MD5 hash of the input string
 
  nameKey = md5("6611992868945B0B59536FC3226F3FD0" + sprintf("%u", salt));
 
  nameKey = md5("6611992868945B0B59536FC3226F3FD0" + sprintf("%u", salt));
 
  for (int i = 0; i < nameLength; i++)
 
  for (int i = 0; i < nameLength; i++)
 
     name[i] = encryptedName[i] ^ nameKey[i % 16];
 
     name[i] = encryptedName[i] ^ nameKey[i % 16];
 
+
 
  keyStringKey = md5(name + sprintf("%u", salt) + "B97C1205648A66E04F86A1B5D5AF9862")
 
  keyStringKey = md5(name + sprintf("%u", salt) + "B97C1205648A66E04F86A1B5D5AF9862")
 
  for (int i = 0; i < 0x20; i++)
 
  for (int i = 0; i < 0x20; i++)
 
     keyString[i] = encryptedKeyString[i] ^ keyStringKey[i % 16];
 
     keyString[i] = encryptedKeyString[i] ^ keyStringKey[i % 16];
 +
 +
key = md5(keyString + "NadeoPak")
   −
key = md5(keyString + "NadeoPak")
+
{{c|name}} corresponds to the name of a .pak file, without the extension. {{c|key}} is the 16-byte key used during Blowfish decryption of the .pak file.
   −
"name" corresponds to the name of a .pak file, minus the extension. "key" is the 16-byte key used during Blowfish decryption of the .pak file.
+
== Signature verification ==
   −
==Signature verification==
+
{{c|packlist.dat}} has a 16-byte signature/checksum at the end for integrity checking. It is verified as follows:
packlist.dat has a 16-byte signature at the end for integrity checking. It is verified as follows:
      
  md5In = md5("E3554B5828AF14F11AA42A5EAF0AEFC8" + sprintf("%u", salt));
 
  md5In = md5("E3554B5828AF14F11AA42A5EAF0AEFC8" + sprintf("%u", salt));
Line 42: Line 48:     
The calculated signature must match the signature in the file, or TrackMania will not accept the file.
 
The calculated signature must match the signature in the file, or TrackMania will not accept the file.
 +
 +
[[Category:File formats]]
5

edits

Navigation menu