Skip to content

Instantly share code, notes, and snippets.

@bbayles
Last active January 19, 2025 20:29
Show Gist options
  • Select an option

  • Save bbayles/309453756412cd18bada60362bae0a65 to your computer and use it in GitHub Desktop.

Select an option

Save bbayles/309453756412cd18bada60362bae0a65 to your computer and use it in GitHub Desktop.
Battlesport cheat names
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