Files

3.4 KiB
Raw Permalink Blame History

Binary Ninja 工具特有坑与边界

版本差异

  • Python API 与软件版本强绑定:API 不随软件自动同步——重装软件或升级后必须重跑安装目录 install_api.py,否则 import binaryninja 指向旧版 API,行为与文档不符(最常见故障源)
  • 主版本间 API 变化:2.x → 3.x(类型 API 重构)→ 4.x → 6.x 各有破坏性变更——脚本依赖先查 core_version() 与对应版本文档;旧插件在新主版本下可能直接加载失败
  • 6.0 迁移(Plugin Manager → Extension Manager):6.0 起插件管理器重构为 Extension Manager,旧 pluginmanager 仅保留 shim;bundled Python 升至 3.13(首次覆盖 Linux),外部 Python 最低仍 3.10——升级后需跑一次依赖迁移(重装插件依赖),否则旧插件报缺依赖或加载失败
  • i 键是 IL 循环,m 不是:m 在官方文档里是「整数应用枚举显示」(类型操作)——网上流传的「m 切 MLIL」说法与现行版本不符,切 IL 用 i 或右下角 Options 菜单
  • 插件兼容性:插件按主版本编译/适配——Extension Manager(6.x;旧菜单 File > Manage Plugins)里标记版本要求的插件,跨主版本升级后逐个验证

个人版限制

  • 无 headless 自动化:headless 是商业版能力(无 binaryninja-headless CLI——正路是 install_api.py 注册后脚本 binaryninja.load(),headless license 用官方独立下载包),个人版用 GUI 内 File > Python 面板跑脚本
  • 自动化频次/规模限制:个人版对脚本自动化(批量跑、无头操作)有使用限制,license 条款约束个人用途——批量任务先评估是否超限,超限用 re-ghidra analyzeHeadless(免费)替代
  • 商业版功能裁剪:部分插件要求商业版;Options > About 确认 license 类型,别在个人版上排查商业功能故障

分析质量坑

  • MLIL 对混淆失真:花指令/控制流平坦化破坏数据流重建——反编译出现死代码/恒假条件时降 LLIL/汇编核对,或先 re-deobfuscate
  • 大二进制首次分析慢:100MB+ 样本默认分析 pass 全开可达数分钟——Options > Analysis 按需关 pass,或对重点函数用 f.analysis_skip_override 思路做局部分析
  • 带壳样本直接分析=假结果:壳区不解密,函数识别乱——先 re-packer-id / re-anti-analysis 脱壳再导入
  • 无头模式分析不自动跑:binaryninja.load() 后必须 update_analysis_and_wait()——GUI 自动分析,无头不自动,忘了这行所有结果都是空的

插件与路径坑

  • macOS 插件目录特殊:~/Library/Application Support/Binary Ninja/plugins——不是 ~/.binaryninja/plugins(Linux 才是),放错位置插件不加载
  • Windows 插件目录:%APPDATA%\Binary Ninja\plugins——不要放安装目录下(权限/升级覆盖问题)
  • cask 安装的 macOS 版:brew install --cask binary-ninja 安装的是 GUI 应用,Python API 仍需在应用目录跑 install_api.py 注册到你的 Python 环境

使用注意

  • 全部在沙箱内执行(re-analyze/platform-tips 最高原则);脚本触发动态执行默认沙箱内
  • 换栈(Ghidra/IDA ↔ BN)无工程互导格式——标注靠脚本统一命名规范,或按函数手搬
  • 版本相关行为以 Options > About 与 core_version() 实际值为准