当我们要分析一个lib库里的代码时,首先需要判断这是一个静态库还是一个导入库。

库类型判断

lib文件其实是一个压缩文件。

我们可以直接使用7z打开lib文件,以查看里面的内容。

如果里面的内容是obj文件,表明是静态库。

如果里面的内容是dll文件,表明是导入库。导入库里面是不包含代码的,代码包含在对应的dll文件中。

从lib中提取obj

静态库是一个或者多个obj文件的打包,这里有两个方法从中提取obj:

  • Microsoft 库管理器
  • 7z解压

Microsoft 库管理器(lib.exe)

Microsoft 库管理器 (lib.exe) 用于创建和管理lib文件。

lib.exe随VS默认安装。

为了方便,可以先将在cmd.exe中运行如下脚本:

VS安装目录\Microsoft Visual Studio 12.0\VC\Bin\VCVARS32.BAT

之后在该cmd.exe中使用lib.exe就不需要输入完整路径了。(注:这里只是添加当前cmd进程的环境变量,在另一个cmd中使用lib.exe,仍然需要使用完整路径)

提取obj需要分两步:

1、查看lib里面的obj信息:

lib /list xxx.lib > liblist.txt
lib /list:liblist.txt xxx.lib

2、从lib中提取obj:

lib xxx.lib /extract:\Release\xxx.obj      #\Release\xxx.obj是从liblist.txt中读出的

7z解压

直接使用7-zip对lib文件进行解压。

推荐使用这种方法,更为简单。并且能一次获得所有obj文件。

解压后还有可能得到一个txt文件,里面是所有obj文件的列表,以及obj文件提供的函数的原型。

逆向分析obj

obj为COFF格式的文件。

这里要使用VS提供的工具dumpbin.exe,该工具和lib.exe位于同一目录。

和lib.exe一样,为了方便,同样可以先将该目录加入当前cmd进程的环境变量,运行如下脚本:

VS安装目录\Microsoft Visual Studio 12.0\VC\Bin\VCVARS32.BAT

该工具可以查看obj基本信息:

dumpbin /all xxx.obj > xxxobj_info.txt

也可以反汇编obj:

dumpbin.exe /disasm xxx.obj > xxxobj_asm.txt   

但dumpbin不一定能得到想要的结果,运行dumpbin后就,可能会提示未知的对象类型:

File Type: ANONYMOUS OBJECT

这是由于程序在编译时使用了/GL优化选项,该优化会使dumpbin功能失效。

那么使用/GL优化选项的lib该如何逆向分析呢?在网上没有搜索到答案,我暂时使用了一种曲线救国的方法:源程序调用法。

源程序调用法逆向lib

从上面获得的lib信息中,我们可以获得lib里的obj都提供了哪些函数。

我们完全可以开发一个小程序来调用obj提供的函数,主要分三步:

1、编写.h文件,文件名要和lib里的obj文件名相同。

2、确定函数原型。比如我们要调用a.obj里面的b函数,我们使用文本编辑器打开从lib里提取的a.obj,在里面搜索函数名b,会找到VS编译后的修饰名,形如“?b@@YAHIJ@Z”。这个修饰名包含函数原型的所有信息,我们需要根据修饰名还原函数原型并在.h文件中声明该函数。关于修饰名的内容可以查看这篇博客。

3、编写主cpp文件,包含上面创建的头文件,引入lib库,并在主函数中调用要逆向分析的函数b。

#pragma comment(lib, "xxx.lib")
int main()
{b();          //这个b为xxx.lib里的a.obj提供的函数
}

生成调用lib库里b函数的exe后,用调试工具对exe进行调试,或者用IDA对其进行静态分析。

顺着这个程序的执行流程,我们就能到达lib里被我们调用的b函数的代码了。

obj打包回lib

如果我们对obj中的二进制进行了修改,可以再导入进原来的lib:

lib xxx.lib xxx.obj

或者生成一个新的lib:

lib /OUT:xxx.lib xxx_new.lib xxx.obj

———————————————————————————————————————————

欢迎关注我的微博:大雄_RE。专注软件逆向,分享最新的好文章、好工具,追踪行业大佬的研究成果。

lib静态库逆向分析相关推荐

  1. C++中.lib静态库、.dll动态库的生成及调用2

    关于动.静态库的介绍及静态库的生成及调用参见:C++中.lib静态库..dll动态库的生成及调用<1>,本文主要介绍基于VS2015平台的动态库dll的生成及调用方法. 一.动态库的生成 ...

  2. C++中.lib静态库、.dll动态库的生成及调用1

    一.前言 1.动态链接库(dll)与静态链接库(lib): 动态链接库(dll)是一个可以被其他应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源.在链接步骤中,连接器将从库文件取得所需的代 ...

  3. VS2019:C++程序lib静态库、dll动态库的生成和使用

    一.静态库 静态库的使用需要(1).h头文件:(2).lib静态库文件: 1.静态库生成 (1)项目-右键属性-常规-配置类型-选静态库: (2)点击生成,Debug文件夹下出现lib静态库: 2.静 ...

  4. VS2017添加lib静态库文件引用

    1.右键项目,打开proterties 2.打开C/C++ ---> General --->Additional Include Directies ,把与lib相关的头文件所在的目录添 ...

  5. [转]在VS2010 VC++项目中引用Lib静态库(以Openssl为例)

    本文转自:http://kb.cnblogs.com/page/94467/ Openssl是个为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法.常用的密钥和证书封装管理功能以及SS ...

  6. c# 调用c++ lib静态库

    四个步骤 1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库 3.导出C接口 4.c#调用c++动态库 开始你的表演... ①创建一个空白 ...

  7. html5调用静态库,如何在VS2010项目中引用Lib静态库(以Openssl为例)

    Openssl是个为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法.常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用. 首先下载Openssl包 ...

  8. VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结...

    原文链接地址:https://blog.csdn.net/ithzhang/article/details/13170047 MSDN中对于在不同的配置下Link的LIB作了说明: C Runtime ...

  9. IDA静态动态逆向分析基础

    1.JDB和IDA调试步骤2 (1).JDB调试步骤2 (2).IDA调试步骤2 (3).定位函数2 (4).开始调试2 2.动态调试Android so库函数的方法2 3.strace查看系统调用3 ...

最新文章

  1. Netty序章之BIO NIO AIO演变
  2. HTML 的特殊字符转换转义符,的两种方法。
  3. PIC单片机入门_PICC的指向RAM的指针
  4. SpringCloud Ribbon
  5. MongoDB增加用户认证: 增加用户、删除用户、修改用户密码、读写权限、只读权限
  6. babel css3新特性_前端总结(后续不断更新)
  7. 经验总结:java自学视频免费
  8. i5700 预,链接
  9. python怎样画立体图-Python学习(一) —— matplotlib绘制三维轨迹图
  10. 由一维数组创建小根堆
  11. CSDN如何快速更换皮肤
  12. 音乐u盘排序软件_传输数据快速的各种U盘系列 定制U盘
  13. epicor数据表增加字段
  14. 清华现超级“学霸” 15门课程100分4门99分(图)
  15. 全民wa矿小程序源码
  16. Chrome-设置鼠标手势
  17. 把Word或Excel表格插入CAD中直接编辑的方法
  18. python晋江爬虫_python爬虫之小说爬取
  19. 51单片机 16X16点阵循环滚动显示汉字(基于proteus)
  20. 让Enter键实现Tab键的功能

热门文章

  1. CC00073.kafka——|Hadoopkafka.V58|——|kafka.v58|稳定性|事务操作|
  2. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D)
  3. 适合用在高校的人脸识别闸机系统
  4. 计算两个日期之间的天数(C语言实现)
  5. 瑞芯微-RV1109主板各参数介绍
  6. 5.3.1 5GMM modes and N1 NAS signalling connection
  7. aardio - 【库】滴答表格
  8. 乘法逆元、扩展欧几里得算法、二元一次方程、a的n次方取余
  9. 【JavaEE】认识Tomcat
  10. 洞见2021大会专访 | 名才eHR董事长李秾:重新定义eHR,助力企业引领人力资源数字化转型浪潮...