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/)更快,尤其是在处理大型二进制文件时。该插件使用多线程并行处理函数,并会迭代执行多轮扫描以清理新发现的不透明谓词。您应该能够轻松且快速地从庞大的函数中移除恼人的不透明谓词。 ### 示例 处理前: ![Before example](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/4759182cc5201432.png) 处理后: ![After example](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/5aa12518f6201443.png) ## 安装说明 ### 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抓取, 不透明谓词, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 代码优化, 去混淆, 反混淆工具, 恶意代码分析, 控制流平坦化, 插件, 数据擦除, 补丁修改, 软件安全, 逆向工程, 配置文件, 静态分析