From 44d3c19733d088a2d679d461ba7d4e7f4cce9919 Mon Sep 17 00:00:00 2001 From: bunnie Date: Sat, 8 Oct 2022 02:26:00 +0800 Subject: [PATCH] fix hash check computation and op offset --- tools/backalyzer.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/backalyzer.py b/tools/backalyzer.py index b7600025b..d6265584b 100755 --- a/tools/backalyzer.py +++ b/tools/backalyzer.py @@ -186,6 +186,7 @@ def main(): i += 4 header_total_size = int.from_bytes(pt_data[i:i+4], 'little') logging.info("Header total length in bytes: {}".format(header_total_size)) + i += 4 i += 36 # reserved op = int.from_bytes(pt_data[i:i+4], 'little') logging.info("Stored Backup Opcode: {}".format(op)) @@ -194,6 +195,10 @@ def main(): if backup_version == 0x10001: logging.info("Doing hash verification of pt+ct metadata") hasher = SHA512.new(truncate="256") + check_region = bytearray(check_region) + # patch the backup opcode back to the one used to compute the checksum, because the version + # written to disk had the opcode manipulated to "2" which instructs the system to do a restore + check_region[140:144] = [0, 0, 0, 0] hasher.update(check_region) computed_checksum = hasher.digest() if computed_checksum != checksum: