为了增强 IDA 的函数、结构体等信息的识别能力。设置了几类帮助解析识别的辅助操作文件,如:ids、sig、til等。
cfg:ida 工具的配置文件。
ida.cfg:ida 通用配置文件。
idagui.cfg:ida 可视化界面的配置文件,常用的就是。
idc:ida 工具的脚本存放目录。ida启动时,默认加载 ida.idc 脚本文件完成程序的初始化操作。
ids:包含一些符号文件(IDA语法中的IDS文件),这些文件用于描述可被加载到IDA的二进制文件引用的共享库的内容。这些IDS文件包含摘要信息,其中列出了由某一指定库导出的所有项目。
描述某个函数所需的参数类型。
参数数量的信息。
函数的返回值类型(如果有)。
函数的调用约定有关的信息。
loaders:目录包含在文件加载过程中用于识别和解析PE或ELF等已知格式的IDA扩展。
plugins:放置 ida 插件。
procs:包含已安装的IDA版本所支持的处理器模块。处理器模块为IDA提供机器语言--汇编语言转换功能,并负责生成在IDA用户界面中显示的汇编语言。
sig:包含IDA在各种模式匹配操作中利用的现有代码的签名。通过模式匹配,IDA能够将代码序列确定为已知的代码块代码,从而节省大量时间。
使用静态库生成对应的签名文件。
根据签名文件比对修改当前程序中的函数名称。
themes:放置 ida 的主题。
til:包含一些类型库信息,IDA通过这些信息记录特定于各种编译器库的数据结构的布局。
需要使用源码才能生成对应的til文件。
tilib工具可以尝试解析c/c++头文件,用以生成til文件。
针对头文件
该文件是为了增强ida对共享文件信息的解析能力。共享文件都会对外开放导出接口,该文件记录导出函数的序列号、名称、待清除字节(函数调用结束时平衡堆栈的字节数)、函数注释。如果 ida 在解析程序过程中,加载到了对应的共享库,就会尝试将ids文件夹下的对应名称的ids文件加载到当前ida数据库中。如果没有自动加载,可以在file -> Load file -> IDS/IDT file...加载指定文件。
使用 ida 的 idsutil 工具包来制作ids文件。
#使用dll2idt.exe制作idt文件
C:\AWORKTOOLS\IDA_Pro_7.7\idsutil3>dll2idt.exe kernel32.dll
Convert DLL to IDT file. Copyright 1997 by Yury Haron. Version 1.4
File: kernel32.dll ... ok
其中可以看见一个通用的关键字Name,如果想要为idt文件中的函数添加其他信息,可以手动添加 Pascal 和 Comment 关键字。
在处理结束后,使用 zipids.exe 工具将idt文件封装成ids文件。
#将idt封装成二进制文件
C:\AWORKTOOLS\IDA_Pro_7.7\idsutil3>zipids.exe KERNEL32.idt
File: KERNEL32.idt ... {1359 entries [0/0/0]} packed
在程序进行静态编译后,编译器会将共享库直接写到程序的二进制文件中,主要目的是增强程序的可移植性。相对的程序大小也会随之增大,程序分析的难度也会根据程序大小成正比例增长。如果我们能够识别程序中已知的静态库文件,那么将会减少一部分分析工作。
一般可以使用静态分析程序中包含的字符串信息,尝试寻找库文件的特征相关内容,寻找到特征信息后,定位静态库的库名以及版本信息。
库名:寻找对应的静态库,制作专项的签名文件。
版本:库的版本不同,其中函数的实现可能也会不同,如果不能找到正确的静态库版本,可能会影响识别的效果。
使用 ida 的 flair 工具包制作签名文件。
plb.exe/plb。 OMF 库的解析器( Borland 编译器常用)。
pcf.exe/pcf。 COFF 库的解析器(微软编译器常用)。
pelf.exe/pelf。 ELF 库的解析器(许多 Unix 系统常用)。
ppsx.exe/ppsx。 Sony PlayStation PSX 库的解析器。
ptmobj.exe/ptmobj。 TriMedia 库的解析器。
pomf166.exe/pomf166。 Kiel OMF 166 对象文件的解析器。
开始制作签名文件。
#制作pat文件
pcf.exe user32.lib user32.pat
.......\flair75\bin\win\user32.lib: skipped 0, total 593
#将pat文件转换成sig文件
sigmake.exe user32.pat user32.sig
将制作好的签名文件放置到sig文件夹中即可,在所需时进行加载,增强对未知二进制内容的解析。更多的数字签名的工具指令可以参考工具的详细说明。
该文件通过解析头文件,获取对应的 til 结构文件。ida 导入指定的 til文件,将对应的数据偏移赋予更直观更有意义的标识。
使用 tilib.exe 工具制作til文件。 ida 加载 til文件,使用其中预定义好的结构体类型。
tilib -c -Cc1 -hstdio.h stdio.til
在 ids 目录下有一个 idsnames 文件。该文件中对三个文件的加载进行了相互映射。
<IDADIR>/ida/idsnames 的 IDS 配置文件
将共享库的名称与它对应的.ids文件名映射起来。如果共享库的名称不能万千转化成呢还给你一个MS-DOS 8.3形式的文件名,这样做可以帮助IDA定位到正确的.IDA文件。如果程序加载libc.so.5动态库,就会自动映射加载libc.ids文件。
libc.so.5 libc.ids +
将.ids与.til文件映射起来。这样,只要IDA加载指定的.ids文件,他会自动加载指定的.til文件。使用下面的命令,一旦IDA加载SSLEAY32.ids,openssl.til文件将会自动加载。
SSLEAY32.ids SSLEAY32.ids + openssl.til
将.sig文件与对应的.ids文件映射起来。这样,只要反汇编代码清单应用指定的.sig文件,IDA将加载指定的.ids文件。
libssl.sig SSLEAY32.ids
在程序开始分析之前,将已知的程序解析环境准备好。能减少很多待分析的程序代码段,增强ida反汇编得结果正确性。