吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8380|回复: 32
收起左侧

[Disassemblers] Binary Ninja 3.5来了(2023.9.15)

  [复制链接]
冥界3大法王 发表于 2023-9-21 09:11
image.png image.png
  • 在其他页面嵌入交互式图表
  • 直接链接到有趣的代码
  • 二进制忍者的全部功能,包括我们的反编译器!
局限性但它确实有一些限制:
  • 不如原生客户端功能丰富
  • 无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访问权限
  • 不用于商业目的

免费评分

参与人数 2吾爱币 +3 热心值 +2 收起 理由
ddwwtom + 1 + 1 谢谢@Thanks!
theStyx + 2 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

风吹屁屁凉 发表于 2023-9-21 11:00
{
    "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"
    }
}
 楼主| 冥界3大法王 发表于 2023-9-21 09:12
通过一系列反编译改进,Binary Ninja 3.5 (Coruscant) 已经完成了从超空间dev 对反编译质量进行了更多改进,并在 UI、API、文档、调试器等方面进行了许多其他生活质量改进!以下是最大更改的列表,但不要忘记查看包含更多修复和功能的完整更改列表。主要变化[size=0.8em][/url]MOD/DIV 去优化[size=0.8em][url=https://binary.ninja/2023/09/15/3.5-expanded-universe.html#moddiv-deoptimization]编译器所做的许多使逆向工程变得更加困难的事情之一是使用各种算法优化,特别是模数和除法计算。它们不是使用本机 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)0x2492492492492490
Ghidra 的反编译将是:
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 并且此功能很重要,请考虑切换到我们的开发发布频道,您应该在稳定版本发布后不久就能获得去优化改进!自动变量命名[size=0.8em][/url]改进反编译输出的一种简单方法是为变量提供[url=https://github.com/Vector35/binaryninja-api/issues/2558]更好的默认名称。您可以选择许多可能的默认值,并且在不同的逆向工程工具中可以看到许多不同的策略。在 3.5 之前,Binary Ninja 保留了根据其来源命名的变量。堆栈变量为var_OFFSET,基于寄存器的变量为reg_COUNTER,全局数据变量为 ( data_)。虽然这个方案没有改变,但我们对于可以获得额外信息的情况变得更加智能。例如,如果将变量传递给函数并且变量名称可用,我们现在可以更好地猜测变量名称。这在带有类型库的二进制文件中最为明显。下面是一个示例 EXE 文件,显示了这个新的默认命名:
自动重命名后自动重命名之前
这不是默认名称的唯一样式。Binary Ninja 还将使用更简单的名称来命名循环计数器,例如i、 或j、k等(在嵌套循环的情况下):UEFI支持[size=0.8em][/url]3.5包含全新的[url=https://github.com/Vector35/binaryninja-api/issues/3925]UEFI支持。不仅添加了新的EFI 平台,支持某些内置平台类型和自动识别 UEFI 固件文件,而且我们还发布了官方EFI 解析器插件,可以解析许多 GUID 协议以添加额外的符号和类型信息。正如我们经常在插件中进行补充分析一样,我们在宽松的许可证下发布了 EFI Resolver 插件,欢迎提出PR 或问题!启发式指针分析[size=0.8em][/url]另一种简单但有价值的分析改进是[url=https://github.com/Vector35/binaryninja-api/issues/1189]启发式指针分析。在 3.5 之前,只要在代码中观察到指针的使用,就会创建指针,但在许多情况下(例如虚拟函数指针),识别和创建指针的启发式可以改进未来的分析(例如RTTI 恢复))。当前的实现在analysis.pointerSweep.autorun设置后面默认启用,也可以通过Analysis/Run Pointer Sweep菜单或Run Pointer Sweep命令面板中的操作手动触发。检测指针的条件包括:
  • 不得进行部分重定位(即重定位仅覆盖部分指针值)
  • 不指向二进制文件的开头(避免大量误报)
  • 如果存在重定位,则始终以高置信度创建指针
  • 如果值指向函数或数据变量,则创建一个指针(顺便说一句,因为分析可能会触发多次更新,所以指向非函数或数据变量的指针将放在列表中,以便稍后分析,以防函数或数据进一步分析后显示变量)
死代码消除改进[size=0.8em][/url]与此改进相关的问题[url=https://github.com/Vector35/binaryninja-api/issues/4544]的标题是“改进的堆栈结构别名”,但对大多数用户的最终影响将是更准确地消除死代码。这是为什么?首先,我们来谈谈堆栈变量别名。每当可以通过不同的寻址机制访问内存时,就会发生别名。由于结构基指针可用于访问固定偏移处的成员,因此堆栈结构通常会以程序分析难以跟踪的方式进行修改,而无需仔细进行别名分析。因此,通常最好对潜在的别名堆栈位置做出保守的假设,即使是以错过反编译优化机会为代价。在 3.5 之前,Binary Ninja 相当积极地假设堆栈上的常量值。如果它只看到一个引用写入了一个值,而没有其他写入,那么它会在以后的分析过程中假设该值恒定。但是,如果该值是结构的一部分并且被不同的引用(在本例中为基指针加上偏移量)更改,则这意味着反编译器关于该值是常量的假设是不正确的。此问题与死代码消除(其中常量值导致在已知值时删除条件)相结合意味着 Binary Ninja 正在删除不应删除的活动代码。新改进的分析可以更好地解释变量别名,从而使 Binary Ninja 能够减少不恰当地假设值恒定的情况。当然,此更改的缺点是,有时您确实希望将这些值视为常量以用于数据流/分析目的。值得庆幸的是,这很容易做到。您可以将变量标记为const或使用UIDF设置值,以便持续的数据流传播可以继续,从而可能启用其他反编译优化。类型库反序列化[size=0.8em][/url][url=https://github.com/Vector35/binaryninja-api/issues/3903]在解决#3903之前,第一次在 Binary Ninja 中加载二进制文件时,您可能会遇到长达几秒钟的延迟,因为所有类型库都被反序列化,即使它们与您要打开的文件类型无关。然而,自本版本发布以来,情况已不再如此。现在,类型库可以按需反序列化,从而加快加载时间!最有可能受到这种性能改进影响的用户将是那些批处理文件,其中每个可执行文件也使用一个二进制文件(出于其他原因,这实际上是推荐的行为),尽管当然所有用户都会看到初始加载的非常小的改进次。这在像dogbolt.org这样的情况下也很明显,与其他工具相比,较慢的反序列化速度不成比例地减慢了我们的反编译速度。当您阅读此博客时,新版本应该已上线(实际上有一个默认情况下禁用的偷偷摸摸的“刷新”图标,您可以使用 Web 开发人员控制台来启用使用最新版本重新加载反编译,如果您查看旧版本工具之一的结果)TTD调试[size=0.8em][/url]TTD(Time-Travel Debugging)是一种记录程序或系统的执行轨迹,然后在调试时重播的技术。我们已将 WinDbg 的 TTD 功能集成到我们的调试器中,这使您可以在我们的调试器用户界面中重放 WinDbg 记录的跟踪。当然,此功能仅在此时调试 Windows 二进制文件时才可能实现,但未来对其他具有 TTD 功能的后端的支持正在考虑之中。TTD 与传统调试相比具有无可比拟的优势。它可以为您节省大量时间,因为您不再需要重复重新启动目标。它还可以更轻松地在特定点停止目标。假设一个循环执行了 100 次,并且您想在最后一次迭代时中断目标。这在传统调试中不太容易做到,但在 TTD 中却很简单:只需在循环退出后放置一个断点,然后反向执行几条指令即可。TTD 对于恶意软件分析人员也很有帮助,因为例如,如果有人尝试多次下载有效负载,C&C 服务器可能会拒绝请求。首先,请按照[url=https://docs.binary.ninja/guide/dbgeng-ttd.html]设置说明进行操作并探索 TTD 的潜力!" 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 已毕业[size=0.8em][/url]您可能还记得 MH_FILESET 支持位于3.4 版本的[url=https://binary.ninja/2023/05/03/3.4-finally-freed.html#mh_fileset]实验部分,我们很高兴地宣布它已经毕业并且默认启用!每当您打开包含 MH_FILESET 记录的新 MachO 文件时,您无需执行任何操作即可利用此新功能。实验特点[size=0.8em][/url]实验性功能是产品中附带的功能,但默认情况下处于禁用状态,或者存在已知限制,导致我们无法将其宣传为完全就绪。[url=https://github.com/Vector35/binaryninja-api/issues/new/choose]我们鼓励进行测试,如果您发现此功能有任何问题,请通过GitHubslack其他方式告知我们。组件用户界面[size=0.8em][/url]尽管对组件 UI 进行了一些改进和修复,但我们仍然将其保留在实验类别中,以获得更稳定的版本。我们预计 3.5 版本发布后不久,我们将在即将发布的 4.0 版本中默认启用它。矮人导入[size=0.8em][url=https://binary.ninja/2023/09/15/3.5-expanded-universe.html#dwarf-import]我们之前的官方DWARF 导入插件已被弃用,取而代之的是新的内置插件。但是,它目前仍处于实验阶段,默认情况下处于禁用状态。欢迎进行其他测试,只需进入设置并搜索“dwarf”即可启用导入插件:启用后,加载文件时将自动解析嵌入 DWARF 的 ELF 和 MachO 文件。矮人出口[size=0.8em][/url]虽然默认启用,但 DWARF 导出插件仍被视为实验性的。但是,由于它是通过“导出为 DWARF”操作或插件/导出为 DWARF 菜单项手动触发的,因此默认情况下启用该插件。导出为 DWARF 允许您创建一个包含符号和类型等数据的外部文件,这些数据可能与另一个无法解析 Binary Ninja 数据库格式的工具中的主要可执行文件相关联。目前导出的功能包括:
  • 功能开始
  • 函数名称、类型信息(包括参数名称和类型信息)
  • 数据变量名称/类型
  • 所有其他类型信息
泄漏消失[size=0.8em][url=https://binary.ninja/2023/09/15/3.5-expanded-universe.html#leaks-be-gone]
在我们的标准发布过程测试中,我们发现了上一个开发周期中引入的内存泄漏。当我们测试该修复程序时,我们意识到还有许多其他潜在的漏洞逃避了之前的测试,在过去的几周里,我们花费了大量时间寻找并消除它们。如果您倾向于一次对一个二进制文件进行逆向工程并在会话之间重新启动,许多用例将不会受到影响。但是,如果您之前在同一个会话中打开/关闭了许多二进制文件,那么这些改进可能会导致内存显着减少!先前泄漏的几个示例包括由于某些变基操作、某些调试器操作等而保留的剩余 BinaryView 引用。其他更新[size=0.8em][/url]社区贡献[size=0.8em][url=https://binary.ninja/2023/09/15/3.5-expanded-universe.html#community-contributions]特别感谢(排名不分先后):jprokos26mmaekrtanakalianmeithecatteJJTech0130toolCHAINZemesarealexrpunknowntrojanmkrasnitskiamtalSmoothHackeryrp604ek0在此发布周期期间对我们的开源组件做出的贡献!用户界面更新[size=0.8em][/url]滚动浏览大型流程图的一个常见问题是,当滚动查看图的结构时,很难看到控制流。虽然从这个角度查看节点有助于在心理上将图组织成块,但早期返回可能会引入不可见的控制流,因为您无法轻松看到哪些块具有传出箭头。现在,入口和出口节点将标有从任何缩放级别都可见的指示器,显示控制流发生的位置,包括进入和离开函数。同样,无法返回的块,例如调用abort(),具有与正常返回不同的颜色。这些指示器应该有助于在进行分析时扫描更大的控制流图,并有望在获得函数的第一遍概述知识时提高速度和准确性。
  • 特征:彩虹支架
彩虹大括号是许多文本编辑器的常见功能,现在 Binary Ninja 也支持彩虹大括号。这应该有助于扫描具有复杂条件的行中匹配的括号组,以及标记更深嵌套块的缩进级别。
  • 功能:突出显示大括号会突出显示其匹配的大括号
除了彩虹大括号之外,现在您还可以突出显示大括号(或方括号/圆括号)并查看其匹配的右大括号。通过向您显示操作和指令的分组,这应该可以提高您分析复杂表达式的能力。
二元视图改进[size=0.8em][/url]分析[size=0.8em][/url]应用程序编程接口[size=0.8em][/url]架构[size=0.8em][/url]类型库/平台[size=0.8em][/url]调试器[size=0.8em][/url]企业[size=0.8em][/url]文档[size=0.8em][/url]各种各样的[size=0.8em][/url]…当然,还有这里未明确列出的所有常见的“许多杂项崩溃和修复”。在我们的完整里程碑列表中查看它们:https://github.com/Vector35/binaryninja-api/milestone/13?lined =1
vindia 发表于 2023-9-21 09:24
zhangsan2022 发表于 2023-9-21 09:45
感谢分享,一直在用的好软件。
 楼主| 冥界3大法王 发表于 2023-9-21 09:50
新版本比我用的3.0多了调试器

点评

这个跳跳忍者的keygen是高科技,根据每个版本的一个地址算出来证书dat,不简单。  详情 回复 发表于 2023-9-22 16:28
huang9126 发表于 2023-9-21 09:54
冥界3大法王 发表于 2023-9-21 09:50
新版本比我用的3.0多了调试器

你好,想问一下,提供下载吗?
 楼主| 冥界3大法王 发表于 2023-9-21 10:08
huang9126 发表于 2023-9-21 09:54
你好,想问一下,提供下载吗?

Demo目录里边
"C:\Program Files\Vector35\BinaryNinja\plugins\dbgeng\X64 Debuggers And Tools-x64_en-us.msi"
自己安装
hulin928 发表于 2023-9-21 11:57
谢谢分享!!!
sunzhw 发表于 2023-9-21 12:13
感谢分享,有点高大上,下载试试
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 01:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表