FamousWriter(fwd)文件解析:字节数组转字符串遇密钥错误求助
解决FamousWriter(fwd)文件解析中的XOR密钥错误与字节转字符串问题
我正在解析FamousWriter(fwd)文件结构,目前完成了一半工作,使用WEB IDE处理,需要将找到的字节数组转换为字符串显示。原本计划通过process和encoding实现,但遇到了未知密钥错误。
示例数据
原始字节序列:
10 00 3F 79 7D 77 3F 67 79 7E 74 7F 67 24 3E 7A 60 77
对应的原始ASCII字符串:
?y}w?gy~tg$>z`w
已知第一个字节10是加密密钥,处理后得到正确字节序列:
00 10 2F 69 6D 67 2F 77 69 6E 64 6F 77 34 2E 6A 70 67
转换后的目标字符串:
/img/window4.jpg
当前使用的代码
- id: firstfile type: file_name repeat: expr repeat-expr: 1
file_name: seq: - id: sizedecoder type: u2 - id: data size: sizedecoder process: xor(sizedecoder) #type: str #encoding: SJIS
问题分析与解决办法
- 密钥错误原因:代码中使用
xor(sizedecoder),但sizedecoder是u2类型(2字节),而实际加密密钥是单字节10,类型不匹配导致了未知密钥错误。 - 修正步骤:
- 确保XOR使用的是单字节密钥,而非双字节的长度值
- 恢复
type: str和encoding: SJIS配置,让处理后的字节直接转换为字符串
修正后的参考代码(场景1:密钥单独为单字节字段)
- id: firstfile type: file_name repeat: expr repeat-expr: 1
file_name: seq: - id: key type: u1 # 单独读取单字节密钥 - id: sizedecoder type: u1 # 根据实际长度字段类型调整,示例中长度为2字节的话保留u2 - id: data size: sizedecoder process: xor(key) # 使用单字节密钥做XOR解密 type: str encoding: SJIS
修正后的参考代码(场景2:密钥是长度字段的第一个字节)
如果示例中的10 00是长度值(u2类型),且密钥是该字段的第一个字节,可通过位运算提取密钥:
file_name: seq: - id: sizedecoder type: u2 - id: data size: sizedecoder process: xor(sizedecoder & 0xFF) # 取长度字段的低字节作为密钥(小端字节序) # 若为大端字节序,改用 xor(sizedecoder >> 8) 取高字节 type: str encoding: SJIS
内容的提问来源于stack exchange,提问作者Makekko
相关产品推荐
相关产品推荐

