利用FLIRT恢复静态编译程序的符号
字数 1254 2025-08-05 19:10:07
FLIRT技术恢复静态编译程序符号的完整指南
一、FLIRT技术概述
FLIRT (Fast Library Identification and Recognition Technology) 是IDA Pro提供的一项库文件快速识别与鉴定技术,主要用于识别被strip后的静态编译程序中的函数符号。
核心原理
- 通过静态链接库的签名文件匹配目标程序中的函数模式
- 恢复被去除的函数名称和符号信息
- 特别适用于静态编译且strip后的ELF文件分析
二、准备工作
所需工具
- IDA Pro (本文以7.0版本为例)
- FLAIR解析器 (位于IDA插件目录下的flair70.zip)
- 目标静态库文件 (如libc.a)
环境配置
- 操作系统: Ubuntu 16.04 (或其他Linux发行版)
- 测试用例: 静态编译的C程序 (如test)
三、签名文件生成流程
步骤1: 获取静态库文件
- Linux系统库文件通常位于:
/usr/lib//lib/
- 本例使用libc.a作为静态库
步骤2: 创建PAT文件
使用FLAIR解析器中的工具生成PAT文件:
./pelf libc.a libc.pat
注意: 可能会有部分函数被忽略
步骤3: 生成签名文件
使用sigmake处理PAT文件:
./sigmake libc.pat libc.sig
处理冲突
首次运行sigmake可能会报告冲突:
- sigmake会生成一个排斥文件 (如test.exc)
- 编辑该文件:
- 删除以";"开头的说明行
- 在冲突函数前添加:
- "+" 选择该模块
- "-" 不确定选择
- 不做任何操作则排除所有冲突模块
- 保存后重新运行sigmake命令
步骤4: 安装签名文件
将生成的libc.sig复制到IDA的签名目录:
IDA安装目录/sig/pc/
四、在IDA中使用签名文件
- 打开目标文件
- 使用快捷键
Shift+F5打开签名窗口 - 右键选择"添加签名文件"
- 选择刚才生成的sig文件
成功应用后,IDA将恢复匹配到的函数符号。
五、高效使用技巧
1. 使用现成的签名数据库
已有社区维护的签名数据库:
2. 识别最佳匹配签名
- 使用
file和strings命令获取目标文件版本信息 - 使用
iscan脚本自动测试匹配最佳签名
3. 其他恢复符号的方法
参考看雪论坛上的其他技术方案
六、常见问题解决
-
签名匹配率低:
- 确保使用的静态库版本与目标程序编译时使用的版本一致
- 尝试不同版本的签名文件
-
冲突解决失败:
- 仔细检查排斥文件中的冲突函数
- 对于不确定的函数可先标记为"-"
-
签名不生效:
- 确认签名文件已放入正确的IDA签名目录
- 检查签名文件是否完整生成(无错误提示)
七、进阶应用
- 为自定义静态库生成签名
- 组合多个签名文件提高识别率
- 开发自动化脚本批量处理签名匹配
八、工具获取
FLAIR解析器各平台版本可在IDA安装包的插件目录中找到(flair70.zip)
通过以上步骤,分析师可以有效恢复静态编译且strip后的程序的符号信息,大幅提高逆向工程效率。