-
-
Save bbayles/309453756412cd18bada60362bae0a65 to your computer and use it in GitHub Desktop.
Battlesport cheat names
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from concurrent.futures import ProcessPoolExecutor | |
| from itertools import product | |
| from string import ascii_uppercase | |
| targets = { | |
| (0x00091F53, 0x68FBA45D): None, | |
| (0x00000C0E, 0x3E98F88A): None, | |
| (0x0001A660, 0x04B58623): None, # NOCHEAT | |
| (0x000066DB, 0xA208CA35): None, # 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, | |
| } | |
| def calculate_hash(name): | |
| ivar6 = 0 | |
| x = 0 | |
| multiplier_7 = 1 # iVar5 | |
| multiplier_6 = 1 # iVar4 | |
| for char_val in name.encode(): | |
| adjusted_val = char_val - 0x15 if char_val <= 0x40 else char_val - 0x40 | |
| ivar7 = (adjusted_val % 7) * multiplier_7 | |
| x = (x + (adjusted_val % 6) * multiplier_6) & 0xFFFFFFFF | |
| multiplier_6 = (multiplier_6 * 6) & 0xFFFFFFFF | |
| multiplier_7 = (multiplier_7 * 7) & 0xFFFFFFFF | |
| ivar6 = (ivar6 + ivar7) & 0xFFFFFFFF | |
| z = (ivar6 * ((x * 2 + 1) & 0xFFFFFFFF)) & 0xFFFFFFFF | |
| y = (x | ((1 & 0xFFFFFFFF) << 0x1A)) & 0xFFFFFFFF | |
| x = (x | ((0 & 0xFFFFFFFF) << 0x1A)) & 0xFFFFFFFF | |
| return x, y, z | |
| def worker(prefix): | |
| seen = set() | |
| print(f"Starting {prefix}") | |
| for r in range(1, 8 + 1): | |
| for prod in product(ascii_uppercase, repeat=r): | |
| name_buffer = prefix + "".join(prod) | |
| x, y, z = calculate_hash(name_buffer) | |
| for pair in ((x, z), (y, z)): | |
| if (pair in targets) and (pair not in seen): | |
| seen.add(pair) | |
| print( | |
| format(pair[0], "08x"), | |
| format(pair[1], "08x"), | |
| name_buffer, | |
| sep="\t", | |
| ) | |
| def serial(): | |
| for r in range(1, 8 + 1): | |
| print(r) | |
| for prod in product(ascii_uppercase, repeat=r): | |
| name_buffer = "".join(prod) | |
| x, y, z = calculate_hash(name_buffer) | |
| for pair in ((x, z), (y, z)): | |
| if (pair in targets) and (targets[pair] is None): | |
| targets[pair] = name_buffer | |
| print( | |
| format(pair[0], "08x"), | |
| format(pair[1], "08x"), | |
| name_buffer, | |
| sep="\t", | |
| ) | |
| if __name__ == "__main__": | |
| with ProcessPoolExecutor(max_workers=8) as executor: | |
| for prefix in ascii_uppercase: | |
| executor.submit(worker, prefix) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment