
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分支提出任何拉動請求。