#fuzzing #per #asn-1 #macro-derive

bin+lib asnfuzzgen

ASN.1 结构感知模糊测试编译器

3 个版本

0.1.3 2024年7月5日
0.1.2 2024年7月5日
0.1.0 2024年7月3日

#169 in 测试

Download history 281/week @ 2024-07-01 45/week @ 2024-07-08 16/week @ 2024-07-22

每月 342 次下载

MIT 许可证

365KB
9K SLoC

asnfuzzgen - ASN.1 结构感知模糊测试编译器

asnfuzzgen 是一个 ASN.1 编译器,能够为任意 ASN.1 规范生成结构感知模糊测试模块。它目前支持打包编码规则(PER),并生成一个 Rust 模块,可以导出为与其它语言兼容的链接 C-ABI 库。

该项目分为三个包,如下所述。

  1. asnfuzzgen: 此包提供实际的 ASN.1 编译器。通常,一个工具(asnfuzzgen)将根据 ASN.1 规范生成 Rust 结构。编译器提供与 3GPP 规范协同工作所需的基本功能,包括参数化类型、信息对象类和类型约束。

  2. asnfuzzgen-codecs: 此包提供对各个 ASN.1 规范支持的编码的支持。截至当前版本,支持 APER/UPER 编解码器。每个编解码器都作为实现相应 'encode' 和 'decode' 函数的 trait 支持。此包将实现不同 '编码规则' 的支持,然后 derive 宏将使用此代码为编译器生成的 Rust 结构生成编码支持。

  3. asnfuzzgen-codecs-derive: 此包提供 derive 宏,用于 asn-codecs 中的编解码器。使用 asnfuzzgen 生成的代码可以在编译时通过传递标志来指向适当的编解码器。

致谢

该项目使用了来自 Hampi Rust ASN.1 Toolkit 的源代码,该工具同样采用 MIT 许可证。特别感谢 Abhijit Gadgil 为该项目编写 Rust ASN.1 Toolkit,该工具对项目贡献巨大。

支持的编解码器

  • APER
  • UPER

入门指南

build.rs 支持

通常可以通过build.rs机制调用编译器。在examples/子项目中提供了一个build.rs示例。通过这种方式生成的代码可以集成到您的项目中。有关示例,请参阅examples/tests/目录。

使用命令行工具

可以使用以下命令安装asnfuzzgen工具:cargo install asnfuzzgen,然后按照命令行使用说明进行操作。

cargo install asnfuzzgen
asnfuzzgen --help

运行测试用例

  1. 可以通过以下命令运行测试用例:cargo test

生成ASN.1规范文件

目前有两种方式可以从'.docx'规范文件生成'ASN.1'规范文件(这主要适用于3GPP规范)。

  1. 使用examples/specs/parse_specs.py中的脚本。这是推荐的方式。(注意:这需要安装docx或Python3中的python-docx)。
  2. 使用rust二进制文件extract-asn-spec。注意:这不是推荐的方式,效果可能因环境而异。最终目标是使其成为默认方式,以便也能与build.rs集成。但这是目前的一个工作进度。默认情况下不可用,需要通过特性标志rs-specs-gen启用。

许可证和归属

本项目的源代码采用MIT许可证。

依赖项

~4–7MB
~130K SLoC