#!/usr/bin/env python3 # quick and dirty utility to make the binary mess, produced by my redo program # into something more friendly to the human eye # requires termcolor (pip install termcolor) import struct import sys import hashlib from binascii import hexlify from os.path import basename from termcolor import colored def convert_back(s): return s.replace('!', '/') if (len(sys.argv) < 2): print("Need an argument.") exit(1) hasher = hashlib.sha1() file = open(sys.argv[1], 'rb') magic = file.read(4) hash = file.read(20) subdeps = file.read() org_file = convert_back(basename(sys.argv[1])) hash_str = str(hexlify(hash), 'ascii') with open(org_file, 'rb') as f: buf = f.read() hasher.update(buf) print("Target: " + org_file) print("Hash: " + hash_str + " ", end="") if hasher.hexdigest() == hash_str: print(colored(u"\u2714", "green", attrs=['bold'])) else: print(colored(u"\u2718", "red", attrs=['bold'])) print("Magic number: " + str(struct.unpack('i', magic)[0])) print("Dependencies:") start = True thing = "" for byte in subdeps: if start: print(" " + chr(byte) + "-", end="") start = False elif byte == 0: start = True print(thing) thing = "" else: thing += chr(byte) continue