Binary Ninja 是一个功能强大的交互式反编译工具,专为安全研究人员、开发人员和二进制代码分析师设计。主要功能包括反汇编、反编译、调试二进制文件,以及提供广泛的工具用于解析、反编译和调试代码,帮助用户理解程序的工作原理并识别潜在的漏洞。
Binary Ninja 功能特点
- 多架构支持:覆盖 x86、x86_64、ARMv7(含 Thumb2)、ARMv8 (AArch64)、PowerPC、MIPS(含 Octeon 扩展)、RISC-V、MSP430、6502、nanoMIPS、TriCore、C-SKY、M·CORE、Hexagon、NDS32、TMS320C6x 等,还可通过扩展管理器加载社区架构。
- 交互式操作:以图形界面驱动反汇编与反编译,可视化控制流并交互浏览交叉引用,提升分析效率与判断准确度。
- 自动化分析:可用 C++、Python 或 Rust 编写脚本,把重复、复杂的分析流程交给代码完成。
- 调试功能:内置调试器,支持本地与远程调试,便于跟踪运行过程、定位问题。
- 社区支持:官方扩展管理器对接社区插件仓库,用户可共享经验、技巧与插件。
- Shellcode Compiler:内置迷你 C 编译器,支持 macOS、Windows、Linux、FreeBSD 等平台,以及 x86、x86_64、PPC32、MIPS32、ARM(不含 Thumb)、QUARK 等 CPU 架构,适合编写小型代码片段或做局部代码修改。
- 跨平台兼容:macOS(通用二进制)、Windows x86_64、Linux x86_64 与 Linux AArch64 均有对应版本。
- API 支持:提供 C++、Python 与 Rust 三套 API,可在界面内或脱离界面自动化、定制分析流程。
- 开放生态:官方开源了插件 API 库(MIT)、Rust API(Apache 2.0)与全部默认主题,插件生态活跃;程序主体为商业授权。
Binary Ninja 6.0.10601 (2026-09-03)
主要功能
- 性能与内存:分析速度最高提升至 2.16 倍,峰值内存占用最多降低 55%
- 分析缓存:更高效地复用已缓存的函数分析结果
- 数据库保存:降低内存占用、加快保存速度,并修复数据库文件体积持续膨胀的问题
- MCP:首个官方 MCP 服务器,同时提供基于 HTTP 的图形界面服务端与无头模式下的 binaryninja_mcp stdio 服务端
- 二进制相似性:可插拔的二进制比对框架,支持 BinDiff 与 WARP 提供方(仅限 Ultimate 版)
- TMS320C6x:新增架构支持,官方内置架构数量达到 19 种
- 多全局指针:可跟踪并覆盖多个全局指针寄存器
- 改进的 BASE:新增采样模式,基址检测速度显著提升
- 调用约定重构:支持结构体参数与返回值,并新增 Go 与 Pascal 调用约定
- HLIL_STRUCT_INITIALIZE:新增 IL 指令与初始化表达式,结构体初始化表达更清晰
- 类型片段:以类整数的存储方式跟踪源类型的位切片,渲染为 __frag
- Python 3.13:所有平台均内置 Python,并新增 x86_64 与 AArch64 Linux 版本
- 脚本控制台:提示细化到参数级,不再只给出函数原型
- 扩展管理器:插件管理器全面重构,支持版本切换、按平台下载、依赖解析、离线缓存与排序
- 新用户向导:三步式首次运行引导,内置类 Ghidra 与类 IDA 预设
- 调试器:新增内存映射侧边栏与镜像内存区域,并支持从调试适配器按需加载符号
- 免费版新增:armv8 (AArch64) 反编译、MCP 服务器,以及 Linux ARM64 构建版本
- 授权打包:协作功能改为 Ultimate 版按席位购买的附加组件,企业服务器在门户中按“服务器部署”统一管理
6.0.10601 完整更新记录(分析 / 平台 / 插件 / API / 调试器)
分析 / 核心
- 功能:新增 abs、min 和 max IL 指令
- 功能:新增 bswap、popcnt、clz、ctz、cls 和 rbit 指令
- 功能:新增 HLIL 中的 SSA 指令,用于部分变量写入
- 功能:新增了从 PDB 调试信息加载本地栈变量的支持
- 功能:新增了类型收敛检测,以防止类型推断不收敛
- 改进:在 analysis.mainFunctionDetection.mainSymbols 中新增了 wmain,以便 navigate-to-main 也能找到 wmain
- 改进:为 Itanium RTTI 解析器新增了针对大型无后备段的快速失败机制
- 改进:新增了一个 MLIL 分析通道,以更好地分离当高位未使用的部分写入
- 改进:将递归函数指针类型的增长限制为确定性的、无参数形式
- 改进:优化了PDB 导入,以从 FrameProcedure 中包含的块中收集局部变量和参数
- 改进:优化了函数内联以处理非标准返回寄存器
- 改进:优化了在 PDB 导入期间基于栈的局部变量的恢复
- 改进:优化了所有 IL 中 PVS 工具提示的准确性
- 改进:引入了 BiDiReferenceMap 并将其用于代码、数据和类型引用索引,统一了它们先前分离的前向和反向部分
- 改进:保留了带有推断 typedef 的外联字符串
- 改进:优化了类型收敛检测器
- 改进:简化了 HLIL 中的 clz(x) >> log2(W) 到 x == 0
- 改进:在 HLIL 中使用变量 SSA 而不是内存 SSA 来直接访问数组变量或结构体字段
- 改进:通过核心简化标准库模板的打通结构化反混淆器
- 修复:HLIL SSA 循环条件 phi 表达式映射
- 修复:HLIL SSA 别名部分写入和初始化器的内存版本控制
- 修复:HLIL SSA 在通过指针写入嵌套结构时缺少内存版本递增的问题
- 修复:HLIL 空指针比较丢失指针偏移的问题
- 修复:IL 中引用地址早于数据变量定义的情况,当变量类型改变时需要重新分析
- 修复:LLIL SSA 以保留寄存器栈输出
- 修复:MLIL 栈偏移通过局部变量未正确重新加载的问题
- 修复:PDB 导入,使其仅在 x86_64 上调整栈指针相对局部变量
- 修复:original_filename 清理选项未从 display_name 和 virtual path 字段中清除标识信息的问题
- 修复:不区分大小写的搜索未匹配不同大小写字符串的问题
- 修复:自定义字符串类型将非 ASCII 字符显示为转义 UTF 字节而非解码文本的问题
- 修复:某些以前未解决的 Microsoft x86_64 混淆符号的反混淆问题
- 修复:涉及 lea 的指针算术的 HLIL 翻译错误,该错误曾产生像 this != -0x10 这样的错误比较
- 修复:在将结构体类型应用于使用连续加法指令计算的变量时生成的格式错误的 HLIL 结构体访问器
- 修复:当函数的返回类型大于单个返回寄存器时,MLIL/HLIL 中分散的返回值未正确合并的问题
- 修复:当 HLIL 行地址非单调时,HLIL 中的 Find 缺少匹配项的问题
- 修复:GetTypeForAccess 返回结构体访问跨越多个字段时错误片段的问题
- 修复:在提升深度嵌套的内联调用时,DefaultLiftFunction 和 CheckForInlinedCall 之间深度相互递归导致的崩溃问题
- 修复:在分析运行时创建大量类型时导致 UI 冻结的死锁问题
- 修复:在反混淆深度递归构造的名称时,GNU3/MSVC 反混淆器中的栈溢出崩溃问题
- 修复:GNU3 反混淆器中循环导致的崩溃问题
- 修复:由格式错误的 LLIL 间接分支目标导致的崩溃问题
- 修复:当两个函数直接相互调用时,函数内联期间因无界递归导致的崩溃问题
- 修复:几个复制赋值运算符,使其能正确处理自赋值
- 修复:对齐检查中潜在的除以零问题
- 修复:AddDataReferences 中的竞态条件,该条件可能因缺少锁而导致崩溃
- 修复:在展开模板参数包时,GNU3 反混淆器中的使用后释放问题
- 修复:涉及自定义函数架构上下文的使用后释放问题
- 修复:当一个函数被添加到组件中且其符号在同一批次中被移除时发生的释放后使用问题
- 修复:对有符号范围 PVS 的添加
- 修复:因使用变量 ID 而非变量索引导致的断言失败
- 修复:反汇编文本渲染器中用于符号名称截断的越界崩溃问题
- 修复:PDB 导入期间结构体位域成员偏移量的计算
- 修复:两个 UnsignedRange 值相加时,当两者起始和结束值都溢出时的计算问题
- 修复:两个相同 PVS 范围相加的计算问题
- 修复:当 GetViewOfType 与视图移除竞争时,因 null BinaryViewRef 导致的崩溃问题
- 修复:无法在紧凑内部表示中表示的变量的创建问题
- 修复:在调用目标处创建的、尚未指定类型的空数据变量的问题
- 修复:使用 MSVC 的 /d2FH4 标志构建的二进制文件中符号的反混淆问题
- 修复:长字符串的检测问题
- 修复:当已提交的类型更改仅影响置信度时,向调用者传播函数类型的错误
- 修复:处理无类型信息的反混淆结果的问题
- 修复:传入但已解析的部分访问被错误地视为参数的问题
- 修复:MLIL 中的间接堆栈偏移加载问题
- 修复:MLIL_STORE_STRUCT_SSA 中的无效 IL 指令访问问题
- 修复:PE 二进制文件中 __chkstk 及其他编译器插入函数的缺失符号名称
- 修复:无返回尾调用中提升的 IL 非确定性问题
- 修复:递归函数指针检测错误地将细化回调分类为增长的问题
- 修复:复合参数变量在未被使用时被移除的问题
- 修复:基于函数分析顺序的推测数据变量宽度问题,当两个函数以不同宽度访问同一地址时
- 修复:堆栈调整分析,将空值视为 0
- 修复:通过指针类型定义进行堆栈传播的问题
- 修复:反混淆器未创建从反混淆名称引用的、尚不存在的类型的问题
- 修复:更改返回值类型时默认位置未更新的问题
- 修复:字符串查找分析阶段覆盖现有类型化数据变量的问题
- 修复:由于函数返回值被意外丢弃导致的两个错误
- 修复:类型传播在规范化过程中丢弃 typedef 的问题
- 修复:在类型库中将 libc 函数的 err 系列标记为 noreturn,防止调用它们后出现错误的反汇编
性能
- 改进:优化了加载具有多个未映射到地址空间的 ELF 二进制文件的性能
- 改进:优化了组件树的性能
- 改进:通过使用 switch 替代 std::map 改进了 armv7 的 IsELFDataRelocation 性能
- 改进:通过跳过未映射地址的常量,提高了字符串注释检测的性能
- 改进:通过消除不必要的内存分配,提高了字符串检测的性能
- 改进:通过移除非反混淆的 SymbolQueue 消费者,提高了符号处理的吞吐量
- 改进:在免费版中为 C++ 容器使用了自定义分配器
- 修复:缓存了日志行大小提示,使日志视图在大量日志记录时保持响应速度
- 修复:Python 和 Rust API 中的内存泄漏
- 修复:DataRenderer 实例的内存泄漏
- 修复:在低空闲内存条件下加载数据库时发生的多个崩溃问题
用户界面
- 功能:在类型视图中新增了按偏移量创建结构体成员的功能
- 功能:为外部符号新增了包含类型信息的悬停预览
- 功能:新增了移除标签的上下文菜单操作
- 功能:在项目浏览器中新增了描述列
- 功能:在编辑函数对话框中新增了函数签名表
- 功能:为数组样式设置新增了新的用户界面
- 功能:新增了控制大纲可见性的设置
- 功能:在输入函数调用时新增了参数辅助弹出窗口
- 功能:新增了禁用代码片段的选项
- 功能:为侧边栏小部件新增了可选的标题
- 功能:为分割器新增了可选的大小提示
- 功能:为流程图新增了自定义数据支持
- 功能:为图视图新增了对角滚动支持
- 功能:为 UI 新增了可扩展的筛选操作支持
- 功能:新增了更改滚动条宽度的功能
- 功能:在 Mach-O 和 PE 二进制文件的线性视图中,按来源库对外部符号进行分组
- 功能:开源了所有默认主题,并为 .bntheme 文件中的颜色新增了 alpha 通道
- 改进:在 FlexHex 搜索中,将单个 ? 接受为全字节通配符
- 改进:将 wmain 添加到导航到主程序的识别入口点名称列表中
- 改进:为扁平化 UI 模型新增了背景排序和筛选的辅助功能
- 改进:为历史记录视图新增了水平滚动
- 改进:为堆栈视图新增了水平滚动
- 改进:在项目浏览器中新增了隐藏列的功能
- 改进:允许命令面板通过完整项目路径(例如 Project/File.exe)搜索项目文件
- 改进:在线性视图和图视图中将令牌双击事件分发给插件
- 改进:当从同一库导入大量符号时,在线性视图的固定标题中显示外部库名称
- 改进:在跳转对话框中隐藏不需要的相对地址
- 改进:优化了UI 中的“显示为”和类型切换行为
- 改进:优化了默认高亮显示并修复了标签顺序
- 改进:优化了分词文本视图的渲染
- 改进:优化了代码块的语法高亮
- 改进:优化了整数显示符号的切换
- 改进:命令面板现在也查找 UIAction 别名
- 改进:规范化了主题处理,并支持以数组形式指定的样式表
- 改进:将所有默认 UI 主题开源
- 改进:按地址对内存映射段和段进行数值排序
- 改进:按 case 编号对图视图中的 switch 块进行排序
- 修复:补上缺失的复制快捷键
- 修复:在经典主题中调暗了字符串颜色
- 修复:线性视图导航到自上次刷新以来添加的数据的问题
- 修复:在切换侧边栏后,单词换行导致布局改变时,线性视图丢失当前导航位置的问题
- 修复:在选择多个项目时,堆栈视图允许执行单项操作的问题
- 修复:折叠后符号视图文件夹重新展开的问题
- 修复:ViewFrame::navigate 无条件提升并激活窗口的问题,该问题会导致在撤销操作时焦点被盗取
- 修复:当调用目标为 HLIL_IMPORT 时的调用上下文菜单问题
- 修复:在未选择平台的情况下取消添加类型库对话框时崩溃的问题
- 修复:MLIL 中可能值集显示错误的问题,即使存在正确值,也显示为未确定
- 修复:堆栈视图在多个项目具有相同偏移量时仅允许选择第一个项目的问题
- 修复:零大小字段不再显示在用户界面中的问题
- 修复:setHighlightToken 中空指针导致的崩溃问题
- 修复:显示类型库浏览器时可能发生的崩溃问题
- 修复:在线性视图中双击函数标题时发生的崩溃问题
- 修复:几个硬编码的颜色,使其改用主题颜色
- 修复:类型浏览器中的锁反转问题
- 修复:命令面板中的评分错误
- 修复:OptionsDialog 视图排序比较器中的严格弱序违规问题
- 修复:保存导航历史时的线程问题
- 修复:组件树中自动符号遮盖用户定义符号的问题
- 修复:调整视图大小时内容丢失的问题
- 修复:当命名类型引用的基础结构或成员类型无法解析时 UI 崩溃的问题
- 修复:将文件或文件夹拖放到项目表的问题
- 修复:水平滚动伪影的问题
- 修复:MLIL SSA 外部变量可能值集工具提示不准确的问题
- 修复:未定义类型或字段时显示错误文本的问题
- 修复:行换行宽度计算,使其不再使用视图宽度,因为 UI 在不进行重大重构的情况下无法适应该宽度
- 修复:多行表单对话框输入强制最小宽度导致不必要的水平滚动的问题
- 修复:使用分离侧边栏时导航栏提升和激活错误窗口的问题
- 修复:标签页文本和工具提示未刷新显示更新后的显示名称的问题,直到下一次 UI 事件
- 修复:“设置资源”下拉菜单,使其分别列出每个打开的标签页,而不是将同一文件的标签页折叠成一个条目
- 修复:“符号”视图在导航和选择更改时应尊重折叠文件夹的问题
- 修复:“工作流”视图错误地接受无法处理的导航请求的问题,防止其充当万能导航接收器
- 修复:容器浏览器和通用架构选择器使用项目文件名而不是文件元数据名称的问题
- 修复:符号控件未显示在同一地址下定义的所有符号的问题
- 修复:分诊视图中文件路径被截断的问题
- 修复:改进了默认高亮显示,并修复了数组设置 UI 中的 Tab 键顺序
- 修复:恢复了“从 C 源代码创建类型”对话框中的占位符帮助文本
架构与平台
- 功能:为 VRHADD 和 VRECPE 新增了 ARM 和 Thumb 提升,并修复了 SBC 即时处理
- 功能:新增了 FreeBSD PowerPC 和 RISC-V 支持
- 功能:为免费版本新增了 armv8 支持
- 功能:新增了小端序 Octeon MIPS 架构
- 功能:新增了用于选择初始线性扫描对齐的架构回调
- 功能:新增了特定于架构的线性扫描功能
- 功能:新增了 JNI 类型的自动导入和应用
- 功能:新增了 C-SKY v2 架构的大端字节序支持,并修复了对大端 M-CORE 二进制文件的识别
- 功能:新增了对 RISC-V Zba、Zbb 和 Zbs 位操作扩展以及 WCH 指令的解码和提升支持
- 功能:新增了对 Apple 厂商特定 aarch64 指令的汇编和提升支持
- 功能:新增了对 ARM vcvt.f64.s32 和 vmov.f64 指令的提升支持
- 功能:新增了 x86/x86_64 ELF ABI 的返回值位置处理
- 功能:新增了对 WCH 厂商特定 RISC-V 扩展的支持,包括硬件加速的内存复制和自定义压缩指令
- 功能:在 aarch64 上新增了对 ARM64_RELOC_BRANCH26、ARM64_RELOC_GOT_LOAD_PAGE21 和 ARM64_RELOC_GOT_LOAD_PAGEOFF12 重定位的支持
- 功能:新增了对大端 NDS32 架构的支持
- 功能:新增了对 RISC-V Zbs 单比特位操作指令的支持
- 功能:实现了 RISC-V Zba 地址生成指令
- 功能:为 RISC-V 实现了部分 Zbb 位操作指令
- 功能:为 RISC-V 架构实现了剩余的 Zbb 指令
- 改进:为 MIPS R5900 新增了 ABI 大小启发式返回大小
- 改进:合并了带有尾随条件分支的 Thumb IT 代码块
- 改进:在 csky 架构的提升过程中输出了 abs 指令
- 改进:在 aarch64 提升过程中输出了 abs、min 和 max 指令
- 改进:在提升 Hexagon 代码时输出了 abs、min 和 max 指令
- 改进:在提升 nds32 代码时输出了 abs、min 和 max 指令
- 改进:在提升 armv7 时输出了 bswap、clz 和 rbit 指令
- 改进:在 aarch64 上直接输出了 bswap、popcnt、clz 和 ctz 指令,而不是使用内建函数
- 改进:在 x86 提升过程中输出了 bswap、popcnt、clz 和 ctz 指令
- 改进:扩展了 ARMv7 架构的 ARM、Thumb 和 NEON 提升覆盖范围
- 改进:优化了MIPS n32 ABI 支持
- 改进:优化了默认的 arch 内联,以检测被调用者设置的寄存器为调用者的返回地址,并将跳转到这些寄存器的操作视为返回
- 改进:优化了启发式返回大小计算,为 MIPS R5900 使用基于 ABI 的大小
- 改进:优化了Mach-O 二进制文件中导入符号的库跟踪
- 改进:优化了对 Octeon 和 N32 MIPS ABI 的支持
- 改进:优化了x86 LLIL 标志提升,支持算术、测试、旋转和移位指令
- 改进:为 Tricore 架构提升了 abs、min 和 max 指令
- 改进:提升了 1.8 架构修订版中新增的更多 TriCore 指令
- 改进:在生成 macOS dSYMs 时保留了原生符号
- 改进:在 GNU3 混淆符号中恢复了隐式参数
- 改进:更新了 RISC-V Zbb 位操作提升,使用一等 LLIL 操作符实现 min/max、clz/ctz 和 popcount
- 改进:更新了 aarch64、armv7 和 x86 提升,以发出新的位操作 IL 指令
- 改进:在 AArch64 Linux 上使用 64KiB 的默认页大小
- 修复:为 RISC-V 反汇编新增了对 0000 的特殊处理,以解决二进制解析问题
- 修复:ARMv7 vcvt 提升,并在通道和寄存器宽度匹配时新增了直接提升标量 vabs 的支持
- 修复:Thumb2 IT 条件块分析,使后续指令(如 b)能被正确识别为条件指令
- 修复:ARMv7 rev 指令提升时丢失初始最高有效字节的问题
- 修复:未知架构使用错误地址宽度进行 DWARF 导入的问题
- 修复:从 .gnu_debugdata 引用但被错误地创建为 ARM 函数而非 Thumb-2 函数的 Thumb-2 ELF 函数的问题
- 修复:通过将其重命名为 rv32gc_wch 以匹配现有 RISC-V 架构,修复了 WCH RISC-V 架构注册和 ELF 重定位查找的问题
- 修复:Thumb2 架构中的 IT 指令信息
- 修复:ARMv7 上 BFI 和 BFC 的全宽度位域指令提升问题
- 修复:x86 ANDN/PANDN/VPANDN 的错误提升
- 修复:aarch64 上双精度 FMOV immediate 的错误提升
- 修复:x86 架构中 pop r16 的栈调整
- 修复:x86 MOVSS 指令将内存源形式提升为零扩展
- 修复:TriCore 架构中的 LHA 指令编码
- 修复:nanoMIPS 架构中 lwpc 和 restore.jrc 的提升问题
- 修复:VxWorksViewType::IsValidForData 中的 BinaryView 内存泄漏
- 修复:MSVC 混淆的 basic_string 上运算符+ 重载的反混淆错误
- 修复:Mach-O 解析器中的边界检查问题,以提高健壮性
- 修复:由于 PE 异常目录表大小格式错误导致的崩溃问题
- 修复:查找无架构项的 token 悬停值时发生的崩溃问题
- 修复:读取 Mach-O 二进制文件中格式错误的 CFString 时发生的崩溃问题
- 修复:由于格式错误的符号表导致 MIPS ELF 符号查找时发生的挂起问题,该符号表包含一个位于有效内存区域之外的 GOT 条目
- 修复:1.8 架构修订版新增的 TriCore 架构中缺失的 CALLI 变体
- 修复:Windows 上 x64 平台视图初始化中的竞态条件
- 修复:在查找 ELF 文件中相对位置的符号时添加映像基址的问题
- 修复:PPC32 和 thumb2 类型库中的别名问题,并新增了一个移除别名的 API
- 修复:Thumb-2 提升过程中发生的越界读取问题
- 修复:在遇到“超过分析限制:最大函数更新次数”错误时,分析器放弃对 Hexagon 函数的分析问题
- 修复:GNU3 反混淆器中的正确性问题
- 修复:某些编译器在跳转指令后插入的 RISC-V 0000 陷阱指令的解组问题
- 修复:aarch64 架构中 ARM64_RELOC_GOT_LOAD_PAGEOFF12 和 ARM64_RELOC_GOT_LOAD_PAGE21 重定位的处理问题
- 修复:Intel Hex 文件中非单调记录的处理问题
- 修复:无法为具有偶数入口地址的 Thumb2 ELF 文件覆盖架构选择的问题
- 修复:Thumb2 IT 指令的错误指令信息
- 修复:从寄存器栈中弹出值时的错误顺序
- 修复:内联返回检测,避免在被调用者使用非标准返回寄存器时将 LLIL_JUMP(reg) 视为内联返回
- 修复:x86 上带段寄存器的 pop 操作的提升问题
- 修复:通过正确设置返回寄存器修复了 RISC-V 上的提升问题
- 修复:x86 上的 MOVSS 和 ANDN 提升问题
- 修复:ARMv7 上 sbc.s 的提升问题,使其计算溢出标志而不是将其留空
- 修复:ARMv7 上全宽位域指令的提升问题
- 修复:1.8 架构修订版新增的指令的 TriCore 乱序反汇编操作数
- 修复:GNU3 demangler 使用其注册配置路径的问题
- 修复:RISC-V 架构无法反汇编 sh2add 指令的问题
- 修复:PE 加载器为调试元数据符号条目创建符号的问题
- 修复:ARM/Thumb2 函数平台对 .gnu_debugdata 符号的处理
- 修复:ARMv7 lsl.s 指令中未正确清除进位标志的问题
- 修复:某些 x86 浮点指令中未正确发出舍入标志的问题
- 修复:通过在查找前规范化地址,修复了 Thumb 函数指针的类型查找问题
- 修复:对多个乘法/除法、同步原语以及 SIMD/FP 指令(包括 vld1、vst1、vldmia、vstmia、umaal 和 clrex)的 ARMv7/Thumb2 未实现提升的问题
- 修复:通过收紧边界检查和限制重定位/绑定条目数量,增强了 Mach-O 解析对越界读取的防御能力
- 修复:在 RISC-V 上忽略 R_RISCV_RELAX 重定位
- 修复:为 sbb.d、lsr.d 和 .b、xor.d 指令实现了 C、P、A 和 O 标志
- 修复:将 _exit 标记为非返回函数,适用于 iOS Thumb 架构
- 修复:在 Apple 平台上将标记中止和其它无返回函数的函数标记为 __noreturn,以防止它们看起来像会穿透
- 修复:MSP430 的默认调用约定,该约定之前是反向的
核心插件
- 功能:在共享缓存分类视图中新增了字符串表,显示共享缓存中每个镜像的字符串
- 功能:新增了 KernelCache 工作流活动,根据目标符号名称重命名 __auth_stubs 部分中的存根
- 功能:在 Dyld 共享缓存分类视图中新增了递归加载按钮
- 功能:新增了重命名 objc_msgSend 存根函数的活动,有助于处理 macOS 27 等已剥离的二进制文件
- 改进:新增了对方法类型字符串的支持,使用相对于选择器基地址的指针,如 iOS 27 共享缓存所示
- 改进:为所有付费产品版本重新加入 BinExport 命令
- 改进:优化了加载共享缓存时的用户体验
- 改进:优化了项目中共享缓存文件的处理方式
- 改进:减少了加载 iOS/macOS 27 共享缓存时的日志噪音
- 改进:重构了 DSC 符号表以使用 TriageTablePanel,新增了异步加载、过滤和排序功能
- 改进:在 KernelCache 上下文菜单操作中,将跨镜像存根函数解析为其目标镜像
- 改进:为 KernelCache 设置了区域显示名称,以便更容易获取段边界
- 改进:将处理后的 Objective-C 元数据存储在数据库中,而不是在加载时重新生成
- 改进:打开共享缓存或内核缓存时,现在始终显示分诊视图
- 改进:在 binexport 插件中为导出的函数名使用了 demangler API
- 修复:IDB 导入未被释放的问题
- 修复:从容器中提取的 bndb 在无头加载时被解析为 Raw/Mapped 而非恢复分析数据库的问题
- 修复:在分析格式错误的二进制文件时 Objective-C 插件中出现的各种崩溃问题
- 修复:Dyld 共享缓存视图中“加载 /usr/lib/libFoo.dylib”上下文菜单操作,以将跨镜像的存根函数解析到其目标镜像
- 修复:在 iOS/macOS 27 共享缓存中 objc_msgSend$stub 函数错误地出现在 __objc_stubs 中的问题
- 修复:DSC(Dyld 共享缓存)支持中潜在的对象生命周期问题
- 修复:Objective-C 分析器中 UTF8 CFStrings 边界检查不足的问题
- 修复:共享缓存中 Objective-C 方法缺少参数类型的问题
- 修复:使用无效插件对象可能导致的崩溃问题
- 修复:在 iOS 27 / macOS 27 内核缓存中通过 __auth_stubs 解析调用的问题
- 修复:Objective-C 工作流覆盖用户指定的 objc_msgSend 调用类型的行为,防止用户通过细化推断类型来考虑可变参数
- 修复:从磁盘重新打开 dyld 共享缓存时 DSC 筛选视图默认不显示的问题
- 修复:类型库实用程序插件未加载的问题
扩展管理器
- 修复:在配置了不可达的第三方仓库时,关闭扩展管理器会导致其挂起直到请求超时的问题
- 修复:已安装的插件在扩展管理器中缺少描述的问题
- 修复:插件安装 API 中的空指针崩溃问题
- 修复:插件仓库返回非 JSON 响应时的崩溃问题
- 修复:插件仓库缺失时的空指针解引用问题
- 修复:扩展管理器中处理空非官方仓库 URL 的问题
- 修复:已安装但随后被移除的扩展的处理问题
- 修复:没有依赖项的插件的处理问题
- 修复:扩展管理器中已安装的插件标题无法点击链接到其仓库的问题
- 修复:扩展管理器中许可证文本渲染为纯文本的问题
- 修复:扩展管理器中的锁顺序问题
- 修复:扩展管理器中的内存泄漏问题
- 修复:迁移时未能重新安装旧版插件依赖项的问题
- 修复:由于 pip 在解析 clang 等原生依赖时未继承系统 PATH 导致的 native wheel 安装失败问题
- 修复:插件依赖项安装失败时 pip 安装错误未在 UI 中显示的问题
- 修复:加载插件后插件操作无法立即可用的问题
- 修复:缺少依赖提供方的插件无法加载的问题
- 修复:仓库布尔值未实际禁用仓库的问题
- 修复:扩展管理器未选择最新插件版本的几种情况
- 修复:扩展管理器在添加新仓库时未能正确覆盖旧仓库 URL 的问题
- 修复:扩展管理器在 plugin_status.json 无效时导致 Python 崩溃的问题
- 修复:Python 插件安装 API 默认使用最新版本的问题
- 修复:扩展管理器正在更新时禁用或卸载插件导致 UI 挂起的问题
- 修复:从扩展管理器安装 Python 模块时 UI 挂起的问题
- 修复:依赖安装对话框反复提示安装已安装依赖项的问题
- 修复:插件依赖对话框未解析 JSON 输出中的换行符的问题
- 修复:扩展管理器在非 200 状态码时未提前失败,而是将下载失败的错误响应写入磁盘为 zip 文件的问题
- 修复:扩展管理器即使已安装版本满足要求,仍提示强制安装插件的问题
- 修复:“安装 Python 依赖项”操作通过在后台任务中运行 pip 安装导致 UI 挂起的问题
- 修复:插件重新安装后,延迟卸载状态未重置的问题
- 修复:扩展管理器在更新插件时使用错误目标目录的问题
- 修复:扩展管理器中的版本排序问题
协作 / 项目
- 功能:为企业版新增了 AuthenticateWithToken API,支持直接使用令牌进行身份验证
- 功能:为项目浏览器新增了可配置的列,类似于 macOS Finder 或 Windows 资源管理器
- 改进:将企业服务器版本从纯字符串更改为结构化的 VersionInfo 类型
- 修复:连接时企业快照映射查找的问题
- 修复:项目在首次打开后,新标签页页面无法解析项目名称的问题
- 修复:窗口关闭过程中协作聊天崩溃的问题
- 修复:协作用户列表为空时的崩溃问题
- 修复:在项目中使用同一容器打开多个条目时,导航到已打开标签页而非请求的容器条目的问题
- 修复:项目表格视图,使其能够接受文件和文件夹的拖放事件,而不是尝试打开它们
- 修复:当项目文件被重命名时,打开标签页的名称和项目浏览器显示名称无法实时更新的问题
- 修复:防止在推送初始快照之前下载 .bndb 文件
API
- 功能:为已弃用的插件新增了 API
- 功能:新增了重新加载数据库连接的 API
- 功能:新增了用于测量字符单元中 Unicode 字符串宽度以及将字符串拆分为字形簇的 API,并将派生字符串限制在启用的 Unicode 块内
- 功能:新增了用于片段类型的 Python 构造函数
- 功能:新增了二进制相似度 API
- 功能:新增了 BNSimplifyDemangledTemplateName API
- 功能:新增了新的许可证 API
- 功能:在 StringRecognizer API 中新增了 recognize_constant_data
- 功能:新增了类型切片,一种表示子类型内字节范围的原始类型,但不作为指针
- 功能:在 LLIL/MLIL/HLIL 的未实现 IL 中新增了 Unknown() 和 IsUnknown() 构建器函数
- 功能:新增了查询 UIAction 别名的 API
- 功能:新增了用于指定移动数据库要重新打开的文件 API
- 功能:新增了从已加载的类型库中移除别名调用 API
- 功能:为 Clang 类型解析器新增了对 __typeof__ 和 decltype 的支持
- 功能:新增了支持将别名字段填充到 extraSearchableText 中以供 UI 操作,允许插件为命令面板条目命名空间
- 功能:新增了在创建 BNTL 时指定 clang 编译器标志的支持
- 功能:为 UIContextNotification 新增了 OnTokenDoubleClicked 通知钩子
- 功能:将流程图构建暴露给 API
- 功能:开放了一个用于在任意缓冲区上运行字符串检测的 API,支持在整个共享缓存上进行检测
- 功能:引入基于配置的反混淆器 API(BNDemanglerConfig 和 BNDemanglerResult),提供统一的反混淆和模板简化功能,取代了旧的反混淆器入口点
- 功能:在 API 中重新加入许可证标签页和许可证文本字段
- 改进:在 LinearDisassemblyLine 中新增了 BinaryView 字段
- 改进:为 MLIL_FORCE_VER 新增了 reason 字段,用于自动化变量拆分
- 改进:为 VersionInfo 新增了比较运算符
- 改进:为 DominatorTree 新增了辅助方法,用于遍历直接支配者
- 改进:新增了静态方法 DataRendererContainer::RenderLinesForData,作为 DataRenderer::RenderLinesForData 成员函数的替代
- 改进:围绕配置驱动的设计整合了 C++、Python 和 Rust 的 demangler API
- 改进:将 MLIL 调用指令的输出扩展为表达式
- 改进:优化了基于 PyInitConfig 的 Python 初始化
- 改进:将模板简化集成到结构化的 GNU3/MSVC demangler 中
- 改进:使 DataBuffer 隐式转换为 std::span
- 改进:使 DefaultWebsocketClient::connect 变为异步而非阻塞
- 改进:使 C API 的基本块访问器无锁化
- 改进:将 Python demangler 绑定迁移至通过 DemanglerConfig/DemangleResult C API 路由,并支持结构化模板简化
- 改进:重构了 MSVC 反混淆器,在最终化前将符号解析为结构化类型节点
- 改进:从 C API 中移除了未使用的路径操作函数
- 改进:将架构补丁方法的 NotImplemented 替换为默认值或错误
- 改进:替换了 BinaryView::StoreMetadata 的 isAuto 参数,允许在不标记文件为修改的情况下持久化元数据
- 改进:更新了 bnpython3,使其在输入文件为 – 时从 stdin 读取
- 改进:更新了核心反混淆 API,使其使用已注册的反混淆器
- 修复:为 BNLicenseAddon 补上缺失的字段
- 修复:在 Python API 中补上缺失的初始化调用
- 修复:Python 元数据对象的比较,使其使用 BNMetadataIsEqual
- 修复:Python API 中因枚举转换不当导致的 Shiboken 警告
- 修复:通过使用共享类型节点来处理 GNU3 解混模板和反向引用
- 修复:Function.set_user_inline_during_analysis 抛出 TypeError 而非设置值的问题
- 修复:GetSystemCacheDirectory 使用文档中指定路径的问题
- 修复:LowLevelILFunction::AddOverflow 将操作数存储在表达式正确字段中的问题
- 修复:demangle_ms 返回无效类型以及对 vftables、多重继承和无参数函数属性处理不当的问题
- 修复:Menu 实例所有权不明确导致的内存泄漏
- 修复:Make Enum 存储具体类型而非命名类型引用的问题
- 修复:Metadata::operator==,使其执行值比较而非指针比较
- 修复:在克隆会话时 SESSION_COUNT 未递增的问题
- 修复:_inline_during_analysis_with_confidence 在 Python API 中未正确转换为 InlineDuringAnalysisWithConfidence 的问题
- 修复:copy_expr_to 并为 Python API 中新添加的指令新增了构建器方法
- 修复:在 Python 中多次注册 Architecture 或 ArchitectureHook 时导致的崩溃问题
- 修复:get_block_lines 中因引用未定义的 instr 变量而非 block 导致的 NameError
- 修复:Python API 中的内存泄漏问题,即 BNParseExpression 错误未通过 BNFreeParseError 释放
- 修复:MLIL SSA 中 IsSSAVarLiveAt 的参数交换错误,该错误导致了不正确的存活结果
- 修复:在关闭时因无效的 FileContext 当前帧而导致的潜在崩溃
- 修复:Shiboken 在 Linux 上转换大于 INT64_MAX 的 uint64_t 值时发生的溢出错误
- 修复:Python 3.14 上的自定义 demangler 调度
- 修复:由于 core-only unicode.h 的包含导致 demangler 在 API 端编译失败的问题
- 修复:在 Python 解释器关闭期间 StructureType、EnumerationType 和 NamedTypeReferenceType 上的 __del__ 异常
- 修复:当 modules 参数作为列表或字符串传入时的处理方式
- 修复:demangler 中对无类型结果的处理
- 修复:Python API 中自定义 Demangler 返回的零宽度类型的处理问题
- 修复:C++ API 中不正确的引用计数
- 修复:由于 Qt 对象缺少父对象而导致的内存泄漏
- 修复:多个 API 中缺少初始化的问题,这些问题可能导致对象处于未初始化状态
- 修复:Visual C++ 名称 Demangler 在处理某些混淆名称(如包含 @@@ 的名称)时失败的问题
- 修复:Python API 中缺少 get_default_load_settings_for_data 的问题,该方法在示例代码中被引用但从未实现
- 修复:stub 生成器对前导缩进的限制过于严格的问题
- 修复:防止使用已销毁的 BinaryView 句柄
- 修复:将 loader.syntheticSectionBase 从只读改为可写
- 修复:将许可证文本字段重新添加到 API 中
- 修复:将 Python API 中的裸 except: 子句替换为 except Exception: 以修复信号传播
Rust API
- 功能:为自定义函数提升器新增了 Rust API
- 功能:为自定义流程图布局新增了 FlowGraphLayout 及相关 API 到 Rust API
- 功能:为 Rust API 新增了 transform 模块
- 功能:为 Rust API 新增了对拥有 Settings 句柄的支持
- 改进:将 Rust demangler 绑定和消费者迁移到新的 C 契约
- 改进:从 binary_view 模块中移除 BinaryViewExt trait 及其泛型实现
- 改进:重构了 BinaryViewBase::save 的默认实现,使其保存原始文件内容
- 修复:Rust 插件 dSYMs 未能为 C/C++ 依赖项保留原生调试符号的问题
- 修复:Rust API 中 Activity::new_with_action 存储回调闭包堆栈指针的问题,该问题导致闭包捕获变量时出现使用后释放(use-after-free)
- 修复:load_with_options_and_progress 无法正确接受 None 作为选项的问题
- 修复:Rust API 中文本标记双向转换时缺少操作数字段的问题
- 修复:Rust API 中 Function::set_int_display_type 的使用后释放问题
- 修复:Ref 的不当使用 Rust API 中协作项目函数签名的实现
- 修复:MediumLevelILInstruction::lift 中对操作数列表的越界访问,该问题可能导致崩溃或读取错误数据
- 修复:自定义二进制视图的 Rust 保存绑定
- 修复:移除了 Rust 密钥提供程序中对 libdbus 的未使用依赖
- 修复:将 Rust API 中的 Settings::new 重命名为 Settings::global,以消除一个潜在的陷阱
调试器
- 功能:在调试会话期间,新增了双击导航到令牌运行时地址的功能
- 功能:新增了在 TTD(时间旅行调试)中跳转到上一个/下一个寄存器写入的功能
- 改进:将 WinDbg/TTD 版本设置为可配置选项,而不是始终下载最新版本
- 改进:在调试时优化了双击导航
- 改进:在后续调试会话中跳过适配器设置对话框
- 改进:默认禁用 debugger.useMemoryMapSegments 设置
- 改进:在 TTD 下一个/上一个内存访问对话框中记住上次检查的访问类型
- 改进:以可读格式渲染调试器依赖项,而非单行 JSON 块
- 修复:LLDB 目标创建,在调试共享库时使用可执行文件路径而非分析输入文件
- 修复:调试器退出后断点移除的问题
- 修复:TTD 中可读区域小于缓存块时内存无法读取的问题
- 修复:在成功写入寄存器后寄存器缓存未失效的问题
- 修复:macOS 上 LLDB 适配器中模块结束地址不正确的问题
- 修复:验证了下载的 WinDbg MSI 包的 Authenticode 签名
- 修复:macOS 和 Linux 上的 LLDB 版本检测问题
- 修复:TTD 侧边栏小部件在非 TTD 平台显示的问题
- 修复:TTD 目标终止发生在引擎线程上的问题
- 修复:AttachProcessDialog 导致的 DebuggerController 引用泄漏问题
- 修复:DebuggerUI::CreateForViewFrame 在 UIContext::contextForWidget 返回 null 时出现的空指针崩溃问题
- 修复:GetPathBaseName 中的 strdup 内存泄漏问题
- 修复:RLE 解码 (DecodeRLE) 中的边界检查问题
- 修复:删除调试器控制器时将其置为 null 而非从控制器列表中移除的错误
- 修复:在 Launch/Attach/Connect/Go/Step*/RunTo*/Restart/Detach 的分离工作线程仍在运行时释放 DebuggerController 导致的崩溃
- 修复:CorelliumAdapter::BreakInto 在 m_rspConnector 为 null 时的崩溃
- 修复:在调试器 IL 视图中读取调用堆栈变量参数时的崩溃
- 修复:在被调试进程自行退出时,WindowsNativeAdapter 析构函数中未加入的残留调试线程
- 修复:DbgEngAdapter::ReadMemory 和 WriteMemory 中的空指针解引用问题
- 修复:EsrevenAdapter::GetProcessList 中的空指针解引用问题
- 修复:WriteMemory 和 TTD 调用查询中因 m_rspConnector 缺少空值检查导致的崩溃
- 修复:LLDB API 返回值缺少 nullptr 检查可能导致的崩溃
- 修复:调试器中的多个内存泄漏问题
- 修复:调试器在解析远程协议中的某些整数时抛出异常的问题
- 修复:拒绝了未指定跟踪时发起的 TTD 启动请求
- 修复:移除了 DbgEng 适配器中冗余的 100x Release() 循环
文档
- 功能:新增了一个能够识别并显示 Rust 字符串切片的示例插件
- 改进:记录了并排安装的说明
- 改进:记录了“忘记此文件”与“从最近文件列表中移除”之间的区别
- 改进:记录了未实现和未知 LLIL 状态之间的区别
- 改进:记录了目标内存映射被镜像为段
- 改进:优化了上下文感知控制流恢复、提升和反汇编的文档
- 改进:优化了故障排除文档中的大文件部分
- 改进:使 Python API 文档中的侧边栏导航可折叠
- 修复:修正了内核缓存支持矩阵,该矩阵错误地列出了对 MH_FILESET 之前的 iOS 版本的支持
- 修复:multitool.py 文件下载示例,使其能够实际保存下载的文件
其他
- 功能:允许在不打开文件的情况下打开数据库
- 改进:更改了链接器行为,使其更接近 gcc
- 改进:在作为核心组件构建时,将 jsoncpp 编译到单独的命名空间中,使其可包含在静态链接构建中
- 改进:优化了IDB(IDA Pro 数据库)文件支持
- 改进:将 BNTL 命令根重命名为 Type Library
- 改进:更新至 Qt 6.11.1,将最低 PySide Python 版本提高至 3.10
- 改进:更新至 LLVM 22.1.8 并提高了最低支持的 Python 版本
- 修复:在系统缓存目录中启用了 .pyc 文件的创建
- 修复:Zstd 对包含多个连接帧的文件进行解压的问题
- 修复:bnpython3 的 sys.executable 未正确设置的问题
- 修复:由格式错误的 settings.json 引起的启动崩溃问题
- 修复:退出时 RunGuard 卸载与 URL 处理线程之间的死锁问题
- 修复:因不安全使用 printf 风格日志调用引起的崩溃问题
- 修复:macOS 上 Python 代码签名不正确的问题
- 修复:macOS 上缺失 Python 授权的问题
- 修复:virtualenv 路径设置的规范化问题
- 修复:当文件系统操作抛出异常时 BNPathExists、BNIsPathDirectory 和 BNIsPathRegularFile 中可能发生的崩溃问题
- 修复:更新通道检测,使其使用清单文件而非硬编码的 GUID
Binary Ninja 6.0 安装教程
1、安装binaryninja_win64_6.0.10601_personal
5、个人版安装成功,进入主界面。
免费版主界面:





微信扫一扫打赏
支付宝扫一扫打赏

