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整理排版,若和原文有出入,以原作者附件为准
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)