Files
bof3-checksum/detect_armarios.py
2026-01-27 17:35:30 +01:00

86 lines
2.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import os
import sys
def load_saves(path):
files = sorted(os.listdir(path))
saves = []
size = None
for f in files:
full = os.path.join(path, f)
if not os.path.isfile(full):
continue
with open(full, "rb") as fh:
data = fh.read()
if size is None:
size = len(data)
elif len(data) != size:
print("Tamaños inconsistentes, abortando.")
sys.exit(1)
saves.append(data)
print(f"Cargados {len(saves)} saves de {size} bytes.")
return saves, size
def is_one_way_flag(seq):
"""Devuelve True si el valor nunca vuelve a 0 después de ser 1."""
seen_one = False
for v in seq:
if v == 1:
seen_one = True
if seen_one and v == 0:
return False
return True
def main():
if len(sys.argv) != 2:
print("Uso: python3 detect_armarios.py <directorio>")
sys.exit(1)
saves, size = load_saves(sys.argv[1])
num_saves = len(saves)
# Transponer: valores por offset
flags = [] # lista de (offset, seq)
for off in range(size):
seq = [s[off] for s in saves]
values = set(seq)
# Solo nos interesan offsets con valores 0/1
if values.issubset({0, 1}) and len(values) > 1:
if is_one_way_flag(seq):
flags.append(off)
print(f"\nEncontrados {len(flags)} offsets que parecen flags de armarios.\n")
# Agrupar offsets contiguos
if not flags:
return
blocks = []
start = flags[0]
prev = flags[0]
for off in flags[1:]:
if off == prev + 1:
prev = off
else:
blocks.append((start, prev))
start = off
prev = off
blocks.append((start, prev))
print("Bloques sospechosos:")
for a, b in blocks:
count = b - a + 1
print(f" 0x{a:05X} 0x{b:05X} ({count} bytes)")
print("\nSi ves un bloque de ~80 bytes, probablemente son los armarios.")
if __name__ == "__main__":
main()