IDA FLIRT 与 FLAIR 使用文档
字数 2387 2025-11-13 12:28:01
IDA FLIRT 与 FLAIR 使用文档
一、FLIRT简介
FLIRT(Fast Library Identification and Recognition Technology)是IDA Pro的一项核心功能,通过模式匹配技术识别二进制文件中由编译器生成的标准库函数和自定义库函数。
功能特点:
- 识别库函数后直接显示函数名及参数信息
- 省略库函数的反汇编细节,减少分析干扰
- 支持快速判断二进制文件使用的编译器版本和库文件
- 识别出的函数显示为灰色,便于区分用户代码
二、FLIRT使用及工作流程
1. FLIRT模式匹配流程
生成签名文件(.sig)
- FLAIR工具提取库函数中的指令序列,忽略地址常量和填充字节
- 为不同库文件格式(.lib、.o、.a等)提供专用解析器
- 解析器将库文件解析为.pat格式的模式文件
函数模式包含信息:
- 函数起始字节序列(最长32字节)
- 校验码(CRC/Hash)
- 函数长度信息
- 函数名称(如_memcpy)
.pat文件格式说明:
- 第一个字节序列代表函数的初始字节序列
- 重定位入口不同的字节用两点(..)表示
- 短于32字节的函数用点填充至32字节
IDA自动匹配
- 反汇编时,IDA读取可执行文件代码段
- 对比指令序列与.sig文件中的模式
- 匹配成功后,函数重命名为真实库函数名
- 标记为"外部库函数",默认不显示反汇编代码
2. FLIRT使用说明
内置签名文件:
IDA的./sig文件夹包含常见库函数签名文件
使用方式:
- 打开二进制文件并加载反汇编
- 菜单栏选择:文件 → 加载文件 → FLIRT signature file
- 选择.sig文件并确定
- 重新识别后,库函数自动替换名称
加载选项:
- 从列表选择预置签名文件
- 使用Load SIG File加载本地签名文件
三、FLAIR工具解析外部库签名文件
1. 获取FLAIR工具集
- IDA官方提供,位于IDA/utils/flair目录
- 可下载flair70/flair90等版本
2. 获得静态库
- 使用VS编译的静态库.lib或其他已编译静态库
- 重要:必须使用Debug方式编译
- Release版本可能去除符号,解析器无法识别相关函数
3. 提取库函数模式
支持格式:
- Linux/ELF静态库
- Windows/COFF静态库
- 单个目标文件(.o)
工具说明:
- pelf/pcoff/pobj/par等工具分析库文件内部函数代码
- 忽略地址相关字节,生成模式文件(.pat)
- .pat为文本格式,包含函数名、校验和、指令模式
执行示例:
pelf libcrypto.a libcrypto.pat
结果示例:跳过196个函数,生成7900个函数模式
4. 生成签名文件
基本命令:
sigmake libcrypto.pat libcrypto.sig
冲突处理:
- 生成.exc和.err文件表示产生冲突
- 函数签名相近时无法分辨具体函数
冲突解决步骤:
- 编辑.exc文件
- 根据注释说明处理冲突函数:
- 函数名前加"+":应用该函数名称
- 函数名前加"-":添加函数注释
- 无符号:不应用任何名称
- 重复执行直到生成.sig文件
5. 在IDA中应用签名文件
- 将.sig文件放入./IDA/sig目录
- 重新加载IDA程序
- 选择:文件 → 加载文件 → FLIRT signature file
- 从列表选择或使用Load SIG File加载
6. 导入开源平台签名文件
资源链接:
- https://github.com/Maktm/FLIRTDB
- GitHub - PlatyPew/ida-flirtdb
导入方法:
.sig文件放入./IDA/sig目录,重新载入二进制文件
四、使用外部库分析流程
1. 使用外部库创建样本EXE
VS2019编译实例:
- 定位库文件位置(include头文件,debug静态库)
- 项目属性-VC++目录添加包含目录和库目录
- 链接器-输入添加静态库文件名
- 创建带有加密函数的样本代码
示例代码:
// 包含加密函数的使用代码
// 编译得到CryptoTest.exe
2. 根据标签文件解析EXE中的函数
分析步骤:
- 无.sig文件时无法解析库函数
- 使用FLAIR工具生成对应sig文件
- 将sig文件放入IDA的sig目录
- IDA根据函数标签解析出具体函数名和信息
优势:
- 直接识别RC4等加密函数信息
- 无需进一步反汇编分析
- 提高逆向分析效率
问题处理:
- 未识别函数:退回生成sig步骤,手动处理冲突
- 高频函数:手动添加注释信息
五、总结及注意事项
核心要点
- FLIRT插件修饰已知库函数二进制代码,节省分析时间
- 签名文件生成需使用调试版本(Debug)静态库
- 根据静态库格式选择正确FLAIR解析器
- 处理.sig生成冲突,确保标签文件无冲突
注意事项
-
版本选择:
- 优先使用Debug版本静态库
- Release版本可能被优化且去除符号
- 保留符号的Release版本也可解析
-
冲突处理:
- .exc文件可删去注释不做处理
- 冲突函数在标签文件中被忽略
- 重要函数需手动标记处理
-
文件管理:
- 正确放置.sig文件到IDA/sig目录
- 定期更新开源平台签名文件
- 备份自定义签名文件
附件:支持的编译器和库
Supported C Compilers
- Aztec C v3.20d
- Borland C++系列(v1.0-5.01)
- Microsoft系列(VC++ v1.0-8)
- GNU C compilers跨平台版本
- Watcom C++ v9.01d-10.6等
Supported Libraries
- Microsoft Foundation Classes
- Borland Visual Component Library
- Windows CE libraries
- Keil runtime libraries
- 各种运行时库和框架库
参考文档
- IDA F.L.I.R.T. 技术:深入Hex-Rays文档
- 符号表恢复相关技术文档
- 社区技术博客和研究成果