moved struct.pack to struct.unpack
This commit is contained in:
parent
f525568502
commit
aa1a19d675
@ -8,9 +8,10 @@ import struct
|
|||||||
|
|
||||||
class OFFSETS:
|
class OFFSETS:
|
||||||
VERSION = 0x42e
|
VERSION = 0x42e
|
||||||
KEYS_LABEL = 0x12DB
|
KEYS_LABEL = 0x12DB # These are not static
|
||||||
KEYS_VALUE = 0x12F9
|
KEYS_VALUE = 0x12F9 # These are not static
|
||||||
ACCOUNT_LEVEL = 0x12AD
|
ACCOUNT_LEVEL = 0x12AD # These are not static
|
||||||
|
START_OF_OPTIONS = 0x42a # This appears to be static across multiple saves
|
||||||
|
|
||||||
|
|
||||||
def _bytes_to_string(bytes):
|
def _bytes_to_string(bytes):
|
||||||
@ -36,8 +37,10 @@ def get_key_value(save):
|
|||||||
|
|
||||||
def verify_save(save):
|
def verify_save(save):
|
||||||
try:
|
try:
|
||||||
struct.pack("bbbb", *save[:4]) == b"GVAS"
|
struct.unpack("<sssss", save[:5]) == "GVAS"
|
||||||
token = _bytes_to_string(read_token_at_offset(save, OFFSETS.VERSION))
|
size = read_int_at_offset(save, OFFSETS.START_OF_OPTIONS)
|
||||||
|
token = read_token_at_offset(save, OFFSETS.START_OF_OPTIONS + 4, size)
|
||||||
|
print(size)
|
||||||
if token == "CrabChampionsVersion":
|
if token == "CrabChampionsVersion":
|
||||||
return True
|
return True
|
||||||
except struct.error as e:
|
except struct.error as e:
|
||||||
@ -45,12 +48,18 @@ def verify_save(save):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def read_int_at_offset(save, offset):
|
||||||
|
try:
|
||||||
|
data = struct.unpack("<i", save[offset:offset + 4])
|
||||||
|
return data[0]
|
||||||
|
except struct.error:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def read_token_at_offset(save, offset, size=1):
|
def read_token_at_offset(save, offset, size=1):
|
||||||
try:
|
try:
|
||||||
data = struct.pack("b" * size, *save[offset: offset + size])
|
data = struct.unpack("s" * size, save[offset: offset + size])
|
||||||
if data[-1] != 0x00:
|
return "".join([c.decode() for c in data[:-1]])
|
||||||
data = read_token_at_offset(save, offset, size + 1)
|
|
||||||
return data
|
|
||||||
except struct.error:
|
except struct.error:
|
||||||
print("Failed to find NULL byte in token, probs not a token")
|
print("Failed to find NULL byte in token, probs not a token")
|
||||||
return None
|
return None
|
||||||
@ -68,6 +77,6 @@ else:
|
|||||||
# Should be fine to do shit here
|
# Should be fine to do shit here
|
||||||
# print(read_token_at_offset(save, 0x12DB)) # Keys
|
# print(read_token_at_offset(save, 0x12DB)) # Keys
|
||||||
# print(read_token_at_offset(save, 0x12AD)) # AccountLevel
|
# print(read_token_at_offset(save, 0x12AD)) # AccountLevel
|
||||||
token = read_token_at_offset(save, OFFSETS.KEYS_LABEL)
|
token = read_token_at_offset(save, OFFSETS.KEYS_LABEL, 5)
|
||||||
# print(_bytes_to_string(token))
|
# print(_bytes_to_string(token))
|
||||||
print(f"You have {int.from_bytes(get_key_value(save))} keys")
|
print(f"You have {int.from_bytes(get_key_value(save))} keys")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user