ScriptWare-Software/native-predicate-solver
GitHub: ScriptWare-Software/native-predicate-solver
Binary Ninja 原生插件,用于自动识别并移除二进制文件中的不透明谓词混淆,还原清晰的代码控制流。
Stars: 46 | Forks: 6
# Native Predicate Solver
作者:**ScriptWare Software**
_用于消除不透明谓词的原生 C++ Binary Ninja 插件_
## 描述:
该插件用于移除求值结果始终相同的条件分支。使用 C++ 编写以确保速度——比 [Python 版本](https://github.com/Vector35/OpaquePredicatePatcher/)更快,尤其是在处理大型二进制文件时。该插件使用多线程并行处理函数,并会迭代执行多轮扫描以清理新发现的不透明谓词。您应该能够轻松且快速地从庞大的函数中移除恼人的不透明谓词。
### 示例
处理前:

处理后:

## 安装说明
### Windows
复制到:`%APPDATA%\Binary Ninja\plugins\`
### Linux
复制到:`~/.binaryninja/plugins/`
### Darwin (macOS)
复制到:`~/Library/Application Support/Binary Ninja/plugins/`
## 用法
点击 → `Plugins` → `Native Predicate Solver`:
- `Patch Opaque Predicates (Current Function)` - 仅修补当前函数
- `Patch Opaque Predicates (All Functions)` - 修补整个二进制文件
## 设置
可在 Binary Ninja 设置中的 "Native Predicate Solver" 下找到:
| 设置 | 默认值 | 描述 |
|---------|---------|-------------|
| Max passes per function | 10 | 重新分析每个函数的次数 |
| Max global passes | 20 | 重新分析整个二进制文件的次数 |
| Thread count | 8 | 用于并行处理的工作线程数 |
## 工作原理
1. 扫描 MLIL 以查找条件分支
2. 检查条件是否为常量(始终为 true/false)
3. 对其进行修补:
- 始终为 false → NOP(移除分支)
- 始终为 true → 无条件跳转
4. 重复上述步骤,直到找不到更多谓词
## 最低版本
该插件是基于以下版本的 Binary Ninja 开发的:
* 5.0
## 必需依赖
该插件需要以下依赖:
* 无(所有依赖均已包含在 Binary Ninja API 中)
## 许可证
该插件在 MIT 许可证下发布。
## 元数据版本
2
标签:Binary Ninja, C++, MLIL, TLS抓取, 不透明谓词, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 代码优化, 去混淆, 反混淆工具, 恶意代码分析, 控制流平坦化, 插件, 数据擦除, 补丁修改, 软件安全, 逆向工程, 配置文件, 静态分析