Binary Ninja 3.5来了(2023.9.15)
[*]在其他页面嵌入交互式图表
[*]直接链接到有趣的代码
[*]二进制忍者的全部功能,包括我们的反编译器!
局限性但它确实有一些限制:
[*]不如原生客户端功能丰富
[*]无API
[*]没有插件
[*]性能限制
[*]必须向 V35 提交二进制文件
视窗版:https://cdn.binary.ninja/installers/BinaryNinja-demo.exe
苹果版:https://cdn.binary.ninja/installers/BinaryNinja-demo.dmg
Linux版:https://cdn.binary.ninja/installers/BinaryNinja-demo.zip
此 Binary Ninja 演示版本可供您评估其基本功能并查看它是否满足您的需求。如果演示无法解答您的问题,请联系我们。局限性
[*]只能加载 x86、x86_64 和 ARMv7 二进制文件
[*]没有插件
[*]不加载或保存数据库
[*]单线程
[*]没有API访问权限
[*]不用于商业目的
{
"version":"3.5.4526",
"hashes":{
"BinaryNinja-headless.zip":"af4645c06d671850d31b3a21cdb8d997a98d395150b9cd54427e7c9aa870d3ab",
"BinaryNinja-personal.zip":"c21e7959169b3a83780326e3cbfce4c915dc657c6e5a237b96650284bd83210d",
"BinaryNinja-personal.dmg":"9cc4fe17e1ed66b58fe169830369f5afbe0aa432bb4bb586af3eea0c220e9935",
"BinaryNinja-personal.exe":"f18f6a25163da31117ccd4791dc8ca4d0cc572ef13ff0568c4b8f167cebf443b",
"BinaryNinja.zip":"c7a977d56c4ba9fbc6c09e2610d4763e2b9fea3df6ac91f3e9d79496f645ce6b",
"BinaryNinja.dmg":"393597b9201561c9a46f70ad60cdbc04bcd891460e3c0ba8e80b002d5a930d65",
"BinaryNinja.exe":"3566787d6a48a0996a8ad22cbccfec69eafcd20b57198a702d7e532ffef54e7d",
"BinaryNinja-Enterprise.zip":"5462f8f95d3222f0c8f3adf84affdc6ed367997f67c6134e6cc01bbf630ae8a1",
"BinaryNinja-Enterprise.dmg":"8c2d28b957fee1793f73d2ba9760a2e48eddbe5d5e98a47b34a949a10340e37f",
"BinaryNinja-Enterprise.exe":"b49a966138968a992100edac18756ea11c00756fe7f0e89914cbc181bdfbe83e",
"BinaryNinja-demo.zip":"4226bb75caf6f201c9db7fe86e93730f9c3fdc01fd2eea034c8426c0bca48335",
"BinaryNinja-demo.dmg":"a2d8e0cc8d84da21ebfe51bdd1974302baa5c0ac70d04206856102d4775a4bbf",
"BinaryNinja-demo.exe":"80360a996ad83d8b3922537be43081c137943f9ae15688b719185e9a74705fe9"
}
} 通过一系列反编译改进,Binary Ninja 3.5 (Coruscant) 已经完成了从超空间dev 对反编译质量进行了更多改进,并在 UI、API、文档、调试器等方面进行了许多其他生活质量改进!以下是最大更改的列表,但不要忘记查看包含更多修复和功能的完整更改列表。
[*]MOD/DIV 去优化
[*]自动变量命名
[*]UEFI支持
[*]启发式指针分析
[*]死代码消除改进
[*]类型库反序列化
[*]TTD调试
[*]MH_FILESET 已毕业
[*]泄漏消失
[*]实验特点
[*]组件用户界面
[*]矮人导入
[*]矮人出口
[*]还有很多
主要变化MOD/DIV 去优化https://binary.ninja/blog/images/3.5-release/deoptimization.png编译器所做的许多使逆向工程变得更加困难的事情之一是使用各种算法优化,特别是模数和除法计算。它们不是使用本机 CPU 指令来实现它们,而是使用带有魔术常量的移位和乘法,这些常量在固定整数大小上操作时具有与本机除法指令相同的效果。有几种方法可以尝试恢复原始除法,这种方法更加直观且更易于推理。除法去优化插件演示的一个示例是使用z3等求解器来尝试恢复简化。不幸的是,这种大规模实现以及跨编译器和架构的性能不仅很慢,而且实际上至少与更简单的启发式方法一样失败。最后,有几种基于检测特定模式(基于 asm 或 IL)的启发式方法可用于识别模式。这是我们为除法/模去优化功能选择的路线。与大多数启发式方法一样,这并不是一个万无一失的机制!但也没有其他工具是完全准确的。例如,当使用 clang 编译为 x64 时,所有测试的工具都无法一致地重建具有小立即除数的 16 位除法:国际开发协会:
__int64 __fastcall i16_div_by_103(int a1){return ((unsigned int)(20361 * a1) >> 31) + ((20361 * a1) >> 21);}吉德拉:
int _i16_div_by_103(int param_1){return (param_1 * 0x4f89 >> 0x15) - (param_1 * 0x4f89 >> 0x1f);}二进制忍者:
uint64_t _i16_div_by_103(int32_t arg1) int32_t rax = arg1 * 0x4f89 return zx.q((rax s>> 0x15) + (rax u>> 0x1f))所有现有工具在覆盖范围上都存在一些差距,并且还存在其他问题,例如如何处理 2 的幂操作数的除法和模计算。这些通常可以表示为位移位或掩码操作,并且与功能相同的有意移位/掩码操作没有区别。错误的实施也会产生不正确的结果。例如,考虑除以 7 的情况。在极值处,过于简单化的启发式方法可能会错误地检测到优化的除法,该除法会由于分数舍入误差而在极端情况下失败,并且相反,可能会错误地检测到实际的优化实现。给出以下两个类似的实现:
>>> def div_by_seven(input):... x8 = (input * 0x2492492492492493) >> 0x40... x9 = input - x8... x8_1 = x8 + (x9 >> 1)... return x8_1 >> 2>>> def not_div_by_seven(input):... return (input * 0x2492492492492493) >> 0x40...>>> not_div_by_seven(2**64-10)0x2492492492492491>>> div_by_seven(2**64-10)0x2492492492492490Ghidra 的反编译将是:
ulong _u64_div_7(ulong param_1){return param_1 / 7 + (param_1 - param_1 / 7 >> 1) >> 2;}ulong _u64_not_really_div_7(ulong param_1){return param_1 / 7;}二进制Ninja的反编译:
uint64_t _u64_div_7(int64_t arg1) __pure{ return (arg1 / 7);}uint64_t _u64_not_really_div_7(int64_t arg1) __pure{ return ((int64_t)((arg1 * 0x2492492492492493) >> 0x40));}也就是说,Binary Ninja 的实现还没有完成。特别是,由于提升问题,目前缺乏对armv7的支持(我们将在开发版稳定发布后不久解决该问题),而armv8、x86和x64在所有可能的整数大小和编译器上的平均支持率约为55%。去优化。如果您好奇,我们使用 clang、gcc 和 msvc 在上述所有四种架构上测试了包含 8、16、32 和 64 的所有整数大小的矩阵,包括有符号和无符号的 div 和 mod。如果您正在使用 armv7 并且此功能很重要,请考虑切换到我们的开发发布频道,您应该在稳定版本发布后不久就能获得去优化改进!自动变量命名改进反编译输出的一种简单方法是为变量提供更好的默认名称。您可以选择许多可能的默认值,并且在不同的逆向工程工具中可以看到许多不同的策略。在 3.5 之前,Binary Ninja 保留了根据其来源命名的变量。堆栈变量为var_OFFSET,基于寄存器的变量为reg_COUNTER,全局数据变量为 ( data_)。虽然这个方案没有改变,但我们对于可以获得额外信息的情况变得更加智能。例如,如果将变量传递给函数并且变量名称可用,我们现在可以更好地猜测变量名称。这在带有类型库的二进制文件中最为明显。下面是一个示例 EXE 文件,显示了这个新的默认命名:
https://binary.ninja/blog/images/3.5-release/default_names_after.png自动重命名后https://binary.ninja/blog/images/3.5-release/default_names_before.png自动重命名之前这不是默认名称的唯一样式。Binary Ninja 还将使用更简单的名称来命名循环计数器,例如i、 或j、k等(在嵌套循环的情况下):https://binary.ninja/blog/images/3.5-release/for-loop.pngUEFI支持3.5包含全新的UEFI支持。不仅添加了新的EFI 平台,支持某些内置平台类型和自动识别 UEFI 固件文件,而且我们还发布了官方EFI 解析器插件,可以解析许多 GUID 协议以添加额外的符号和类型信息。https://binary.ninja/blog/images/3.5-release/uefi.png正如我们经常在插件中进行补充分析一样,我们在宽松的许可证下发布了 EFI Resolver 插件,欢迎提出PR 或问题!启发式指针分析另一种简单但有价值的分析改进是启发式指针分析。在 3.5 之前,只要在代码中观察到指针的使用,就会创建指针,但在许多情况下(例如虚拟函数指针),识别和创建指针的启发式可以改进未来的分析(例如RTTI 恢复))。当前的实现在analysis.pointerSweep.autorun设置后面默认启用,也可以通过Analysis/Run Pointer Sweep菜单或Run Pointer Sweep命令面板中的操作手动触发。检测指针的条件包括:
[*]不得进行部分重定位(即重定位仅覆盖部分指针值)
[*]不指向二进制文件的开头(避免大量误报)
[*]如果存在重定位,则始终以高置信度创建指针
[*]如果值指向函数或数据变量,则创建一个指针(顺便说一句,因为分析可能会触发多次更新,所以指向非函数或数据变量的指针将放在列表中,以便稍后分析,以防函数或数据进一步分析后显示变量)
死代码消除改进与此改进相关的问题的标题是“改进的堆栈结构别名”,但对大多数用户的最终影响将是更准确地消除死代码。这是为什么?首先,我们来谈谈堆栈变量别名。每当可以通过不同的寻址机制访问内存时,就会发生别名。由于结构基指针可用于访问固定偏移处的成员,因此堆栈结构通常会以程序分析难以跟踪的方式进行修改,而无需仔细进行别名分析。因此,通常最好对潜在的别名堆栈位置做出保守的假设,即使是以错过反编译优化机会为代价。在 3.5 之前,Binary Ninja 相当积极地假设堆栈上的常量值。如果它只看到一个引用写入了一个值,而没有其他写入,那么它会在以后的分析过程中假设该值恒定。但是,如果该值是结构的一部分并且被不同的引用(在本例中为基指针加上偏移量)更改,则这意味着反编译器关于该值是常量的假设是不正确的。此问题与死代码消除(其中常量值导致在已知值时删除条件)相结合意味着 Binary Ninja 正在删除不应删除的活动代码。新改进的分析可以更好地解释变量别名,从而使 Binary Ninja 能够减少不恰当地假设值恒定的情况。当然,此更改的缺点是,有时您确实希望将这些值视为常量以用于数据流/分析目的。值得庆幸的是,这很容易做到。您可以将变量标记为const或使用UIDF设置值,以便持续的数据流传播可以继续,从而可能启用其他反编译优化。类型库反序列化在解决#3903之前,第一次在 Binary Ninja 中加载二进制文件时,您可能会遇到长达几秒钟的延迟,因为所有类型库都被反序列化,即使它们与您要打开的文件类型无关。然而,自本版本发布以来,情况已不再如此。现在,类型库可以按需反序列化,从而加快加载时间!最有可能受到这种性能改进影响的用户将是那些批处理文件,其中每个可执行文件也使用一个二进制文件(出于其他原因,这实际上是推荐的行为),尽管当然所有用户都会看到初始加载的非常小的改进次。这在像dogbolt.org这样的情况下也很明显,与其他工具相比,较慢的反序列化速度不成比例地减慢了我们的反编译速度。当您阅读此博客时,新版本应该已上线(实际上有一个默认情况下禁用的偷偷摸摸的“刷新”图标,您可以使用 Web 开发人员控制台来启用使用最新版本重新加载反编译,如果您查看旧版本工具之一的结果)TTD调试TTD(Time-Travel Debugging)是一种记录程序或系统的执行轨迹,然后在调试时重播的技术。我们已将 WinDbg 的 TTD 功能集成到我们的调试器中,这使您可以在我们的调试器用户界面中重放 WinDbg 记录的跟踪。当然,此功能仅在此时调试 Windows 二进制文件时才可能实现,但未来对其他具有 TTD 功能的后端的支持正在考虑之中。TTD 与传统调试相比具有无可比拟的优势。它可以为您节省大量时间,因为您不再需要重复重新启动目标。它还可以更轻松地在特定点停止目标。假设一个循环执行了 100 次,并且您想在最后一次迭代时中断目标。这在传统调试中不太容易做到,但在 TTD 中却很简单:只需在循环退出后放置一个断点,然后反向执行几条指令即可。TTD 对于恶意软件分析人员也很有帮助,因为例如,如果有人尝试多次下载有效负载,C&C 服务器可能会拒绝请求。首先,请按照设置说明进行操作并探索 TTD 的潜力!https://binary.ninja/blog/images/3.5-release/graduation.png" class="image max-height-300" style="box-sizing: border-box; transition-property: box-shadow; transition-duration: 0.31s; vertical-align: middle; border-style: none; max-height: 300px; max-width: 100%; float: right; padding-left: 30px; display: block; margin-right: auto; margin-bottom: 23px; margin-left: auto; text-shadow: rgb(153, 153, 153) 0.01em 0.01em 0.1em !important;">MH_FILESET 已毕业您可能还记得 MH_FILESET 支持位于3.4 版本的实验部分,我们很高兴地宣布它已经毕业并且默认启用!每当您打开包含 MH_FILESET 记录的新 MachO 文件时,您无需执行任何操作即可利用此新功能。实验特点实验性功能是产品中附带的功能,但默认情况下处于禁用状态,或者存在已知限制,导致我们无法将其宣传为完全就绪。我们鼓励进行测试,如果您发现此功能有任何问题,请通过GitHub、slack或其他方式告知我们。组件用户界面尽管对组件 UI 进行了一些改进和修复,但我们仍然将其保留在实验类别中,以获得更稳定的版本。我们预计 3.5 版本发布后不久,我们将在即将发布的 4.0 版本中默认启用它。https://binary.ninja/blog/images/3.4-release/ComponentsUI.png矮人导入我们之前的官方DWARF 导入插件已被弃用,取而代之的是新的内置插件。但是,它目前仍处于实验阶段,默认情况下处于禁用状态。欢迎进行其他测试,只需进入设置并搜索“dwarf”即可启用导入插件:https://binary.ninja/blog/images/3.5-release/dwarf-settings.png启用后,加载文件时将自动解析嵌入 DWARF 的 ELF 和 MachO 文件。矮人出口虽然默认启用,但 DWARF 导出插件仍被视为实验性的。但是,由于它是通过“导出为 DWARF”操作或插件/导出为 DWARF 菜单项手动触发的,因此默认情况下启用该插件。https://binary.ninja/blog/images/3.5-release/dwarf-export.png导出为 DWARF 允许您创建一个包含符号和类型等数据的外部文件,这些数据可能与另一个无法解析 Binary Ninja 数据库格式的工具中的主要可执行文件相关联。目前导出的功能包括:
[*]功能开始
[*]函数名称、类型信息(包括参数名称和类型信息)
[*]数据变量名称/类型
[*]所有其他类型信息
泄漏消失在我们的标准发布过程测试中,我们发现了上一个开发周期中引入的内存泄漏。当我们测试该修复程序时,我们意识到还有许多其他潜在的漏洞逃避了之前的测试,在过去的几周里,我们花费了大量时间寻找并消除它们。如果您倾向于一次对一个二进制文件进行逆向工程并在会话之间重新启动,许多用例将不会受到影响。但是,如果您之前在同一个会话中打开/关闭了许多二进制文件,那么这些改进可能会导致内存显着减少!先前泄漏的几个示例包括由于某些变基操作、某些调试器操作等而保留的剩余 BinaryView 引用。其他更新社区贡献特别感谢(排名不分先后):jprokos26、mmaekr、tanakalian、meithecatte、JJTech0130、toolCHAINZ、emesare、alexrp、unknowntrojan、mkrasnitski、amtal、SmoothHacker、yrp604和ek0在此发布周期期间对我们的开源组件做出的贡献!用户界面更新
[*]功能:进入/退出块 UI 指示器
滚动浏览大型流程图的一个常见问题是,当滚动查看图的结构时,很难看到控制流。虽然从这个角度查看节点有助于在心理上将图组织成块,但早期返回可能会引入不可见的控制流,因为您无法轻松看到哪些块具有传出箭头。现在,入口和出口节点将标有从任何缩放级别都可见的指示器,显示控制流发生的位置,包括进入和离开函数。同样,无法返回的块,例如调用abort(),具有与正常返回不同的颜色。这些指示器应该有助于在进行分析时扫描更大的控制流图,并有望在获得函数的第一遍概述知识时提高速度和准确性。https://binary.ninja/blog/images/3.5-release/graphview.png
[*]特征:彩虹支架
彩虹大括号是许多文本编辑器的常见功能,现在 Binary Ninja 也支持彩虹大括号。这应该有助于扫描具有复杂条件的行中匹配的括号组,以及标记更深嵌套块的缩进级别。https://binary.ninja/blog/images/3.5-release/rainbowbraces.png
[*]功能:突出显示大括号会突出显示其匹配的大括号
除了彩虹大括号之外,现在您还可以突出显示大括号(或方括号/圆括号)并查看其匹配的右大括号。通过向您显示操作和指令的分组,这应该可以提高您分析复杂表达式的能力。https://binary.ninja/blog/images/3.5-release/highlightmatching.png
[*]功能:换行注释的新设置 ( ui.view.common.commentWidth)
[*]功能: 双击枚举现在可以转到类型侧栏中的类型
[*]特点: N热键可用于在使用时命名枚举成员
[*]功能:选择数组标记将显示所有成员的交叉引用,而不仅仅是第一个成员,而选择索引将显示特定的交叉引用
[*]功能: 现在可以使用常用的热键或菜单项从标签列表中复制标签的内容
[*]功能:Restart with Plugins Disabled为更轻松地进行故障排除而创建的新操作
[*]改进: “复制”和“复制为”现在复制完整的源字符串,而不仅仅是 UI 中呈现的截断字符串
[*]改进:日志窗口中的日志类型下拉列表会记住之前的选择
[*]改进: “创建类型”对话框不再需要在所有行末尾添加分号
[*]改进:更新的插件现在可以记住其启用/禁用状态
[*]改进:所有过滤器框现在在过滤之前有500 毫秒的延迟,以在存在大量项目时提高性能
[*]改进: Add Segment对话框具有适当的按钮并且不再可调整大小
[*]改进:创建的标签刷新 UI
[*]改进:狭窄的装订线可以处理多个标签
[*]改进:将鼠标悬停在函数指针的数据变量上,现在将目标显示为代码,而不是数据
[*]改进:除了十进制之外,“创建数组”对话框现在还允许十六进制项目计数
[*]改进:在 HLIL 中 更好地呈现枚举逻辑
[*]改进:可以覆盖非顶级指令的 HLIL 调用上的调用类型
[*]改进:指向结构内部的数据变量显示为字段/偏移量,并将地址作为注释
[*]改进:将鼠标悬停在堆栈局部变量上现在显示十六进制偏移量,而不是十进制
[*]改进:选择带引号的字符串将选择内容,而不是引号,并且如果字符串被截断,仍然可以复制完整值
[*]改进:宽字符串在 UI 中带有前缀(“U”代表 32 位,“u”代表 16 位)在视觉上是不同的
[*]改进:日志类别在选项卡和重新启动之间保持不变
[*]改进:重复变量名称对话框文本更容易理解
[*]改进:数据库的默认名称现在包含原始文件扩展名
[*]改进:在注释对话框中输入现在提交框,使单行注释速度更快(Shift-Enter 仍可用于在对话框中输入换行符)
[*]改进:外部参照过滤器文本显示过滤项目的数量,而不是显示项目的数量
[*]改进:现在在图形视图中默认启用“显示地址”设置
[*]改进: “创建所有成员”不再隐藏继承的成员
[*]改进:十六进制视图不再允许选择可用内容之外的内容
[*]改进:当“复制为”失败时,错误消息现在更有助于说明选择不起作用的原因
[*]改进:修改数组中较远的偏移量在更改完成后不再捕捉到数组的顶部
[*]改进:长日志窗口消息现在换行
[*]改进:将鼠标悬停在包含函数指针的 DataVariable 上现在会显示函数预览
[*]改进: “在新窗格中打开”添加到组件上下文菜单中
[*]改进:即使窗格未聚焦,十六进制视图也会显示当前偏移量
[*]修复:与字体 相关的几个错误,特别是Windows 10 HiDPI显示器上的字体别名
[*]修复: 大地址空间现在可以正确呈现注释和标签
[*]修复:评论破坏内联和弹出编辑
[*]修复:从日志窗口复制有时会复制额外的行
[*]修复:选择枚举对话框有时显示为空,或选择错误的元素
[*]修复:功能图现在与多个窗格正确同步,包括选择搜索结果时
[*]修复:日志窗口不再错误地计算宽度
[*]修复:日志窗口字体间距
[*]修复:上游 QT 解析默认窗口位置缓慢迁移
[*]修复:在 ARM/Thumb 二进制文件上无法重命名结构成员
[*]修复:针对组件视图修复重置过滤器
[*]修复:枚举成员有时渲染不正确
[*]修复:反汇编视图有时会有错误的类型注释
[*]修复: 枚举渲染时崩溃
[*]修复:某些 HLIL 调用无法设置堆栈调整集
[*]修复:重命名类型的标题错误
[*]修复:导入标头对话框中的示例占位符
[*]修复: MacOS 上的捏合缩放稍微偏离中心
[*]修复:贴纸标题本身不太混乱
[*]修复: 所选字符串文字周围奇怪的突出显示
[*]修复:显示/隐藏特征图操作不上下文相关
[*]修复:由于在搜索所有功能时不等待生成的分析,UI 中的文本搜索可能会产生不一致的结果
[*]修复:解决了与脚本文件和用户文件夹路径中的非 ASCII 字符相关的多个问题
[*]修复: 使用时出现虚假警告show_html_report
[*]修复:表格视图中交叉引用箭头方向
[*]修复: 在同时显示分割线性/十六进制视图的情况下编辑字节时可能会挂起
[*]修复:日志窗口中的地址不可点击的回归
二元视图改进
[*]修复:没有符号信息的 MachO 文件现在可以正确加载
[*]修复: Objective-C 工作流程修复了一些 cfstrings 未渲染的问题
分析
[*]特征:函数可以标记为__pure
[*]改进:现在可以更快地分析具有多次重定位的大文件
[*]改进:内联字符串现在有一个关联的类型
[*]改进: 对死代码消除行为的多项改进
[*]改进:综合内置函数不再模糊结构成员分配
[*]改进:内置 memcpy 将所有字节显示为转义十六进制
[*]改进:更好地交叉引用拇指/手臂功能
[*]改进: 合成内置轮廓的向后兼容性
[*]改进:分析跨基本块边界初始化的堆栈数据
[*]改进:过于热心的函数识别器现在不那么热心了
[*]改进:现在忽略重复的符号表条目
[*]改进:更改数据值现在会自动更新因变量的分析
[*]改进:许多模板简化器更改和更新(包括改进的重载运算符简化!)
[*]修复:对 PDB 支持进行多项修复,包括修复以 0x7f 为前缀的符号渲染、RTTI 类型解析以及下载 PDB 的缓存问题
[*]修复:删除了一些宽字符串检测误报
[*]修复:修复了在 Windows目标上解析 __packed 时的对齐方式
[*]修复:合成内置函数现在具有正确的参数和字节数并正确更新
[*]修复:线性扫描中可能出现无限循环
[*]修复:签名匹配死锁
[*]修复:大纲解析器中的 崩溃(堆栈耗尽)
[*]修复:之前 maxFunctionSize 限制为 0
[*]修复: analysis.limits.maxFunctionSize一致并0导致被忽略,不进行分析时跳过所有函数(如果之前使用此跳过分析,请使用该analysis.initialAnalysisHold设置)
应用程序编程接口
[*]功能: BinaryReader添加了ReadPointerAPI
[*]功能:现在可以迭代DataVariable
[*]功能: 添加AnalysisContextAPI (感谢JJTech!)
[*]功能: 新的异常安全撤消 APIBinaryView.undoable_transaction()
[*]改进:对撤消 API 和文档进行多项改进 ( 1 , 2 , 3 )
[*]改进: py.typed现在包含在已发布的版本中
[*]改进: binaryninjacore.h 现在是有效的 C(而不是 C++)
[*]改进:导出头文件可以更好地处理几种边缘情况,以始终生成可解析的 C
[*]改进: open_view /load错误消息更加有用,API 本身现在与在 UI 中打开更加一致
[*]功能: TypedDataAccessor现在有一个迭代器,可以更轻松地打印
[*]修复:多项改进(1、2、3)_parse_expression
[*]修复:通过类型 API 枚举值具有正确的符号
[*]修复: load API 可正确处理原始字节
[*]修复: 撤消删除功能会正确恢复所有相关注释
[*]修复:表达式解析器 API 遵循文件字节顺序(在“转到”对话框中使用)
架构
[*]功能:支持R_MIPS_REL32 重定位,以及MIPS 上的其他几个主要 PLT 改进
[*]改进:在MIPS上提升LWL/LWR
[*]改进: UBFX在Thumb中提升
[*]改进:拇指IT指令提升
[*]改进: 自动检测ELF 文件中的 MIPS64
[*]改进: MIPS64协处理器和额外提升
[*]改进:ARMv7 SXTH 提升
[*]修复: movsb/stosb 提升的字节计数不正确
[*]修复:即使 const 是符号,MOV 偏移基数的提升也使用 LLIL_CONST_POINTER
[*]修复: ROL/SHL 指令现在可以使用恒定传播
[*]修复: ARMv7 BFI 提升不正确
[*]修复: R_AARCH64_CALL26在变基后不再中断
[*]修复:注释中的错误__ptr_offset
类型库/平台
[*]功能:平台现在可以提供_start原型
[*]功能:从类型库引用类型将维护到该库的映射
[*]修复: MIPS 类型库位于错误的文件夹中
调试器
[*]功能:添加 DbgEng TTD支持
[*]改进:添加新的菜单项以在新窗格中查看寄存器值
[*]改进:避免在 LLIL不可用时触发函数的完整分析
[*]改进: DbgEng 适配器在目标停止后打印目标状态
[*]改进:从调试器控制台发送空输入会重复最后一个命令
[*]改进:运行命令后保持调试器控制台聚焦
[*]修复:打开非 ASCII文件名时崩溃
[*]修复: LLDB 适配器正确报告寄存器的宽度
[*]修复: DbgEng TTD 隐藏其值始终为空的YMM 和 ZMM 寄存器
[*]修复: 如果上次使用的调试适配器不可用,则打开数据库时崩溃
企业
[*]改进:如果您上传现有文件,现在会自动跳过“使用选项打开” .bndb(如果您上传新的二进制文件,默认情况下仍会显示)
[*]改进:右键菜单、操作菜单和命令面板现在都包含与远程浏览器相同的操作,并且现在可以绑定到热键
[*]改进:文件夹现在也可以有描述
[*]改进:记录了客户在服务器部署期间遇到的一些边缘情况,并澄清了有关设置自定义 SSO 提供商的说明
[*]改进:企业 API 文档现已包含在https://api.binary.ninja/中
[*]修复:如果没有合并新内容,重新分析不再在同步时触发
[*]修复:如果分析缓存因过时而被客户端丢弃,则不再下载分析缓存
[*]修复:如果分析缓存因合并而无效,则不再上传分析缓存
[*]修复:上传数据库不再使数据库在上传后保持打开状态
[*]修复:文件夹状态和内容现在可以在刷新时正确更新
[*]修复:现在在文件之间切换时同步状态会立即更新
[*]修复:在特定情况下对文件夹进行排序时崩溃
[*]修复:上传文件的文件扩展名不再被删除
[*]修复: “编辑远程”对话框现在具有最小尺寸
[*]修复:如果打开多个“远程浏览器”选项卡,导航不再中断
文档
[*]功能: UIDF现已记录
[*]功能:有关函数/开始/大小概念的文档
[*]功能:关于编写UI 插件的更好文档
[*]改进: Unicode 代码块的设置现在包括“UTF”以提高可发现性
[*]修复: .callees文档已更正
各种各样的
[*]改进: 对linux-setup.sh脚本的多项改进
[*]改进: UI 和 API 类型解析现在对尾随字符更加宽松;
[*]改进:现在可以在没有默认架构的视图上进行转换,并且不会发出警告
[*]改进:当分解器指定不存在的类型时,将创建临时空结构/类型
[*]改进: Python 3.11 将自动添加到可能的解释器的设置列表中(如果找到)
[*]修复: Beta database_viewer 插件在加载时遇到竞争条件
[*]修复:当指针文本标记为负数时,0x可以省略前导
[*]修复: PseudoC 可能有不平衡的括号
…当然,还有这里未明确列出的所有常见的“许多杂项崩溃和修复”。在我们的完整里程碑列表中查看它们:https://github.com/Vector35/binaryninja-api/milestone/13?lined =1 感谢分享,下下来试试看 感谢分享,一直在用的好软件。 新版本比我用的3.0多了调试器 冥界3大法王 发表于 2023-9-21 09:50
新版本比我用的3.0多了调试器
你好,想问一下,提供下载吗? huang9126 发表于 2023-9-21 09:54
你好,想问一下,提供下载吗?
Demo目录里边
"C:\Program Files\Vector35\BinaryNinja\plugins\dbgeng\X64 Debuggers And Tools-x64_en-us.msi"
自己安装 谢谢分享!!! 感谢分享,有点高大上,下载试试