You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

问题分析与解决办法

  1. 密钥错误原因:代码中使用xor(sizedecoder),但sizedecoder是u2类型(2字节),而实际加密密钥是单字节10,类型不匹配导致了未知密钥错误。
  2. 修正步骤:
    • 确保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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:45:56