Java教程

逆向调试符号

本文主要是介绍逆向调试符号,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

逆向调试符号

定义

调试符号是被调试程序的二进制信息与源程序信息之间的桥梁,是在编译器将源文件编译为可执行程序的过程中为支持调试而摘录的调试信息。调试信息包括变量、类型、函数名、源代码行等。


格式分类

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文件里面包含的函数

image-20220823103546914


使用方法

  • 导出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文件夹目录,找到如下图所示的两个可执行文件

image-20220823104335414


执行以下命令生成对应的sig文件

pcf.exe xxx.lib xxx.pat  //创建模式文件(pat文件)
sigmake.exe xxx.pat xxx.sig  //创建签名文件(sig文件)

将sig文件拖入ida目录下的sig文件夹

image-20220823104529707


打开ida导入对应的sig文件

image-20220823104600149


利用ida生成map文件,随后将map导入od

image-20220823104632394

image-20220823104643873


3.IDR

介绍

IDR用于生成逆向delphi语言的调试符号, 可以准确获取各种事件的位置, 也可以生成map配合OD进行分析


使用方法

打开IDR,将delphi编写的程序拖入IDR中,然后IDR会加载一段时间

image-20220823104903221


切换到forms,并且勾选上form,下面三行字代表程序的各种事件

image-20220823104922211


如下图所示,edit表示编辑框,bitbtn表示按钮,右边的窗口界面记录着对应事件的汇编代码

image-20220823105030095


利用IDR生成delphi语言的map,随后可导入OD进行动态分析

image-20220823105142233

这篇关于逆向调试符号的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!