[pwn&re]使用IDA flair恢复静态编译去符号的库函数名

ctf-pwn 同时被 3 个专栏收录
25 篇文章 0 订阅
17 篇文章 1 订阅
29 篇文章 1 订阅

使用IDA flair恢复去符号的库函数名


在一些时候经常遇到静态编译并且去符号的题目,打开的画风就是这样的:

和这样的:

虽然说我们也可以根据参数的类型或者参数的数量手动分析出原函数的名字或功能,但无论如何也太麻烦了,再者有的时候还会有一些其他的干扰,那更会加大分析难度,这里提供一个简单的还原库函数名称的IDA功能:flair,即库文件快速识别。

IDA flair

flair通过对库文件中的函数生成签名,并生成对应的签名文件,然后和程序中的函数进行签名匹配找到匹配的函数来帮助我们还原库函数。使用也非常简单,我们只需将对应的签名文件(sig文件)导入到IDA的对应目录下便可使用了。

这里有大佬制作好的签名文件,各个架构各个系统各个版本都有,可以自行寻找:

https://github.com/push0ebp/sig-database

使用方法是将对应的签名文件导入到IDA的这个目录下:IDA 7.0\IDA_Pro_v7.0_Portable\sig\pc,然后进入IDA按shift+F5快捷键,也可以File->Load file-> FLIRT signature file来操作,之后可以选择对应的sig文件:

在弹出的新窗口中右键添加sig文件:

为了比较好找我自己导入的,我已经将这个文件夹里原来的文件备份然后删了,只保留我自己导入的。有时候我们不知道编译的是哪个版本的libc库,所以可以多导入几个签名文件:

可以看到根据导入的签名文件不同,识别出来的函数数量也是不同的,有的匹配到300+,有的却一个没有匹配到(也和后导入,有些“本能识别出来,却被先导入的识别了“)。然后再回去看就会发现好多函数已经完成了识别:

当然即便是这样,在程序中还是会有些函数还原不了,也就是没找到库函数,那就只能手动还原了,但这也给我们减少了很多的工作量:

自己制作签名文件

当然除此之外,还可以自己制作签名文件,使用IDA附带的flirt插件即可,如果没有可以点击我分享的链接下载:

https://pan.baidu.com/s/16YOLuhWI3yM9XJKcqGBo7Q

之后解压出来在\flair70\bin\linux目录下就是生成签名工具的文件,要使用到pelf和sigmake两个程序:
在这里插入图片描述
接下来找到要制作签名文件的静态编译库libc.a,一般在/lib/x86_64-linux-gnu目录下,或者/usr/lib/x86_64-linux-gnu目录下:
在这里插入图片描述
然后将其拷贝到flair的目录,依次执行下面两条指令:

./pelf libc.a test.pat
#如果这句话报错: Unknown relocation type 42 (offset in section=0x16).那么要加一个参数:
./pelf -r42:0:0 libc.a test.pat
#如果有出现别的错误,继续添加这个参数 -r错误号:0:0
./sigmake test.pat test.sig

然后查看是否成功,有时没有成功就是文件中签名有冲突,这时不会生成.sig而是生成了一个.exc文件:

查看这个文件:

大概意思就是有些模块的签名是一样的,我们要选择使用哪个,看红框中的内容,大体意思就是:**在想要选择的模块前面标记’+’,在不确定的选择前面标’-’,什么也不做就会排除所有模块,最后要删掉这四行内容。**所以我们要进行选择,这里我随便选的:

选择之后继续执行

./sigmake ./test.pat ./test.sig

然后发现还是有一个冲突:
在这里插入图片描述
继续修改test.exc文件,这次新冲突在最下面紧接着刚修改过的内容:

直到修改到不报错为止,然后成功生成sig文件:
在这里插入图片描述

自动检测脚本

这里还有一个可能有帮助的脚本,可以检测二进制文件静态编译的是哪个库:

https://github.com/maroueneboubakri/lscan

这个脚本使用非常简单:

python ./lscan.py -S .sig的目录 -f 要扫描的二进制文件

最后会输出和哪个库最相近:

这里使用的是脚本自带的库,也可以使用我们在上面下载的库来扫描,只不过哪个库目录太多了…这里只是演示。

参考资料:

https://xz.aliyun.com/t/4484

https://blog.csdn.net/dupei/article/details/99835255

  • 5
    点赞
  • 0
    评论
  • 6
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页

打赏

breezeO_o

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值