用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.txtroot@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.patD:\flair61\bin\win>pcf.exe ssleay32.lib ssleay.pat

.\plb.txt文件包含这个工具的详细参数说明。

4.创建签名文件####

D:\flair61\bin\win>sigmake.exe libeay.pat libeay.siglibeay.sig: modules/leaves: 4246/2632, COLLISIONS: 106See 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的数据库中:

这时静态链接的符号表都出来了,可以跟处理之前的图进行对比看看效果:

利用ida对程序的静态链接库进行处理相关推荐

  1. 静态链接库(.lib)和动态链接库(.dll)的使用

    静态链接库(.lib)和动态链接库(.dll)的使用 文章目录 静态链接库(.lib)和动态链接库(.dll)的使用 一.静态链接库 1. 静态链接库概述 2. 创建静态链接库 3. 调用静态链接库 ...

  2. libcurl linux 静态链接库_GCC 程序编译的静态链接和动态链接

    转自:Mr_Bluyee 在链接阶段中,所有对应于源文件的 .o 文件."-l" 选项指定的库文件.无法识别的文件名(包括指定的.o目标文件和.a库文件)按命令行中的顺序传递给链接 ...

  3. Visual Studio封装静态链接库至新静态库,供程序调用

    熟悉Windows开发的人都肯定了解静态链接库和动态链接库. 最近遇到一个问题: A静态库是使用VS编译,因为C++版本的问题,并不能直接在Qt中被调用,因为会报头文件某处错误. 因为A库很大,同时又 ...

  4. c++动态链接库及静态链接库的生成与使用

    c++动态链接库及静态链接库的生成与使用 1,新建控制台工程xdltest,改属性-配置属性-常规-配置类型为 动态库.dll或静态库.lib 2,打开工程后添加 dltest.h, dltest.c ...

  5. GCC编译过程与动态链接库和静态链接库

    1. 库的介绍 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二进制形式,可 ...

  6. 动态链接库.so和静态链接库.a的区别

    静态链接库:   •扩展名:.a   •编译行为:在编译的时候,将函数库直接整合到执行程序中(所以利用静态库编译生成的文档会更大)  •独立执行的状态:编译成功的可执行文件可以独立运行,不需要再向外部 ...

  7. cnsl是什么意思_VS2010下创建静态链接库和动态链接库

    VS2010下创建静态链接库和动态链接库 类封装成dll如果你的工作长期与某个领域相关,比如说长期做直接体绘制 (DVR)方面的开发,那么你可能经常使用自己的传递函数类,如果每一个工程你都把传递函数类 ...

  8. lib与dll的关系(详解静态链接库和动态链接库)

    最近接触到的游戏会有很多的dll和lib文件,之前关于动态链接库和静态链接库一直很不理解,最近发现了一篇很好的文章,非常清晰的讲解了dll与lib的关系,这里拿出来给大家分享下. 原文链接:http: ...

  9. 静态链接库(Lib)和动态链接库(DLL)

    序言:本文主要讲解静态链接库和动态链接库的区别,以及怎么样编译和引用两种库,怎么样从DLL中导出函数和导出C++类. 一.静态链接库和动态链接库 1.静态链接库(.LIB):函数和数据被编译进一个二进 ...

最新文章

  1. VC/MFC分割字符串(SplitString)返回CStringArray
  2. linux 设备树调试必须知道的几个路径
  3. linux磁盘空间清理
  4. Python单元测试之pytest
  5. 如何将visual studio 2010编辑模式改为插入???
  6. 2019-03-10-算法-进化(只出现一次的数字)
  7. P1552-[APIO2012]派遣【左偏树】
  8. Java正则表达式中的捕获组的概念及相关API使用
  9. 系统梳理 Tensorflow、PyTorch 等深度学习框架,洞悉 AI 系统底层原理和算法
  10. Protues构建最小系统
  11. 自学JAVA的十大网站你都知道那些
  12. Gradle下载及安装,配置IDEA
  13. CVPR 2020 | 几篇GAN在low-level vision中的应用论文
  14. 深度链接、延迟深度链接、App Links以及关于LinkedME实现深度链接的原理解析
  15. 强制关闭计算机窗口,windows系统怎么取消关机时强制关闭程序提示窗口?
  16. 0703齐次方程-微分方程
  17. KDZD608屏蔽服效率测试仪
  18. One PUNCH Man——降维
  19. TinyXML-2解析XML数据
  20. [转贴]拓展人脉的老派艺术

热门文章

  1. ThreadLocal的空指针异常问题
  2. 悔不当初:回顾进化之路
  3. MapReduce分区-代码实现
  4. 产品操作-查询全部产品
  5. Spring Boot定时任务-cron表达式
  6. mysql的length函数和char_length中文字符长度计算函数
  7. Tomcat集群快速入门:Nginx+Tomcat搭建集群
  8. ElasticSearch(一)基础知识
  9. Maven(3)--聚合与继承
  10. 【Homework】什么是多态,多态具体体现有哪些?