quarkslab/sspam

GitHub: quarkslab/sspam

基于 z3 和 sympy 的符号化简工具,通过语义级模式匹配简化混合算术与布尔运算表达式。

Stars: 108 | Forks: 12

# sspam:基于模式匹配的符号化简 sspam 是一款通过模式匹配来化简混合表达式(即同时使用算术和布尔运算符的表达式)的软件。它使用 sympy 进行算术化简,并使用 z3 进行*灵活的*匹配(即匹配具有不同表示形式的等价表达式)。 ## 环境要求 使用 sspam 需要以下组件: * SMT 求解器 [z3](https://github.com/Z3Prover/z3) 4.4.2 版本 * 符号数学 Python 库 [sympy](http://www.sympy.org/fr/index.html) * ast 反解析 Python 模块 [astunparse](https://github.com/simonpercivall/astunparse) 参与 sspam 开发需要: * 源码检查 Python 模块 [flake8] (https://pypi.python.org/pypi/flake8) * 源码检查 Python 模块 [pylint] (https://www.pylint.org/) * 测试用 Python 框架 [pytest] (http://docs.pytest.org/en/latest/index.html) ## 安装说明 * 您可以使用 `pip install -r requirements.txt` 安装大部分依赖(如果是为了参与开发,请使用 `pip install -r requirements-dev.txt`) * 安装 z3,您可以: * 从 [源码](https://github.com/Z3Prover/z3) 编译 * 或者下载 [发行版](https://github.com/Z3Prover/z3/releases) 并 将 `bin/` 目录添加到您的 `$PYTHONPATH` 中 * 安装 SSPAM: ``` $ sudo python setup.py install ``` ## 使用 sspam 您可以通过命令行使用 sspam: ``` $ sspam "(x & y) + (x | y)" (x + y) ``` 或者在 Python 脚本中使用: ``` from sspam import simplifier print simplifier.simplify("(x & y) + (x | y)") ``` 您可以在 `examples/` 目录中查看一些 sspam 的使用示例。 请注意,我们提供了一个 `cse` 模块,用于执行*公共子表达式消除*(避免多次处理相同的子表达式)。 ## 测试 要运行 sspam 的测试,请使用 `make test` ## 贡献 要为 sspam 做贡献,请创建一个包含您的贡献(新功能、修复等)的分支。请使用 `make check` 命令对您的代码风格进行基本检查。由于 pylint 的错误不一定都适用,您可以在代码中使用 `#pylint: disable=` 注释来忽略不相关的错误。 为了检查您的贡献是否影响了 sspam 的正常行为,请使用 `make test`。
标签:AST解析, DNS 反向解析, Python安全工具, SMT求解器, SymPy, Z3, 云安全监控, 云资产清单, 代码混淆还原, 公共子表达式消除, 可配置连接, 布尔逻辑, 模式匹配, 程序分析, 符号执行, 算术优化, 约束求解, 编译器优化, 自动化资产收集, 表达式简化, 逆向工具, 逆向工程, 静态分析