3.4 KiB
3.4 KiB
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-headlessCLI——正路是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()实际值为准