
Tenet是用于探索执行跟踪的IDA Pro插件。该插件的目的是提供更自然的人类控制,以通过给定的二进制浏览执行跟踪。这项工作的基础源于研究在软件中检查和提炼复杂执行模式的新方法或创新方法的愿望。
有关此项目的更多上下文,请阅读有关其初始版本的博客文章。
特别感谢Qira / Geohot等人。为了灵感。
Tenet是一个跨平台(Windows,MacOS,Linux)Python 3插件。它需要零第三方依赖性,使代码既便携又易于安装。
从拆卸器的Python控制台中,运行以下命令以找到其插件目录:
import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins")将此存储库/plugins/文件夹的内容复制到列出的目录。
重新启动您的拆卸器。
此插件仅支持IDA 7.5和更新的插件。
正确安装后,拆卸器将有一个新的菜单条目。这可用于将外部收集的执行跟踪加载到宗旨中。

由于这是最初的版本,因此Tenet仅接受简单的人类可读文本轨迹。有关跟踪格式,限制和参考示踪剂的其他信息,请参考此存储库中的跟踪读数。
在使用TENET时,插件将“绘制”跟踪,以指示从您当前的主动执行跟踪中的当前位置向前(蓝色)和向后(红色)的执行流。

要随着时间的step ,您只需滚动,而盘旋在拆卸器右侧的时间轴上时,您只需滚动即可。要step over函数呼叫,请在滚动时保持SHIFT 。
跟踪时间轴将停靠在拆卸器的右侧。该小部件用于沿着跟踪时间表可视化不同类型的事件,并如上所述执行基本导航。

通过单击和拖动时间表,可以放大执行跟踪的特定部分。可以重复多次重复此操作以达到所需的粒度。
双击“寄存器”窗口中的指令指针将以红色突出显示,并揭示指令在整个跟踪时间轴上执行的所有位置。

要在执行之间跳跃,请在悬停突出显示的指令指针时向上或向下滚动。
此外,您可以右键单击拆卸清单中,然后选择基于导航的菜单条目之一,以快速寻求执行感兴趣的指令。

IDA的本机F2 Hotkey也可用于在任意说明上设置断点。
通过双击堆栈或内存视图中的字节,您将立即看到所有读取/写入该地址,可在整个跟踪时间轴上可视化。黄色表示内存读取,蓝色表示记忆写入。

可以使用对执行断点的相同技术导航内存断点。双击字节,然后滚动滚动,悬停在选定的字节中以寻求其每个访问的跟踪。
如果您有一个特定的导航操作,请右键单击“感兴趣的字节”将为您提供选择,以在内存阅读 /写入 /访问之间进行选择。

要将内存视图导航到任意地址,请单击“内存视图”,然后按G输入地址或数据库符号以寻求视图。
可以通过突出显示内存块,然后双击它设置访问断点,从而在内存区域设置内存断点。

与正常的内存断点一样,将悬停在区域和滚动滚动的范围内可以遍历到所选内存区域的访问之间。
在反向工程中,遇到您问自己“哪个指令将此寄存器设置为当前价值的情况很常见?”
使用Tenet,您可以单击一次向后寻找该指令。

向后寻求是迄今为止跨寄存器更改导航的最常见方向……但是,对于敏捷,您还可以使用寄存器右侧的蓝色箭头寻求下一个寄存器分配。
提供了一个简单的“外壳”,以导航到跟踪中的特定时间戳。粘贴(或打字...)在带有或没有逗号的情况下进入外壳的时间戳就足够了。

使用感叹号,您还可以在跟踪中寻求指定的“百分比”。输入!100将寻求痕迹中的最终指示,其中!50将通过痕迹寻求大约50%的方式。 !last将寻求可以在拆卸器中查看的最后可导航指令。
Tenet以两个默认主题的形式运送了“轻”主题和一个“黑暗”主题。根据您的拆卸器当前使用的颜色,Tenet将尝试选择最合适的主题。

主题文件存储在磁盘上的简单JSON,并且可配置高度。如果您对默认的主题或颜色不满意,则可以创建自己的主题并将其放在用户主题目录中。
Tenet会记住您对未来负载和用途的主题偏好。
时间和动机资金允许,未来的工作可能包括:
我欢迎外部贡献,问题和功能请求。如果您希望将其考虑以将来发布,请向该存储库的develop分支提出任何拉动请求。