# -*- coding: utf-8 -*- """ Created on Sun Jul 15 01:05:58 2018 @author: Nzix """ import binascii, struct import base64, json import os, traceback from Crypto.Cipher import AES from Crypto.Util.strxor import strxor as XOR from mutagen import mp3, flac, id3 def dump(input_path, output_path = None, skip = True): output_path = (lambda path, meta: os.path.splitext(path)[0] + '.' + meta['format']) if not output_path else output_path output_path = (lambda path, meta: path) if not callable(output_path) else output_path core_key = binascii.a2b_hex('687A4852416D736F356B496E62617857') meta_key = binascii.a2b_hex('2331346C6A6B5F215C5D2630553C2728') unpad = lambda s : s[0:-(s[-1] if type(s[-1]) == int else ord(s[-1]))] f = open(input_path, 'rb') # magic header header = f.read(8) assert binascii.b2a_hex(header) == b'4354454e4644414d' # key data f.seek(2, 1) key_length = f.read(4) key_length = struct.unpack(' 1024 ** 2 * 16 else 'mp3'} # crc32 crc32 = f.read(4) crc32 = struct.unpack(' 1: files = sys.argv[1:] else: files = [name for name in os.listdir('.') if os.path.splitext(name)[-1] == '.ncm'] if sys.version[0] == '2': files = [path.decode(sys.stdin.encoding) for path in files] if not files: print('please input file path!') for path in files: try: dump(path) print(os.path.split(path)[-1]) except Exception as e: print(traceback.format_exc()) pass