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
相关产品推荐
相关产品推荐

