用IDA进行反汇编时最怕遇到的就是跟踪到了程序静态链接的库函数中,看得一头雾水不说,还浪费了大量的时间。其实如果有符号表的话,看看函数名就知道大概功能了,再看看参数就可以pass了。本文以meterpreter主服务dll–metsrv.dll为例,简要介绍一下利用IDA工具FLAIR来对程序的静态链接库进行处理的流程
用IDA打开metsrv.dll,如图:
图上部的条框区域,绿色部分是IDA能识别出的库函数,蓝色区域IDA认为是程序自身的代码,由于程序有600多K,代码量非常大,左侧的函数窗口可以看到都是诸如sub_10002A90之类的函数名,这时我们怀疑程序是不是静态编译链接了某些函数.
1.用string、file等工具识别静态库及版本,平台等
root@bt:/# strings metsrv.dll >1.txt
root@bt:/# cat 1.txt
...
OpenSSL 0.9.8k 25 Mar 2009
.\ssl\ssl_lib.c
...
root@bt:/#
找到了”OpenSSL 0.9.8k”这样的字符串,我们初步判断是对openssl库进行了静态链接。需要下载openssl 0.9.8k对应的库文件libeay32.lib和ssleay32.lib,可以点击这里下载。
2.下载FLAIR61
FLAIR全名库文件快速识别与鉴定技术(Fast Library Acquisition for Identification and Recognition),IDA安装包里并没有自带这个工具。
官方下载地址:flair61。但需要验证用户名和密码。
也可以点击这里下载IDA6.1及相关工具,里面包括FLAIR61。
3.创建模式文件####
这里对windows环境下的openssl库创建模式文件,使用.\bin\win目录下的pcf工具。
D:\flair61\bin\win>pcf.exe libeay32.lib libeay.pat
D:\flair61\bin\win>pcf.exe ssleay32.lib ssleay.pat
.\plb.txt文件包含这个工具的详细参数说明。
4.创建签名文件####
D:\flair61\bin\win>sigmake.exe libeay.pat libeay.sig
libeay.sig: modules/leaves: 4246/2632, COLLISIONS: 106
See the documentation to learn how to resolve collisions.
创建签名文件时一般会产生冲突,这是因为两个函数的字节序列部分可能相同。
这时打开生成的.exc文件,将前四行删除,在冲突的函数组中如果想显示哪个函数名称,在前面添加+号,如果只想在数据库中添加函数注释,在前面添加-号。
_atalla_mod_exp_dh 02 2109 8B4424188B4C24148B542410508B442410518B4C2410525051E8........83C4
+_atalla_mod_exp_dsa 02 2109 8B4424188B4C24148B542410508B442410518B4C2410525051E8........83C4
_PEM_write_bio_ECPrivateKey 04 913F 8B44241C8B4C24188B542414508B442414518B4C2414528B542414508B442414
+_PEM_write_RSAPrivateKey 04 913F 8B44241C8B4C24188B542414508B442414518B4C2414528B542414508B442414
_PEM_write_bio_RSAPrivateKey 04 913F 8B44241C8B4C24188B542414508B442414518B4C2414528B542414508B442414
_PEM_write_ECPrivateKey 04 913F 8B44241C8B4C24188B542414508B442414518B4C2414528B542414508B442414
-_PEM_write_bio_DSAPrivateKey 04 913F 8B44241C8B4C24188B542414508B442414518B4C2414528B542414508B442414
_PEM_write_DSAPrivateKey 04 913F 8B44241C8B4C24188B542414508B442414518B4C2414528B542414508B442414
_ec_GFp_simple_is_at_infinity 00 0000 8B4C240833C03941300F94C0C3......................................
+_ec_GF2m_simple_is_at_infinity 00 0000 8B4C240833C03941300F94C0C3......................................
这时再执行sigmake.exe libeay.pat libeay.sig就能生成签名文件,ssleay.pat的处理同上。
5.应用签名文件####
将libeay.sig、ssleay.sig文件拷贝至[IDADIR]/sig目录下,用IDA重新打开metsrv.dll,选择 File->Load File->FLIRT Signature File
,分别将libeay.sig、ssleay.sig文件导入到metsrv.dll的数据库中:
这时静态链接的符号表都出来了,可以跟处理之前的图进行对比看看效果: