IDA中有一项技术叫FLIRT,用来恢复静态链接的库函数名称
对于这项技术,IDA官方集成了一个FLAIR工具包,简单介绍一下如何使用这个工具包
链接:https://pan.baidu.com/s/10Nrw10NlwxQkMbCRTswOSw 提取码:zjk2
首先写一个测试程序
工程结构如下:
mymath.h
#ifndef __MYMATH__
#define __MYMATH__
//声明mymath.c中的函数
int add(int x, int y);
int sub(int x, int y);
int mul(int x, int y);
int div(int x, int y);
#endif
mymath.c
//对加减乘除进行封装
int add(int x, int y)
{
return x + y;
}
int sub(int x, int y)
{
return x - y;
}
int mul(int x, int y)
{
return x * y;
}
int div(int x, int y)
{
return x / y;
}
demo.c
//对加减乘除进行封装
int add(int x, int y)
{
return x + y;
}
int sub(int x, int y)
{
return x - y;
}
int mul(int x, int y)
{
return x * y;
}
int div(int x, int y)
{
return x / y;
}
使用mymath.c生成静态链接库并编译到demo程序中,并剥离demo的符号信息
yiqiu@LAPTOP-I2IQS5DP ~/C/c/testFLAIR> gcc -c src/mymath.c
yiqiu@LAPTOP-I2IQS5DP ~/C/c/testFLAIR [1]> ar -r lib/libmymath.a mymath.o
yiqiu@LAPTOP-I2IQS5DP ~/C/c/testFLAIR [1]> gcc src/demo.c -L lib -l mymath -o demo
yiqiu@LAPTOP-I2IQS5DP ~/C/c/testFLAIR> strip --strip-all out/demo -o out/demo_strip
将demo_strip程序拖进ida,这是我手动找到的main函数,ida连main都识别不出来
其他符号都没了,但是div竟然能识别,奇怪,应该是什么意外,一般是识别不了的
那么现在尝试使用FLIRT来恢复函数符号
进入flair的bin/linux目录,新建三个文件夹来存放库文件和输出文件