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

PKZIP密钥恢复程序集成infgen解压时出现IG_CODE_LENGTHS_CODE_OVER_ERR错误排查

PKZIP密钥恢复程序错误码-4(IG_CODE_LENGTHS_CODE_OVER_ERR)排查方案

错误码含义

IG_CODE_LENGTHS_CODE_OVER_ERR(错误码-4)表示解析动态霍夫曼编码的长度表时,遇到了超出允许范围的编码值,本质是编码长度表数据不完整或解析逻辑出错。

核心排查方向

1. 输入数据长度不足

你假设块头在128字节范围内,但动态块的结构是:块头 + 编码长度表 + 压缩数据。infgen的-dd模式会读取完整的文件流,能获取到完整的编码长度表;而你只取前128字节,可能编码长度表的一部分超出了这个范围,导致解析时无法读取到完整的编码规则,触发错误。

  • 验证方式:用infgen -dd处理目标文件,查看输出中动态块的编码长度表占用的字节数,确认是否超过128字节减去块头长度的剩余空间。

2. 字节数组解析的边界/偏移错误

将infgen的文件流逻辑改为字节数组后,需确保:

  • 每次解析时,输入指针严格指向动态块的起始位置,而非字节数组的开头(如果128字节中包含了ZIP头之外的其他冗余数据);
  • 传入dynamic函数的剩余长度参数正确,应为128字节 - 块头已读取的字节数,而不是固定的128字节;
  • 没有残留的偏移量(比如之前的解析操作修改了全局偏移指针,导致本次解析从中间开始)。

3. 动态块解析的初始化逻辑不一致

检查你对infgen的修改是否完整对齐了原文件流的逻辑:

  • 是否正确设置了动态块的标志位(非最终块、动态块),原infgen可能会根据文件流中的标志自动调整解析逻辑,你硬编码假设后是否遗漏了某些判断;
  • 是否处理了动态块中可选的字段(如CRC32、压缩大小、未压缩大小),这些字段的存在会占用额外字节,导致编码长度表的起始位置偏移,若未正确计算偏移,会读错数据。

4. 字节序处理错误

ZIP格式采用小端序存储多字节字段(如块头中的长度字段),在字节数组读取时,若直接按大端序解析这些字段,会错误计算编码长度表的起始位置,导致读取到无效数据触发错误。

代码检查关键点

  • 定位IG_CODE_LENGTHS_CODE_OVER_ERR的触发位置:查看infgen源码中该错误的抛出条件,通常是在读取编码长度的霍夫曼编码时,编码对应的长度值超出了0-15的范围,此时检查当前读取的字节是否属于编码长度表的有效部分;
  • 对比文件流模式和字节数组模式的输入参数:确认传入dynamic函数的输入指针、剩余长度、块标志等参数与原infgen处理该文件时的参数一致;
  • 打印调试信息:在解析过程中输出当前读取的字节偏移、编码长度表的字节内容,与infgen -dd的输出对比,看是否存在数据差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:04:52