RT
文件Fuzz教程第四篇
文件 Fuzz 教程之四:Peach Pit 模版调试技巧
Author:dragonltx
写好 Peach Pit 模版后,还需对 Peach Pit 模版进行调试。Peach 提供了命令可以对 Peach Pit进行调试:peach.bat -1 --debug wav.xml。下面将会演示几个常见的错误,起到抛砖引玉的作用。
语法错误
实例一
根据提示可以知道是的开头申明不规范,查看 wav.xml,
可以发现,<?xml version="1.0" encoding="utf-8"?>这个申明不在第一行,因此报错。将它移至第一行即可。解析完,会提示如下红色方框的信息,说明样本已经全部解析完成。
注:解析完之后,还需要 010 Editor 的文件比较工具比较样本文件跟生成后的文件是不是一样的,如果是一模一样,说明 Peach Pit 工作正常,否则,说明 Peach Pit 还有 Bug。
从红色方框可以看出 sample.wav 跟 0.wav 是一模一样的,因此 wav 模版大功告成。
实例二
从提示可以看出 15 行第 5 列,标记不匹配,查看 wav.xml,
可以看到第 9 行少了个/,导致标记不匹配报错。
实例三
从提示可以看出 BloB 元素写错,应该是 Blob。
表达有误
实例一
从提示可以看出 Peach 只解析了 36 字节,将生成的 wav 与模版进行对比,
发现生成的文件只有一个 chunk,查找相应的 Peach 模型,
发现将 maxOccurs 写成 maxoccurs,导致 Peach 认为 Choice 没有属性,变成<Choice>,导致Peach 只会从中选取一个满足条件的 Chunk,选到满足的 Chunk 后就退出,不再选择其他的Chunk。
实例二
从图中可以看出,只解析了 647 字节,依旧先用 010 Edit 进行比较,
通过比较可以发现样本文件的 entrycount 为 41,而生成的 entrycount 只有 1,查看相应的 Peach模型,可以看到:
ctts_table 这个 Block 没指定生成的个数,导致 Peach 认为最多为 1 个,因此生成的 entrycount为 1,导致后面解析出错。加上 maxOccurs=“1024”即可。
实例三
可以看出,只解析了 16 字节就退出,还是用 010 Edit 对比一下,
可以发现 padding 数据不对,查看 Peach 的调试信息
Object_version=1,但是 When 都是返回 False,应该是这里出问题了,查看模版
self.find('object_version').getInternalValue()返回的是字符串,因此 self.find('object_version').getInternalValue()前需加上 int,否则进行解析时,when 结果都为 false。加上 int 之后接解析正常。
总结:
基本上,Peach Pit 模版调试的方法为先看是否解析完整个文件,如果是,还需用 010 Editor对比下是否和样本一样,如果没完整解析,还是需要 010 Editor 对比,看解析到哪里,配合Peach 的 debug 信息来定位问题。本篇文章只是对 Peach Pit 的调试进行抛砖引玉,具体的经验积累还需在实战中进行积累。
注:本帖由看雪论坛志愿者PEstone 重新将PDF整理排版,若和原文有出入,以原作者附件为准
[培训]《安卓高级研修班(网课)》月薪三万计划