Ultima attività 1 month ago

Pump It Up Fiesta 2 Save Decrypter/Encrypter

Lucas Teske ha revisionato questo gist 12 years ago. Vai alla revisione

1 file changed, 1 insertion, 1 deletion

offsets.txt

@@ -52,7 +52,7 @@ songID # 0x00 0x04 LE hex
52 52 difficulty # 0x04 0x01 byte
53 53 mode # 0x05 0x01 byte
54 54 grade # 0x06 0x01 byte
55 - clearAndUnlockedState # 0x07 0x01 byte
55 + clearAndUnlockedState # 0x07 0x01 byte # Do an |= 0x40 to unlock
56 56 scoreTotal # 0x08 0x04 LE int
57 57 playCountTotal # 0x0C 0x04 LE int
58 58 nullPadding # 0x10 0x04 LE int

Lucas Teske ha revisionato questo gist 12 years ago. Vai alla revisione

1 file changed, 59 insertions

offsets.txt(file creato)

@@ -0,0 +1,59 @@
1 + #Name # offset length datatype
2 + adler32 # 0x00 0x04 LE int
3 + adlerSeed # 0x04 0x04 LE int
4 + playerID # 0x08 0x08 string (null term)
5 + region # 0x14 0x04 LE int
6 + avatarID # 0x18 0x04 LE int
7 + level # 0x1C 0x04 LE int
8 + totalCalories # 0x20 0x04 LE float
9 + totalV02 # 0x24 0x04 LE float
10 + numberRunningSteps # 0x28 0x08 LE int64
11 + numberGamesPlayed # 0x30 0x08 LE int64
12 + exp # 0x38 0x08 LE int64
13 + arcadeScore # 0x40 0x08 LE int64
14 + numberMissionsCompleted # 0x48 0x04 LE int
15 + numberCoopMissionsCompleted # 0x4C 0x04 LE int
16 + battleCountWins # 0x50 0x04 LE int
17 + battleCountLoses # 0x54 0x04 LE int
18 + battleCountDraws # 0x58 0x04 LE int
19 +
20 + versionString # 0x120 0x08 string (null term)
21 + cpuString # 0x128 0x80 string (null term)
22 + motherboardString # 0x1A8 0x80 string (null term)
23 + gfxcardString # 0x228 0x80 string (null term)
24 + hddString # 0x2A8 0x20 string (null term)
25 + totalRamBytes # 0x2C8 0x04 LE int
26 + haspkeyID # 0x2CC 0x04 LE int
27 + machineStatsBeginnerModePlayCount # 0x2D0 0x04 LE int
28 + machineStatsManiacModePlayCount # 0x2D4 0x04 LE int
29 + machineStatsUnknown # 0x2D8 0x04 LE int
30 + machineStatsUnknown2 # 0x2DC 0x04 LE int
31 + machineStatsBattleModePlayCount # 0x2E0 0x04 LE int
32 + machineStatsMissionZonePlayCount # 0x2E4 0x04 LE int
33 + machineStatsSkillZonePlayCount # 0x2E8 0x04 LE int
34 + machineStatsCoopMissionPlayCount # 0x2EC 0x04 LE int
35 +
36 +
37 + # Machine HighScore Struct (The array starts at 0x2F0)
38 + songID # 0x00 0x04 LE hex
39 + difficulty # 0x04 0x01 byte
40 + mode # 0x05 0x01 byte
41 + grade # 0x06 0x01 byte
42 + clearState # 0x07 0x01 byte
43 + scoreTotal # 0x08 0x04 LE int
44 + playCountTotal # 0x0C 0x04 LE int
45 + unknown # 0x10 0x04 LE int
46 + playerID # 0x14 0x08 string (null term)
47 + unknown2 # 0x1C 0x04 LE int
48 + nullPadding # 0x20 0x04 LE int
49 +
50 + # Personal HighScore Struct (The array starts at 0x25970)
51 + songID # 0x00 0x04 LE hex
52 + difficulty # 0x04 0x01 byte
53 + mode # 0x05 0x01 byte
54 + grade # 0x06 0x01 byte
55 + clearAndUnlockedState # 0x07 0x01 byte
56 + scoreTotal # 0x08 0x04 LE int
57 + playCountTotal # 0x0C 0x04 LE int
58 + nullPadding # 0x10 0x04 LE int
59 +

Lucas Teske ha revisionato questo gist 12 years ago. Vai alla revisione

1 file changed, 46 insertions

tool.py(file creato)

@@ -0,0 +1,46 @@
1 + import struct
2 + import zlib
3 +
4 + def decryptprofile(savedata,rankdata):
5 +
6 + seed = 0xEBADA1
7 + for i in range(0,len(savedata)):
8 + smbuff = savedata[i]
9 + savedata[i] ^= (seed >> 8) & 0xFF
10 + seed = (0x68993 * (smbuff + seed) + 0x4FDCF) & 0xFFFFFFFF
11 +
12 + seed = 0xEBADA1
13 + for i in range(0,len(rankdata)):
14 + smbuff = rankdata[i]
15 + rankdata[i] ^= (seed >> 8) & 0xFF
16 + seed = (0x68993 * (smbuff + seed) + 0x4FDCF) & 0xFFFFFFFF
17 +
18 + return savedata,rankdata
19 +
20 + def encryptprofile(savedata,rankdata):
21 + adlerseed = struct.unpack("<I",savedata[4:8])
22 + newsaveadler = zlib.adler32(savedata[4:],adlerseed[0]) & 0xFFFFFFFF
23 + newrankadler = zlib.adler32(rankdata[4:],adlerseed[0]) & 0xFFFFFFFF
24 +
25 + #savedata[0:4] = struct.pack("<I",newsaveadler)
26 + #rankdata[0:4] = struct.pack("<I",newrankadler)
27 + savedata = struct.pack("<I",newsaveadler) + savedata[4:]
28 + rankdata = struct.pack("<I",newrankadler) + rankdata[4:]
29 +
30 + savedata = bytearray(savedata)
31 + rankdata = bytearray(rankdata)
32 +
33 + seed = 0xEBADA1
34 + for i in range(0,len(savedata)):
35 + smbuff = savedata[i] ^ (seed >> 8) & 0xFF
36 + savedata[i] = smbuff
37 + seed = (0x68993 * (smbuff + seed) + 0x4FDCF) & 0xFFFFFFFF
38 +
39 + seed = 0xEBADA1
40 +
41 + for i in range(0,len(rankdata)):
42 + smbuff = rankdata[i] ^ (seed >> 8) & 0xFF
43 + rankdata[i] = smbuff
44 + seed = (0x68993 * (smbuff + seed) + 0x4FDCF) & 0xFFFFFFFF
45 +
46 + return savedata,rankdata
Più nuovi Più vecchi