targets = { (0x00091F53, 0x68FBA45D): None, (0x00000C0E, 0x3E98F88A): None, (0x0001A660, 0x04B58623): b'NOCHEAT', (0x000066DB, 0xA208CA35): b'CHEATOFF', (0x00009A12, 0xC7037294): None, (0x0006C1D2, 0xB6327AD8): None, (0x00005B9B, 0x4054633A): None, (0x00011F18, 0xBD67C5D2): None, (0x000369A7, 0x90FFC99D): None, (0x0005DFC2, 0xC3A3D0C1): None, (0x0012AEA6, 0xD6EDD572): None, (0x00007C51, 0x348501F8): None, (0x000B0354, 0x6692C49D): None, (0x000B2974, 0x030792AE): None, (0x0003D73D, 0x1645EBE3): None, (0x00174E57, 0x3432E939): None, (0x000A004D, 0x9071ECD6): None, (0x000057AA, 0x17A7A13A): None, (0x00003E9B, 0xC9DF00BF): None, (0x000081FC, 0x15293D85): None, (0x0003BDE6, 0xAD523686): None, (0x0000CF49, 0x6BA41039): None, (0x00006C6F, 0x4CB9D0FE): None, (0x0011D757, 0xD026D5C2): None, (0x0000B94C, 0x4C37F1FC): None, (0x0000899C, 0xDAEA8887): None, (0x000067F7, 0x5D5E8746): None, (0x000192C7, 0x23FCE135): None, (0x0000009A, 0x00033E70): None, (0x000002CE, 0x00346D5B): None, (0x00000148, 0x00033F84): None, } lookup = { ((ord(c) - 0x40) % 6, (ord(c) - 0x40) % 7): c for c in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' } lookup |= { ((ord(c) - 0x15) % 6, (ord(c) - 0x15) % 7): c for c in '0123456789' } if (0, 0) in lookup: print('Note: Name may end with', lookup[(0,0)]) print() for x, z in targets.keys(): # undo final multiplication by (x * 2 + 1) modinv = pow((x * 2 + 1), -1, 2**32) z = (modinv * z) & 0xFFFFFFFF # iVar6 # perform digit expansion for base 6 and 7 x_digits = [] while x > 0: x_digits.append(x % 6) x //= 6 z_digits = [] while z > 0: z_digits.append(z % 7) z //= 7 # pad to same length while len(x_digits) > len(z_digits): z_digits.append(0) while len(x_digits) < len(z_digits): x_digits.append(0) print(' + '.join(f'(6**{i})*{c}' for i, c in enumerate(x_digits))) print(' + '.join(f'(7**{i})*{c}' for i, c in enumerate(z_digits))) decoded = '' for a, b in zip(x_digits, z_digits): decoded += lookup.get((a, b), '?') print('=>', decoded) print()