花了好多時(shí)間才找到的將smp格式轉(zhuǎn)成mp3格式的代碼,線上網(wǎng)站轉(zhuǎn)都失敗了,也找了些exe程序轉(zhuǎn)出來(lái)也播放不了,估計(jì)是密鑰不對(duì)。
操作步驟:
- 將下面的python代碼保存成smptmp3.py文件,修改里面的密鑰為你的smp文件的密鑰(看第2步),修改smp文件目錄,打開(kāi)電腦的命令行工具,執(zhí)行python3 smptmp3.py命令,等著就好了,會(huì)在smp文件目錄的同級(jí)有一個(gè)新的解密目錄,里面就是轉(zhuǎn)好的mp3文件。
import os
import re
def clean_filename(filename):
# 替換文件名中的非法字符
filename = re.sub(r'[<>:"/\\|?*]', '_', filename) # 替換Windows系統(tǒng)中的非法字符
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]
# 源目錄和目標(biāo)目錄
src_dir = "/d/Downloads/俱樂(lè)部" # 替換為你的父文件夾路徑
dest_dir_suffix = '-解密'
dest_dir = src_dir + dest_dir_suffix # 新文件夾的路徑
# 開(kāi)始解密
decrypt_files_in_directory(src_dir, dest_dir, key)
- 如何獲取smp文件的密鑰
windows電腦的話就用WinHex程序打開(kāi),Mac電腦可以在Appstore下載Hex Fiend,讀取smp文件的16進(jìn)制數(shù)據(jù)
圖中是Hex Fiend打開(kāi)看到的數(shù)據(jù),密鑰就是前面重復(fù)的部分 0x14 0x13 0x12 0x11 就是密鑰

Hex Fiend打開(kāi)smp文件