#模糊测试 #语法基础 #黑盒 #解析器

app tree-crasher-python

易于使用的基于语法的黑盒模糊测试工具

1 个不稳定版本

0.4.0 2023年7月17日

#1165编程语言

MIT 许可证

26KB
318

tree-crasher

tree-crasher 是一个易于使用的基于语法的黑盒模糊测试工具。它使用 tree-sitter 语法解析多个输入文件,并生成通过拼接它们的抽象语法树(AST)形成的新文件。

tree-crasher 旨在与 Gramatron、Nautilus 和 Grammarinator 等更高级的基于语法的模糊测试工具占据不同的细分市场。它不通过完整的、手写的语法和基于覆盖率的反馈等复杂技术来实现最大覆盖率,而是通过使用现成的 tree-sitter 语法,并且不需要对目标进行任何仪器(甚至不需要源代码)来实现最大易用性。简而言之,tree-crasher 希望成为基于语法的模糊测试中的 Radamsa

tree-crasher 使用 treereduce 自动最小化生成的测试用例。

有关更多信息,请参阅 文档

示例

在阅读这些示例时,请注意模糊测试可能导致不可预测的行为。始终在具有内存限制、无网络访问和无重要文件的虚拟机或Docker容器中进行模糊测试。

JavaScript解释器

获取一组JavaScript文件,并将它们放入 corpus/(例如,使用 此脚本)。然后,这里是模糊测试 JerryScriptBoa 的方法

tree-crasher-javascript corpus/ jerry
tree-crasher-javascript corpus/ boa

(默认情况下,tree-crasher 通过stdin将输入传递给目标。)

Python的正则表达式引擎

编写 rx.py 如下

import re
import sys
try:
    s = sys.stdin.read()
    r = re.compile(s)
    print(r.match(s))
except:
    pass

corpus/ 中放入一些示例正则表达式。然后

tree-crasher-regex corpus/ -- python3 $PWD/rx.py

rustc

tree-crasher 在 rustc 中发现了许多错误。以下是操作方法!命令行中的特殊 @@ 符号将被 tree-crasher 生成的文件替换。

tree-crasher-rust \
  --interesting-stderr "(?m)^error: internal compiler error:" \
  corpus \ 
  -- \
  rustc +nightly --crate-type=lib --emit=mir -Zmir-opt-level=4 @@.rs

(正则表达式语法是 regex crate 的语法。)

更多示例

有关更多示例,请参阅 文档

发现的错误

tree-crasher 使用 tree-splicer 生成测试用例,请参阅该项目 README 中找到的错误列表。

如果您发现 tree-crasher 的错误,请通知我!一种很好的方式是向 tree-splicer 提交一个 PR 以将其添加到 README。

支持的语言

tree-crasher 支持 9+ 种语言,请参阅 文档 获取详细信息。

文档

文档可在 网上 或在 ./doc 中找到。

依赖项

~11–24MB
~395K SLoC