逆向调试符号
逆向调试符号
定义
调试符号是被调试程序的二进制信息与源程序信息之间的桥梁,是在编译器将源文件编译为可执行程序的过程中为支持调试而摘录的调试信息。调试信息包括变量、类型、函数名、源代码行等。
格式分类
1.SYM格式
SYM格式早期用于 MS-DOS 和 16位Windows系统,现在只作为Windows9x的调试符使用(因为Windows9x系统的多数内核仍然是16位的)
2.COFF格式
COFF格式(Common Object File Format)是UNIX供应商所遵循规范的一部分,由WindowsNT2.1首次引进使用。现在,微软逐渐抛弃了COFF格式,转而使用更为流行的符号表达式。
3.CodeView格式
CodeView(CV)最早是在MS-DOS下作为Microsoft C/C++ 7的一部分出现的,现在已经支持Win32系统了。“CodeView”是早期微软调试器的名次,其支持的调试符号为C7格式。C7格式在执行模块中是自我包含的,符号信息与二进制代码混合(意味着调试方式会非常大)
4.PDB格式
PDB(Program Database)格式是现今最常用的一种符号形式,是微软自己定义的未公开格式。Visual C++和 Visual Basic 都支持PDB格式。与“CV”不同的是,PDB符号根据应用程序不同的链接方式保存在单独的或多个文件中。
5.DBG格式
DBG是系统调试符。有了系统调试符,调试器才可以显示系统函数名。DBG文件与其他符号格式不同,因为链接器并不创建DBG文件。DBG文件基本上是一个包含其他调试符的文件(例如包含COFF或C7等类型的调试符)微软将操作系统调试符分配在DBG文件中。当然,这些文件中只包含公用信息和全局信息,例如ntdll.dbg、kernel32.dbg等。
6.MAP文件
MAP文件是程序的全局符号、源文件和代码行号信息的唯一文本表示方式。MAP文件在任何地方、任何时候都可以使用,不需要程序支持,通透性极好。
生成调试符号的工具
1.Dumpbin
介绍
dumpbin.exe在VS的VC目录下,通过dumpbin命令来获取dll文件或者lib文件里面包含的函数
使用方法
导出dll文件里的函数:
dumpbin.exe /exports xxx.dll /out xxx.txt
导出lib文件里的函数:
dumpbin.exe /exports xxx.lib /out xxx.txt
2.Flirt
介绍
利用flirt工具针对lib文件生成对应的sig文件,然后导入ida中可以自动识别出函数名,ida导入sig文件后生成对应的map文件可导入OD中识别函数名,实现“动静结合”的调试方式
使用方法
进入flirt文件夹目录,找到如下图所示的两个可执行文件
执行以下命令生成对应的sig文件
将sig文件拖入ida目录下的sig文件夹
打开ida导入对应的sig文件
利用ida生成map文件,随后将map导入od
3.IDR
介绍
IDR用于生成逆向delphi语言的调试符号, 可以准确获取各种事件的位置, 也可以生成map配合OD进行分析
使用方法
打开IDR,将delphi编写的程序拖入IDR中,然后IDR会加载一段时间
切换到forms,并且勾选上form,下面三行字代表程序的各种事件
如下图所示,edit表示编辑框,bitbtn表示按钮,右边的窗口界面记录着对应事件的汇编代码
利用IDR生成delphi语言的map,随后可导入OD进行动态分析
最后更新于