IDA中有一项技术叫FLIRT,用来恢复静态链接的库函数名称

对于这项技术,IDA官方集成了一个FLAIR工具包,简单介绍一下如何使用这个工具包

链接:https://pan.baidu.com/s/10Nrw10NlwxQkMbCRTswOSw 提取码:zjk2

首先写一个测试程序

工程结构如下:

Untitled

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都识别不出来

Untitled

其他符号都没了,但是div竟然能识别,奇怪,应该是什么意外,一般是识别不了的

那么现在尝试使用FLIRT来恢复函数符号

进入flair的bin/linux目录,新建三个文件夹来存放库文件和输出文件