def make_new_amiibo(unfixed_info, locked_key, amiibo_data, uid): try: master_keys = AmiiboMasterKey.from_separate_bin( unfixed_info.read(), locked_key.read()) except ValueError as e: print_error("Invalid keys: " + str(e)) sys.exit(EXIT_FAILURE) try: amiibo = AmiiboDump(master_keys, amiibo_data) amiibo.unlock() except (AmiiboHMACError, AmiiboHMACTagError, AmiiboDumpSizeError): print_error("This amiibo is invalid or corrupt") sys.exit(EXIT_FAILURE) amiibo.uid_hex = uid_to_hex_format(uid) amiibo.lock() amiibo.unset_lock_bytes() return amiibo
def Encrypt(): global file fName = filedialog.asksaveasfilename(filetypes=(("Amiibo", "*.bin"), ("Amiibo", "*.bin"))) if fName: SaveCmd() curentfile = file.name file.close() with open(curentfile, 'rb') as fp: data = fp.read() data = amiitools_to_dump(data) dump = AmiiboDump(master_keys, data, is_locked=False) dump.lock() dump.unset_lock_bytes() with open(fName, 'wb') as fp: fp.write(dump.data) file = open(curentfile, "rb+") handaleFile()
lock_data = [ #page, #byteoffset, #bytedata ('82h', 3, [0x01, 0x00, 0x0F, 0xBD]), #dynamic lockpages ('02h', 2, [0x0F, 0x48, 0x0F, 0xE0]), #static lockpages ] ni = nfc_parser() with open('unfixed-info.bin', 'rb') as fp_d, open('locked-secret.bin', 'rb') as fp_t: master_keys = AmiiboMasterKey.from_separate_bin(fp_d.read(), fp_t.read()) with open('orig.bin', 'rb') as fp: dump = AmiiboDump(master_keys, fp.read()) try: dump.unlock() except amiibo.crypto.AmiiboHMACDataError: print('AmiiboHMACDataError error thrown (corrupt bin?)') quit(1) else: print(ni) dump.uid_hex = ni.spaced_hex(ni.uid) dump.lock() dump.unset_lock_bytes() with open('dump.bin', 'wb') as fp: fp.write(dump.data) ni.commit_image(byte_override=lock_data)