Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
interactive decompiler, disassembler, debugger, and binary analysis platform
请访问原文链接:https://sysin.org/blog/binary-ninja/ 查看最新版。原创作品,转载请保留出处。
作者主页:sysin.org
Binary Ninja
A New Type of Reversing Platform
Binary Ninja 是一个交互式反编译器、反汇编器、调试器和二进制分析平台,由逆向工程师为逆向工程师打造。它在开发时特别注重提供高质量的自动化 API 以及简洁易用的图形界面。Binary Ninja 正被全球的恶意软件分析师、漏洞研究人员和软件开发者广泛使用。Binary Ninja 具备跨平台的强大优势 (sysin),可反编译为 Windows、macOS 和 Linux 上的许多常见架构构建的软件。
简介
反编译 Decompile
针对任何受支持的架构(包括您自己的架构)反汇编和反编译代码为 C 或 BNIL。
分析 Analyze
可视化控制流并以交互方式浏览交叉引用。
自动化 Automate
使用 C++、Python 和 Rust API 从 UI 内部或外部自动进行分析。
调试 Debug
在任何受支持的架构或平台上本地或远程调试程序。
协作 Collaborate
使用我们的企业产品通过同步提交轻松协作。
加速 Accelerate
通过额外的 AI 功能加速分析并优化理解。
新增功能
Binary Ninja 4.2.6455 (2024-11-20)
✅ Major Features / 主要功能
- Language Representations
语言表示 - MSVC Run-Time Type Information Extraction
提取 MSVC 运行时类型信息 - WARP: Advanced Function Matching Algorithm Alpha
WARP:高级函数匹配算法(Alpha 阶段) - DLYD Shared Cache Alpha
DLYD 共享缓存(Alpha 阶段) - Workflows Feature Update
工作流功能更新 - Ultimate Edition
Ultimate 版本 - MSP430
新增 MSP430 架构支持 - Others!
其它改进! - Code Folding
代码折叠 - Forward Type Propagation
类型前向传播 - Smart Undefine
智能取消定义 - Plugin Status
插件状态
✅ UI 更新
- 功能:HLIL、Pseudo C 及其他高级语言表示中支持代码折叠
- 功能:脚本输入区域现在可调整大小
- 功能:新增复制搜索结果的功能
- 功能:新增“转到入口点”的操作
- 功能:现在可以在函数参数上设置 UIDF
- 功能:Python 控制台模糊补全 (sysin),默认禁用
- 功能:新增用于创建“新映射数据”文件的操作
- 功能:新增设置,支持 transientScrollbars
- 改进:加载 DWARF 信息第一阶段时增加进度报告
- 改进:全局数据变量周围的注释位置更合理
- 改进:交叉引用面板在相关时显示结构体字段
- 改进:双击数据库历史记录条目会恢复到该状态
- 改进:“查找”对话框的默认大小更合适
- 改进:日志视图 UI 性能提升
- 改进:“Open-With-Options” 允许选择特定视图
- 改进:免费版现在包含高对比度主题以提升可访问性
- 改进:多个对话框现在支持项目感知 (sysin),可以从项目包中加载文件
- 改进:Xrefs 在窗口模式下运行时可以聚焦主窗口,并且可用 ESC 关闭。这样使其行为更接近某些用户更熟悉的模态对话框工具。
- 改进:“更改类型”对话框现在区分大小写
- 改进:设置菜单新增“从 JSON 粘贴”的上下文菜单
- 改进:分析期间状态栏状态更准确
- 改进:查找对话框中的“当前函数”限制现在能正确搜索不连续的函数
- 改进:“显示 IL 操作码”显示设置现在也会显示指令大小提示
- 修复:当二进制视图没有默认平台时,分类视图崩溃
- 修复:当平台没有默认调用约定时,分类视图崩溃
- 修复:地址/查找对话框崩溃和 UI 卡顿
- 修复:分类导入列表中的字体问题
- 修复:更改字体设置后现在需要重启
- 修复:远程对话框按钮绘制错误
- 修复:大量日志记录导致的卡死
- 修复:遵循
network.pdbAutoDownload
的资源设置 - 修复:加载包含过多 section 的 ELF 文件时卡死
- 修复:加载包含过多 segment 的二进制文件时卡死
- 修复:Ubuntu 24.04 上
linux-setup.sh
未生成有效桌面图标 - 修复:插件管理器在更新时安装旧依赖而非新依赖的问题
- 修复:分类视图中无默认调用约定时崩溃
- 修复:“清除日志”操作现在有效
- 修复:插件管理器不再为无可用更新的插件显示更新选项
- 修复:字符串标记选择问题
✅ 分析
- 功能:允许用户设置全局指针值
- 功能:识别
TerminateProcess
为无返回调用 - 功能:从 IDA 数据库导入分析
- 功能:新增 Apple Arc 调用约定
AppleArm64ObjcFastARCCallingConvention
- 功能:更好的离散 AND 运算简化,例如
"0xffff0000 & => b & 0"
- 功能:更好的 ZeroExtend 与二元操作数简化,例如
"zx.q & 1 => zx.q & 1"
- 改进:短字符串仍会基于适当的类型信息内联
- 改进:多个 HLIL 级别的附加简化(如 C 风格
if
) - 改进:DWARF 解析类型时现在会递归遍历
DW_AT_abstract_origin
- 改进:DWARF 支持 zstd 压缩数据
- 改进:函数属性对话框中现在可以多选寄存器,并使用空格键切换
- 改进:调试信息在项目文件中相邻时能正确加载
- 改进:大函数的分析性能得到改进
- 改进:最小工作线程数现在为 2
- 修复:DWARF 导入时,当异常帧延伸到内存末尾会导致 panic
- 修复:未定义 DataVariables 在重新分析后会重新出现的问题
- 修复:某些基本块分析可能导致 OOM 的问题
- 修复:内存映射修改时字符串分析问题
- 修复:当
"analysis.limits.maxGlobalPointerValueUpdates"
设置为 0 时不再导致卡死
✅ Binary View
- 修复:ELF 解析错误,允许读取超出动态表末尾的数据
- 修复:计算 AArch64 重定位时尊重 ELF 视图字节序
- 修复:无效字符串表时的 COFF section 名称解析
- 修复:COFF 重定位未定义行为
- 修复:无效字符串表起始的 PE 文件无法加载
✅ 架构/平台
- 功能:新增 NTDLL 类型库
- 改进:支持无类型和未链接的
TerminateProcess
检测 - 改进:新增 aarch64 系统寄存器
mpidr_el1
- 改进:MIPS 新增 IL,支持 TLB 相关指令的内建函数
- 改进:Thumb2 提升 VPOP、VPUSH、VLDR、VSTR、VMOV、RRX、VABS、VMRS、VCVT、VSTMIA、VLDMIA、VSUB、VDIV、VMUL、VFMA、VMRS、VNEG
- 改进:VMOV 使用分割寄存器
- 改进:Capstone 升级至 5.0.3,修复提升错误
- 修复:x86 无效提升,正确提升
push r16
指令 - 修复:ARM64 进位标志无效提升
- 修复:MIPS 对 HI、LO 的 32 位操作结果进行符号扩展
- 修复:Thumb2 提升 REV 指令
- 修复:Thumb2 提升 IL 时获取错误的 S 和 D 寄存器
- 修复:Thumb2 非 R 寄存器组在第 15 个索引时引用 PC
- 修复:Thumb2 无约束的 VADD、VDIV 和 VABS
- 修复:Thumb2 VPOP 未设置寄存器
- 修复:DWARF 中宽度为 0 的枚举导致崩溃
- 修复:MIPS 隐式附加项
- 修复:Aarch64 SBB 指令问题
✅ API
- 新增 API:
BinaryView::GetMemoryRegionFlags
/BinaryView::SetMemoryRegionFlags
- 新增 API:
FileContext::newMappedFile
,允许创建新的映射文件 - 新增 API:
Platform::GetRelatedPlatforms
- 新增 API:
BinaryNinja::SetThreadName
- 新增 API:
MediumLevelILFunction::IsSSAVarLiveAt
- 新增 API:
BinaryView::GetDataOffsetForAddress
- 新增 API:
BinaryView::GetFunctionAnalysisUpdateDisabled
/BinaryView::SetFunctionAnalysisUpdateDisabled
- 新增 API:
Splitter::setMinimumWidgetSize
/Splitter::minimumWidgetSize
- 新增 API:
class RemoteFolder
- 新增 API:
getStringForGraphType
/getGraphTypeForString
- 新增 API:
class FlowGraphLayout
- 新增 API:
FlowGraphWidget::tagAddressAccepted
- 新增 API:
TagTypeSelectDialog::selected
- 新增 API:
LinearView::goToEntryPoint
/FlowGraphWidget::goToEntryPoint
- 新增 API:
StackView::getBaseOffset
- 新增 API:
UIContextNotification::OnContextMenuCreated
- 新增 API:
Workflow::GetEligibilitySettings
- 新增 API:
RepoPlugin::IsViewOnly
- 新增 API:
Settings::QueryProperty
- 新增 API:
FlowGraphWidget/LinearView::forwardPropagateType
/FlowGraphWidget/LinearView::inferFunctionType
/FlowGraphWidget/LinearView::propagateVariableTypeAndName
- 新增 API:
OptionsDialog::removeTabAndSettingsView
/OptionsDialog::viewTypeSelectionChanged
- 新增 API:
BinaryView::IsForceLoadableCallback
- 新增 API:
LinearView::undefine
- 新增 API:
Load
- 新增 API:
TypeBuilder::GetNameType
/TypeBuilder::HasTemplateArguments
/TypeBuilder::SetNameType
/TypeBuilder::SetHasTemplateArguments
/TypeBuilder::VarArgsType
/TypeBuilder::ValueType
/Type::GetNameTypeString
/Type::GetCallingConventionName
/Type::SetCallingConventionName
- 新增 API:
Logger::Indent
/Logger::Dedent
/Logger::ResetIndent
- 新增 API:
namespace BinaryNinja::Unicode
- 新增 API:
class Demangler
,支持自定义名称反混淆 - 新增 API:
class GenericRangeMap
/class GenericRange
- 新增 API:
FlowGraphWidget::getEdgeForMouseEvent
/FlowGraphWidget::canCopyAddress
- 新增 API:
class LanguageRepresentationFunction
/class LanguageRepresentationFunctionType
/class HighLevelILTokenEmitter
- 新增 API:
BinaryView::AddAutoSegments
- 新增 API:
BinaryView::BeginBulkAddSegments
,BinaryView::EndBulkAddSegments
,BinaryView::CancelBulkAddSegments
- 新增 API: 允许修改全局指针值:
BinaryView::GetGlobalPointerValue
,BinaryView::UserGlobalPointerValueSet
,BinaryView::ClearUserGlobalPointerValue
- 修改 API:
TypeLibrary::WriteToFile
现在返回一个布尔值,用于指示是否失败 - 修改 API:
Request::Request
/Request::Post
- 修改 API:
BinaryView::UndefineDataVariable
- 修改 API: Python
set_user_var_value
现在适用于函数参数 - 移除 API: 多个已弃用函数
- 移除 API:
Segment::SetLength
,Segment::SetDataOffset
,Segment::SetDataLength
,Segment::SetFlags
- 移除 API:
undefineName
/undefineFunc
/undefineVariable
- 功能: 新增
CarryFlagWithInvertedSubtractRole
,使进位标志在减法时取反,在加法时正常,用于 Arm64 和 6502 - 功能: Python 的
TypedDataAccessor
现在可以切片数组对象 - 改进: MemoryMap 和 Segments API 的功能已统一
- 修复: Rust 插件中 "Open with options"
- 修复: BasicBlockList 重新迭代问题
- 新示例:
BackgroundTaskThread
✅ 调试器
- 功能:新增 “Debugger Info” 侧边栏小部件,用于显示当前指令的信息
- 改进:启动和调试期间的显著性能提升
- 改进:在 TTD 录制完成时显示消息框
- 改进:调试器上下文菜单移动到顶层
- 改进:使用分析中的函数名符号化堆栈跟踪
- 改进:
execute_backend_command
现在也返回命令执行的输出(适用于 DbgEng 适配器) - 改进:重大文档更新和 Python API 更新
- 修复:支持在非 PE 文件上使用基于 DbgEng 的适配器
- 修复:用户在无界面脚本中暂停正在运行的目标时的竞争条件
- 修复:堆栈跟踪符号化的各种问题
- 修复:正确转义寄存器注释
- 修复:当文件无法在 Linux/macOS 上执行时 (sysin),允许选择并使用 LLDB 适配器进行远程调试
- 修复:点击 “Install WinDbg/DbgEng” 后 Windows 下崩溃
- 修复:“Run Script” 之前与调试器不兼容导致崩溃
- 新增 API:
restart_and_wait
重启目标并等待操作完成
✅ 企业版
提醒: 所有 4.2 的 Enterprise 稳定客户端构建现在均标记为 “Ultimate”,因为我们已经合并了这些版本。这意味着所有 Enterprise 客户都可以免费获得我们新的 Ultimate 独占功能。Enterprise 服务器仍然是一个独立产品。
- 功能: 使用 GitLab 进行 SSO 的客户现在可以将认证限制为特定组,而不是整个组织
- 功能: 项目导入现在有一个选项可跟随符号链接
- 修复: 许可证对话框现在将 Enter 键绑定为 “Start” 而不是 “Log Out”
- 修复: 离线时不再错误地显示 “remote id has changed”,而是正确显示 “cannot connect”
- 修复: 远程项目文件夹描述更改不再在其他元数据更新期间丢失
- 修复: 过期线程中潜在的死锁
- 修复: 每次调用
_init_plugins
不再检查许可证 - 修复:
RemoteProject.create_folder
API 不再抛出错误(尽管文件夹已成功创建) - 修复: Rust API 中现在可以正确检出 headless 许可证
✅ 其它
- 更新到 Qt 6.7.2
- C++ 文档现在也包含离线版本
- 多个文档修复
- Demanglers 已开源,并新增 API 允许添加新的 demangler。注意:由于性能限制,我们不建议添加自定义 demangler,因为在初始二进制分析中,FFI 进入热点路径会带来较大的性能损耗。当前插件现在同时构建为插件和核心功能。
- 新增 MSP430 架构开源支持
- 现在支持在没有现有安装的情况下构建插件
下载地址
版本历史:
- Binary Ninja 4.0.5336
- Binary Ninja 4.1.5747
- Binary Ninja 4.1.5902
- Binary Ninja 4.2.6455
Binary Ninja 4.2.6455 for macOS Universal
Binary Ninja 4.2.6455 for Linux x64
Binary Ninja 4.2.6455 for Windows x64
版本列表:
- Binary Ninja 3.5.4526 (macOS, Linux, Windows) - 逆向平台
- Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 逆向平台
- Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 逆向平台
更多:HTTP 协议与安全