吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 890|回复: 1
收起左侧

[Python 原创] SMP文件的异或XOR

  [复制链接]
KeKeBB0609 发表于 2024-5-29 12:28
本帖最后由 KeKeBB0609 于 2024-5-29 14:14 编辑

坛友发布了一个悬赏,需求是将SMP文件转换MP3,虽然我已给出成品但我觉得还是分享一下方法。
这里仅针对于简单的加密。
由于异或操作是可逆的,那我们可以通过使用相同的密钥来进行异或操作解密数据。
这个是文件内容
image.png
我们可以看到文件头部为CF 4C 51 8B 86 08 62 88
一般MP3格式文件的头部为49 44 33 03 00 00 00 00
看到连续的0了吧49 44 33 03 00 00 00 00
我们先来解释一下异或操作是什么
异或运算是对于二进制进行运算的所以在运算时是对二进制位进行操作
异或操作是对于两个二进制位进行对比,相同则为0,不同则为1
那么我们就得0与未知数X的二进制值对比都等于X,所以,参考正常的MP3文件的头部值有00,我们就可以得出秘钥为86 08 62 88
那么我们就可以根据得到的秘钥进行异或操作
以下是操作方法:
一、将16进制数转换成二进制数:
CF->11001111
4C->01001100
51->01010001
8B->10001011
86->10000110
08->00001000
62->01100010
88->10001000
密文十六进制:CF 4C 51 8B 86 08 62 88->密文二进制:11001111 01001100 01010001 10001011 10000110 00001000 01100010 10001000
秘钥十六进制:86 08 62 88->秘钥二进制:10000110 00001000 01100010 10001000
二:将密文二进制与秘钥二进制进行对比:
密文:CF->11001111
秘钥:86->10000110
通过对比得出
十六进制值二进制第一位第二位第三位 第四位第五位 第六位 第七位 第八位
CF 11001111
86 10000110
T/F相同不同 相同相同 不同相同相同不同
结果 0 1 0 0 1 0 0 1

完整密文:11001111 01001100 01010001 10001011 10000110 00001000 01100010 10001000
完整秘钥:10000110 00001000 01100010 10001000 10000110 00001000 01100010 10001000 根据相同则为0,不同则为1进行对比得出
得出结果:10010010 10001000 01100110 00000110 00000000 00000000 00000000 00000000
结果与常规MP3文件的头文件相同,并且49 44 33 03ASCII码为ID3是mp3文件的标识,那就表示解密成功,将秘钥86 08 62 88对文件进行异或即可得出明文文件
至此解密结束。得到的文件为
image.png
以下为Python方法

[Python] 纯文本查看 复制代码
def xor_file(input_filename, output_filename, key):  
    with open(input_filename, 'rb') as infile, open(output_filename, 'wb') as outfile:  
        key_index = 0  
        while True:  
            byte = infile.read(1)  
            if not byte:  
                break  # 如果到达文件末尾,则退出循环  
            byte = int.from_bytes(byte, byteorder='big') 
            xor_value = key[key_index]  # 获取密钥的当前字节  
            xor_result = byte ^ xor_value  # 对字节进行异或操作  
            outfile.write(xor_result.to_bytes(1, byteorder='big'))  # 将结果写回到文件  
            key_index = (key_index + 1) % len(key)  # 更新密钥索引,循环使用密钥  
  
# 使用给定的密钥  
key = [0x86, 0x08, 0x62, 0x88]  
input_filename = '01.smp'  # 输入文件名  
output_filename = '01.mp3'  # 输出文件名  
  
xor_file(input_filename, output_filename, key)

将key改为将要解密的smp文件的密匙,input_filename改为文件路径,output_filename改为要保存的文件路径即可。

免费评分

参与人数 3吾爱币 +10 热心值 +3 收起 理由
小众资源 + 1 + 1 用心讨论,共获提升!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Yifan2007 + 2 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

kwhsjf 发表于 2024-11-9 23:36
谢谢,从别的朋友那里也看到了类似的python代码
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表