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, 云安全监控, 云资产清单, 代码混淆还原, 公共子表达式消除, 可配置连接, 布尔逻辑, 模式匹配, 程序分析, 符号执行, 算术优化, 约束求解, 编译器优化, 自动化资产收集, 表达式简化, 逆向工具, 逆向工程, 静态分析