花了好多时间才找到的将smp格式转成mp3格式的代码,线上网站转都失败了,也找了些exe程序转出来也播放不了,估计是密钥不对。
操作步骤:
- 将下面的python代码保存成smptmp3.py文件,修改里面的密钥为你的smp文件的密钥(看第2步),修改smp文件目录,打开电脑的命令行工具,执行python3 smptmp3.py命令,等着就好了,会在smp文件目录的同级有一个新的解密目录,里面就是转好的mp3文件。
import os
import re
def clean_filename(filename):
# 替换文件名中的非法字符
filename = re.sub(r'[<>:"/\\|?*]', '_', filename) # 替换Windows系统中的非法字符
return filename
def xor_decrypt(data, key):
key_length = len(key)
decrypted_data = bytearray()
for i in range(0, len(data), key_length):
data_segment = data[i:i+key_length]
if len(data_segment) == key_length:
for j in range(key_length):
decrypted_data.append(data_segment[j] ^ key[j])
else:
for j in range(len(data_segment)):
decrypted_data.append(data_segment[j] ^ key[j])
for j in range(key_length - len(data_segment)):
decrypted_data.append(key[j] ^ 0) # 使用 0 作为填充
return decrypted_data
def decrypt_file(input_filename, output_filename, key):
print(f"Attempting to decrypt {input_filename} to {output_filename}")
if not os.path.exists(os.path.dirname(output_filename)):
print(f"Creating directory {os.path.dirname(output_filename)}")
os.makedirs(os.path.dirname(output_filename))
with open(input_filename, 'rb') as infile, open(output_filename, 'wb') as outfile:
data = infile.read()
decrypted_data = xor_decrypt(data, key)
outfile.write(decrypted_data)
print(f'Decrypted {input_filename} to {output_filename}')
def decrypt_files_in_directory(src_dir, dest_dir, key):
if not os.path.exists(dest_dir):
os.makedirs(dest_dir)
for root, dirs, files in os.walk(src_dir):
for file in files:
if file.endswith('.smp'):
src_file_path = os.path.join(root, file)
relative_path = os.path.relpath(src_file_path, src_dir)
dest_file_path = os.path.join(dest_dir, relative_path).replace('.smp', '.mp3')
# 清理文件名
dest_file_name = clean_filename(os.path.basename(dest_file_path))
dest_file_path = os.path.join(dest_dir, os.path.dirname(relative_path), dest_file_name)
print(f"Processing file {src_file_path} to {dest_file_path}")
decrypt_file(src_file_path, dest_file_path, key)
# 需要修改的密钥
key = [0x14, 0x13, 0x12, 0x11]
# 源目录和目标目录
src_dir = "/d/Downloads/俱乐部" # 替换为你的父文件夹路径
dest_dir_suffix = '-解密'
dest_dir = src_dir + dest_dir_suffix # 新文件夹的路径
# 开始解密
decrypt_files_in_directory(src_dir, dest_dir, key)
2.如何获取smp文件的密钥
windows电脑的话就用WinHex程序打开,Mac电脑可以在Appstore下载Hex Fiend,读取smp文件的16进制数据
图中是Hex Fiend打开看到的数据,密钥就是前面重复的部分 0x14 0x13 0x12 0x11 就是密钥