Delphihelper是Python IDA Pro插件,旨在幫助分析用Delphi編程語言編寫的X86/X86_64二進製文件。
在IDA插件目錄中復制DelphiHelper目錄和DelphiHelper.py :
%APPDATA%Hex-RaysIDA Proplugins$HOME/.idapro/plugins/通過以下說明下載IDR知識基礎文件,或運行腳本setup_IDRKB.py 。
注意:運行設置腳本需要
py7zr安裝:pip install py7zr
Delphihelper應與IDA 8.4兼容,然後在Windows,MacOS和GNU/Linux上兼容。
為了使用Delphihelper插件,必須在IDA中加載資源部分。這可以通過選中“框加載資源”或“命令行開關中的選項-R來實現。
注意:使用插件之前,必須完成IDA自動分析。
<Alt-Shift-H> :打印幫助<Alt-Shift-R> :運行VMT解析器<Alt-Shift-F> :運行DFM查找器(顯示Delphi表單查看器窗口)<Alt-Shift-E> :運行入口點功能查找器<Alt-Shift-S> :運行SysInit和System單元的IDR知識基礎加載器<Alt-Shift-A> :為選定單元運行IDR知識庫加載程序熱鍵: <Alt-Shift-R>
必須在VMT結構的起始地址上使用光標執行虛擬方法表(VMT)解析器。可以通過搜索名為CreateForm , CreateObject等的功能來找到此結構。找到函數後,最後一個參數應為VMT結構。
在大多數情況下,有兩個說明的順序:
mov <register>, <VMTStructureOffset>
call CreateForm
例如:
一旦結構(VMTStructureOffset,例如off_664A8C ),請按<Enter> :
按HOTKY <Alt-Shift-R> 。結果看起來如下:
VMT結構包含許多存儲在各種RTTI表中的有用信息。最有趣的是:
VMT解析器自動從這些表中提取數據,並將其存儲到IDA枚舉和結構中。
字段表存儲一個名稱,一個類型和每個已發布字段的偏移。 VMT解析器提取物並將每個VMT結構的所有這些條目保存到IDA枚舉中:
VMT解析器創建的枚舉具有以下格式: %ObjectName%_Fields 。 enum條目的名稱具有此格式: %ObjectName%_%FieldType%_%FieldName% :
然後,可以通過按內置IDA快捷方式<M>來命名VMT解析器創建的枚舉的條目,用於命名符號常數。
前
後
虛擬方法表將指針存儲在所有類及其基類聲明的虛擬方法上:
VMT解析器從VMT提取指針,並將其保存到由解析的VMT結構命名的IDA結構中。結構條目的名稱具有以下格式: %MethodName%_%MethodOffset% :
然後,可以通過按內置的IDA快捷方式<T>來命名VMT解析器創建的結構的條目,用於命名結構偏移。
前
後
該方法表存儲已發表方法的名稱和指針。該方法表還包含Delphi事件處理程序的指針,可以從Delphi Form Viewer找到並訪問(有關更多信息,請參見DFM Finder)
熱鍵: <Alt-Shift-F
DFM查找器試圖找到分析的Delphi二進制資源部分中存儲的所有DFM,此後它在與發現的DMF相關的所有VMT結構上運行VMT解析器。處理所有VMT結構後,將顯示一個新的Interactive IDA子視圖( Delphi Form Viewer )。該子視圖顯示了從DFM提取的Delphi表單描述的樹視圖:
粗體節點表示已定義了一些Delphi事件的組件。在子樹中更深入地關注這樣的粗體節點,直到發現大膽的Properties節點為止,您可以在其中找到藍色的Delphi事件。通過單擊事件項,您將移至IDA拆卸窗口中的相應事件處理程序。
綠節點代表具有嵌入一些二進製文件的組件。在子樹中更深入地關注這樣的綠色節點,直到發現綠色Properties節點為止,您可以在其中找到一個綠色的物品。該項目顯示了DFM查找器刪除的嵌入式二進製文件的文件路徑。提取文件的目標子目錄位於當前IDA工作目錄中,並具有以下格式: %IDAWorkingDirectory%_extracted_%BinaryFileName%
單擊Delphi表單查看器窗口中的根(表單)節點,將您移動到IDA拆卸窗口中的表單VMT結構。
熱鍵: <Alt-Shift-E>
入口點功能查找器試圖通過搜索對CreateFrom , InitExe和InitLib調用的引用來查找可能的入口點功能。結果顯示在IDA的輸出窗口中,例如:
Hotkeys : <Alt-Shift-S>和<Alt-Shift-A>
IDR知識基礎加載器從KB文件加載IDR KB簽名。該插件希望將KB文件存儲在以下位置:
在Windows上: %APPDATA%Hex-RaysIDA PropluginsDelphiHelperIDR_KB
在macos/linux上: $HOME/.idapro/plugins/DelphiHelper/IDR_KB/
<Alt-Shift-S>僅適用於SysInit和System功能簽名。
<Alt-Shift-A>試圖為從導入單元列表中選擇的所有單元加載功能簽名。
注意:KB文件是從IDR項目下載的:
https://github.com/crypto2011/idr
https://github.com/crypto2011/idr64
IDR項目是根據MIT許可證的:
MIT License
Copyright (c) 2006-2018 crypto
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
下載並將KB文件的下載並複製到DelphiHelperIDR_KBIDR64 Directory:
https://github.com/crypto2011/idr64/blob/master/syskb2012.bin
https://github.com/crypto2011/idr64/blob/master/syskb2013.bin
https://github.com/crypto2011/idr64/blob/master/syskb2014.bin
下載並提取以下KB文件到DelphiHelperIDR_KBIDR Directory:
https://github.com/crypto2011/idr/blob/master/kb2005.7z
https://github.com/crypto2011/idr/blob/master/kb2006.7z
https://github.com/crypto2011/idr/blob/master/kb2007.7z
https://github.com/crypto2011/idr/blob/master/kb2009.7z
https://github.com/crypto2011/idr/blob/master/kb2010.7z
https://github.com/crypto2011/idr/blob/master/kb2011.7z
https://github.com/crypto2011/idr/blob/master/kb2012.7z
https://github.com/crypto2011/idr/blob/master/kb2013.7z
https://github.com/crypto2011/idr/blob/master/kb2014.7z