IDA Pro 6.0使用Qt 框架實現了跨平臺的UI。它的好處是外掛編寫者還可以直接使用 Qt 開發跨平臺 UI。但是編劇呢?
在這篇博文中,我們將說明如何使用PySide使用IDAPython為 IDA Pro 建立 UI 介面。
ipq_intro
背景
在早期版本的 IDA Pro 中,可以使用create_tform() / display_tform() API建立自定義 UI ,但程式碼是特定於平臺的。在 MS Windows 上,程式設計師接收父窗體的 HWND,然後用自定義控制元件填充它,然後處理來自自定義 WindowProc() 的視窗訊息。
由於之前只有一個 MS Windows UI 存在,使用者無法在其他平臺上建立複雜的 UI,並且必須使用ADA Pro SDK/表單相關的函式,例如AskUsingForm()。
藉助 IDA Pro 6.0,C++ 外掛編寫者可以直接使用 Qt SDK 開發跨平臺 UI。請參考IDA Pro SDK 中的qwindow。
指令碼編寫者還可以使用 Python Qt 繫結來實現相同的結果。
Qt 框架的 Python 繫結
我們評估了PySide和PyQt,發現這兩個繫結在 IDA Pro 6.0 上都可以正常工作(我們必須使用 –DQT_NAMESPACE=QT 編譯它們,並且必須新增一種方法將 QWidget* 從 C++ 傳遞到 Python)。
雖然 PyQt 更加成熟並被許多使用者採用,但我們選擇了 PySide,它執行良好且許可證限制較少。
使用 IDAPython 和 PySide 編寫 Hello world UI
為了從 IDAPython 編寫 UI,您必須繼承 idaapi.PluginForm類。這個類本質上包裝了 create_tform()/display_tform() 並提供了一些輔助函式(例如將 QWidget* 傳遞給 Python,PySide 可以將其用作父小部件)。
一個示例程式碼將使事情更清楚: 執行此指令碼後,我們得到了這個表單: 當然,該表單可以像任何其他內建表單一樣停靠。雖然這個例子非常簡單,但使用者現在可以建立更加精細和複雜的 UI。毫不奇怪,但現在使用指令碼(IDAPython)的外掛開發變得比以前更有趣。
ipq_hello_code