具备逆向 x86 二进制文件的能力,即使在信息安全行业之外也是一项重要技能。然而,尽管培训材料非常丰富,这仍然是一项难以掌握的技能。许多学生表示,即便只是在简单的二进制文件上取得些许进展,也需要大量的背景知识,这让他们感到沮丧。
Binary Ninja 常常以相对较低的价格、简洁的界面和易用性为卖点向学生推广。其低级和中级中间语言也提供了一种简单的方式来理解指令的作用。本项目旨在让二进制文件的执行过程更易于可视化,从而使 Binary Ninja 成为对初学者更友好的工具。
本项目是 NCC Group 2017 年暑期实习项目的成果。其中的可视化调试组件可以被视为 Microcorruption(由 Matasano Security 制作的嵌入式安全 CTF)的精神续作。后续更新将在 https://github.com/ehennenfent/binja_dynamics 中跟踪。 NCC Group 对 2017 年 8 月 18 日之后对该仓库所做的任何进一步修改不承担责任。
在你的 Binary Ninja 插件文件夹中运行:
git clone https://github.com/ehennenfent/binja_dynamics.git
cd binja_dynamics
./install.sh
加载二进制文件后,点击工具菜单中的 Enable Dynamic Analysis Tools 项。此时会弹出一个调试器窗口,你可以通过工具栏上的按钮控制它。当你逐步执行时,界面会实时更新以反映程序状态。借助 Binjatron,当前指令和任何断点都会在二进制视图中高亮显示。对于每个内存地址以及寄存器,只要其值因上一条指令的执行而发生变化,该值就会以橙色高亮显示。类似地,当前栈帧的顶部和底部(以及预测的返回地址位置)也会被高亮,以便初学者更容易识别内存中哪些部分是值得关注的重点。回溯查看器会显示当前栈帧的回溯信息,并提供一个按钮,可自动将二进制视图跳转到插件预期找到返回地址的内存地址所对应的位置。在某些函数中,栈帧的销毁方式与插件预期不符,因此这个预测的返回地址可能并不总是正确的。

(在上面的截图中,基址指针以橄榄绿显示)
有时可能需要查阅源代码才能理解接口的确切行为。考虑到这一点,许多设计决策和实现细节都在内联注释中进行了说明。
wiki 的内容仍然相对较少,但诸如“绊脚石”清单和开发日志等内容可能对故障排除有所帮助。
建议查阅 binja_sensei 仓库 中的示例,它们可能有助于你入门。
除 Binary Ninja 之外,install.sh 会为你处理这些依赖项。