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

如何识别未知数据压缩格式?请求.dz文件后续分析方案

未知.dz压缩格式分析与下一步建议

当前分析现状

我正在分析Kurzweil-SP-Updater.dz二进制文件,该文件出自SP7G固件更新压缩包。文件以Dr*Z开头,数据段头部标识为zFED(或字节翻转后的DEFz),目前未找到公开的格式文档。

已尝试的分析手段:

  • 使用UNIX的file命令检测,仅识别为普通数据
  • 匹配Luigi Auriemma的Signsrch签名库,无对应匹配结果
  • 已知Quake游戏有专有.dz格式,但无法在Mac环境下运行dzip.exe做验证

已解析的数据块头部格式:

char[4]  "zFED" / "DEFz"  // 字节翻转的标识
int32    full_size        // 未压缩数据大小(小端字节序)
int32    cmpr_size        // 当前块压缩数据长度(小端字节序)
byte[]   data             // 压缩数据内容

四个数据块的十六进制起始内容如下:

EC 7D 79 5C 54 47 ...
EC BD 7B 7C 94 C5 ...
C4 BC 07 78 23 57 ...
EC BD 7B 5F 13 D9  ...

注:已获取各数据块的详细十六进制起始信息及字节直方图,其中Block 4的直方图波动明显大于其他块。

下一步分析方法

  • 拆分独立数据块测试:根据头部的cmpr_size字段,从文件中截取单个完整的压缩数据段,单独分析该块,排除多块结构的干扰。
  • 匹配常见压缩算法特征:
    • 检查LZ系列算法(LZ77/LZSS/LZ78)特征:观察数据中是否存在重复字节序列、偏移量+长度的编码结构,对比full_size与cmpr_size的比值,判断压缩率是否符合LZ类算法表现。
    • 测试DEFLATE/Zlib/Gzip兼容性:用zlib-flate -uncompress命令直接处理压缩数据段,或检查数据开头是否有Zlib特征头部(如0x7801、0x789C)。
    • 排查LZW算法:LZW通常会有初始码长标识(多为9-12位),可观察数据块开头是否存在固定小整数。
  • 深度统计分析:
    • 对比Block 4与其他块的字节分布差异,判断该块是否为未压缩数据或采用了不同压缩算法。
    • 用ent工具计算各压缩数据段的熵值,对比未压缩数据的熵值范围(随机数据熵接近8,固件/文本数据熵通常在4-7之间),缩小算法范围。
  • 逆向更新工具逻辑:获取Kurzweil SP系列的Windows版本更新工具,用Ghidra或IDA Pro分析其处理.dz文件的代码,定位解压函数的实现逻辑。
  • 暴力测试通用解压工具:
    • 尝试用7z、unzip、ar等通用工具直接解压整个.dz文件,部分私有格式可能基于通用算法封装。
    • 在Windows虚拟机中运行Quake的dzip.exe,验证是否能兼容该文件,排除格式混淆的可能。
  • 验证头部扩展字段与字节序:
    • 检查cmpr_size之后是否存在额外字段:如压缩算法ID(1-2字节)、CRC32校验和、字节序标识等,对比多个块的后续字节是否有固定规律。
    • 尝试将整个数据块字节翻转后测试常见解压算法,确认是否存在全局字节序翻转的情况。

内容的提问来源于stack exchange,提问作者aMike

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:42:39