优化DEFLATE块位置暴力破解的启发式方法探讨
针对微软Word生成的DEFLATE编码流的候选位置排除线索
以下是针对微软Word生成的标准DEFLATE编码流,可用于排除无效候选解码位置的实用线索:
- DEFLATE块长度校验:非最终DEFLATE块会携带4字节的长度校验字段——前两字节是原始数据长度,后两字节是该长度的按位取反值。如果候选位置起始的4字节不满足「原始长度 ≡ ~补码长度 (mod 2^16)」的规则,直接排除该位置。
- 最终块的XML结尾匹配:若候选块标记为最终DEFLATE块(块首第1位为
1),解码后的内容必须包含word/document.xml的合法XML结尾,比如</w:document>、</pkg:package>这类闭合标签。如果解码结果无合理XML收尾,可直接排除。 - XML语法有效性验证:word/document.xml是标准XML文档,解码后的片段必须符合XML基本语法:标签嵌套合法、无非法字符、不存在未闭合的标签(中间块的解码内容应为连续的XML片段,不会出现语法断裂)。若解码内容出现明显XML语法错误,可排除该候选位置。
- 动态哈夫曼编码块格式约束:如果候选块是动态哈夫曼编码类型(块首第2-3位为
10),后续必须包含符合规范的编码表结构:依次是HLIT、HDIST、HCLEN三个长度值,以及对应的编码长度序列。若这些字段超出合理范围(比如HLIT值不在257-286之间),可直接排除。 - 压缩内容的字节分布特征:word/document.xml以文本和XML标签为主,字节值集中在ASCII可打印范围(0x20-0x7E),仅包含少量控制字符(换行、制表符等)。若解码内容出现大量不可打印的乱码字节(如连续0x00或随机高值字节),基本可判定为无效候选位置。
- ZIP条目局部头关联验证:docx本质是ZIP包,word/document.xml的压缩数据属于ZIP的一个条目,其附近(通常在压缩数据前)会有ZIP局部文件头(含
PK\x03\x04签名),其中压缩方法字段必须为DEFLATE(值为0x08),文件名字段应为word/document.xml。若候选位置的前后字节无法匹配这些特征,可辅助排除。 - 块类型合法性补充:除了你提到的块首三位不能为
011或111,需明确:块类型的后两位(压缩类型)仅能是00(存储)、01(固定哈夫曼)、10(动态哈夫曼),11为非法类型,遇到此类候选位置直接排除。
内容的提问来源于stack exchange,提问作者Reinstate Monica
相关产品推荐
相关产品推荐

