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