def __open_bin(self, bin_location): """ Opens a bin and makes it 540 bytes if it wasn't :param bin_location: file location of bin you want to open :return: opened bin """ bin_fp = open(bin_location, 'rb') bin_dump = bytes() for line in bin_fp: bin_dump += line bin_fp.close() if len(bin_dump) == 540: with open(bin_location, 'rb') as fp: dump = AmiiboDump(self.master_keys, fp.read()) return dump elif 532 <= len(bin_dump) <= 572: while len(bin_dump) < 540: bin_dump += b'\x00' if len(bin_dump) > 540: bin_dump = bin_dump[:-(len(bin_dump) - 540)] b = open(bin_location, 'wb') b.write(bin_dump) b.close() with open(bin_location, 'rb') as fp: dump = AmiiboDump(self.master_keys, fp.read()) return dump else: return None
def Decrypt(): global file fName = filedialog.askopenfilename(filetypes=(("Amiibo", "*.bin"), ("Amiibo", "*.bin"))) if fName: with open(fName, 'rb') as fp: dump = AmiiboDump(master_keys, fp.read(), is_locked=True) dump.unlock() data = dump.data data = dump_to_amiitools(data) with open(fName + "d", 'wb') as fp: fp.write(data) file = open(fName + "d", "rb+") handaleFile()
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()
from easy_nfc import nfc_parser from amiibo import AmiiboDump, AmiiboMasterKey, crypto 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)