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,它運行良好且許可證限制較少。api
使用 IDAPython 和 PySide 編寫 Hello world UI
爲了從 IDAPython 編寫 UI,您必須繼承 idaapi.PluginForm類。這個類本質上包裝了 create_tform()/display_tform() 並提供了一些輔助函數(例如將 QWidget* 傳遞給 Python,PySide 能夠將其用做父小部件)。
一個示例代碼將使事情更清楚: 運行此腳本後,咱們獲得了這個表單: 固然,該表單能夠像任何其餘內置表單同樣停靠。雖然這個例子很是簡單,但用戶如今能夠建立更加精細和複雜的 UI。絕不奇怪,但如今使用腳本(IDAPython)的插件開發變得比之前更有趣。
ipq_hello_code
框架