from binascii import unhexlify import sys import glob import pickle def find_seed(hash_buffer_map, value, offset): base_offset = 0x1c00-28 matchedKey = None for d in hash_buffer_map: if hash_buffer_map[d][base_offset+offset:].startswith(value): matchedKey = d break return matchedKey def find_in_file(filePath, value, offset): # print('searching %s' % filePath) with open(filePath,"rb") as f: hash_buffer_map = pickle.load(f) result = find_seed(hash_buffer_map, value, offset) return result def find(salt,value,offset): result = None pickleFileList = glob.glob('%s/*.pickle'%salt) for pickleFile in pickleFileList: result = find_in_file(pickleFile, value, offset) if result != None: break return result def main(): salt = sys.argv[1] value = sys.argv[2] offset = int(sys.argv[3], 16) value = sys.argv[2] value = unhexlify(value.encode()) if len(sys.argv) == 4: result = find(salt,value,offset) elif len(sys.argv) > 4: filePath = sys.argv[4] result = find_in_file(filePath, value, offset) # result = find(salt,value,offset) print("result: %s" % result) if __name__ == '__main__': main()