如何识别IDA反汇编中动态链接库中的函数

在使用IDA静态反汇编时,如果正在逆向的文件中有动态链接库函数(比如调用了程序自定义so库中的函数),IDA只会显示一个地址,跟进去会发现是延迟绑定中关于plt的代码,无法知道具体调用了哪个函数,对于逆向起来很是麻烦,本文介绍如何识别这样的函数。

按道理讲,虽然不能动态调试,静态分析不能看到运行时绑定的地址,但是具体动态链接的过程一定也是根据文件中的信息,所以静态也一定可以知道调用的是哪个函数,但是我没有发现如何使用IDA自动确定(如有高手麻烦留言告诉我),于是通过查阅《程序员的自我修养》动态链接相关内容,找到了识别动态链接库中函数的方法。需要识别的函数是sub_412160,如图所示:

从汇编代码点进去会发现是plt相关代码,在ARM64中,@page是取页440000(4kb整数),@PAGEOFF是取页内偏移20,简单来讲这段应该是取出440020地址存储的数据放X17,然后跳转过去,到了got.plt中。

这里面存的全是一样的地址,正如书中写的那样,都还没绑定具体运行时的地址,再跟两步发现到了地址是0的地方,就不理解了,可能是链接器的地址?

走了这么多弯路,跟完了延迟绑定的过程,下面来看如何识别出sub_412160。

ELF文件中存储了导入的所有函数符号信息,在IDAi的mport窗口中可以看到,不过IDA没有自动显示出来这些函数的地址,但在Linux下使用

readelf -sD 文件名| grep 小写地址 

查看该文件可以看到地址动态符号的地址,grep查找一下就是所需要的识别的函数名。

ELF文件中还存储了needed的动态链接库,IDA中写在了该文件的最开始,向上拉窗口可以看到,我们只要从这些so库中找识别出的函数名即可。使用

grep -rn “函数名”

即可找到调用的哪个库中的哪个函数。

此外,还有这种形式的动态链接调用,再次挖坑做以记录碰到再研究。

https://reverseengineering.stackexchange.com/questions/9033/how-to-recognize-the-function-call-in-a-dynamic-lib

By Ascii0x03,转载请注明出处:http://www.cnblogs.com/ascii0x03/p/8313451.html

原文地址:https://www.cnblogs.com/ascii0x03/p/8313451.html

时间: 2024-11-08 20:43:33

如何识别IDA反汇编中动态链接库中的函数的相关文章

LINUX系统中动态链接库的创建与使用{补充}

大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐.那么,在LINUX系统中有无这样的函数库呢? 答案是肯定的,LINUX的动态链接库不仅有,而且为数不少.在/lib目录下,就有许多以.so作后缀的文件,这

LINUX系统中动态链接库的创建与使用

大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐.那么,在LINUX系统中有无这样的函数库呢? 答案是肯定的,LINUX的动态链接库不仅有,而且为数不少.在/lib目录下,就有许多以.so作后缀的文件,这

在DLL动态链接库中封装VCL的MDI子窗体

在DLL动态链接库中封装VCL的MDI子窗体不多说了,看代码就应该明白了,曾经我遇到的问题,现在放出来大家共享! 这里是工程文件的部分: 在DLL中封装MDI子窗体需要重写DLL入口函数,具体代码如下: var DllApp: TApplication;//定义保存原DLL的TApplication对象 DllScr: TScreen;//定义保存原DLL的TScreen对象 procedure UnProcDll(Reason: Integer); register;//重新定义DLL入口函数

深度解析 Qt 中动态链接库

本文介绍的是Qt 中动态链接库,现在有些软件有自动升级功能,有些就是下载新的DLL文件,替换原来的动态链接库,MFC好象也有类似机制,Qt还有一种方式,就是把一个QWidget子类,编译成动态链接库.然后根据动态链接库创建一个对象,返回QWidget子针,如果你的类不是QWidget的子类,就不能用这种方法了. QLibrary也是用来加载动态链接库,但它创建出来返回的是某个"方法的指针"(不需要头文件),而QPluginLoader创建返回的是"对象的指针"(对象

C/C++中动态链接库的创建和调用

DLL 有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL 副本的内容.DLL 是一个包含可由多个程序同时使用的代码和数据的库.下面为你介绍C/C++中动态链接库的创建和调用. 动态连接库的创建步骤: 创建Dll有两种方式. 一.创建Non-MFC DLL动态链接库 1.打开File —> New —> Project选项,选择Win32 Dynamic-Link Library —>sample project —>工程名:DllDemo 2.新建一个.h文件DllDe

动态链接库中导出模板函数

动态链接库中导出模板函数 C++ 支持函数模板,利用函数模板,可以简化我们的程序代码.我在自己的代码中也经常用到函数模板,但是以前一直以为函数模板是要放到头文件中的,否则调用模板函数时,编译器会找不到函数模板的定义.今天闲暇,又翻了翻 C++ Primer,发现我以前的理解是有问题的.模板函数也可以像普通函数那样,将声明放在头文件中,定义放在.cpp 中.这时又想到另一个问题,DLL 中是否可以导出模板函数呢.如果可以的话,就可以将函数的实现代码真正隐藏起来了.经过一番实验,发现是可以的,但是有

[转]Delphi 中动态链接库(dll)的建立和使用

动态链接库是一个能够被应用程序和其它的DLL调用的过程和函数的集合体,它里面包含的是公共代码或资源.由于DLL代码使用了内存共享技术,在某些地方windows也给了DLL一些更高的权限,因而DLL中可以实现一些一般程序所不能实现的功能,如实现windows的HOOK.ISAPI等.同时,DLL还为不同语言间代码共享提供了一条方便的途径.因而DLL在编程时应用较为广泛,本文将介绍如何在 Delphi 中建立和使用DLL. 一.DLL 库内存共享机制 从使用效果看,DLL和unit 很像,它们都可以

C# DumpBin使用 查看反射C++ dll 动态链接库中的函数

DumpBin是Microsoft提供的一个用于查看.exe..dll文件信息的工具,其位于: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin, 但直接运行这个程序会有错误,其环境配置有问题,所以要先启动cmd,然后运行C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat,此批处理会给这个cmd窗口设置环境变量,不要关闭这个cmd,在同一

IDA反汇编学习

1 转自:http://www.cnblogs.com/vento/archive/2013/02/09/2909579.html IDA Pro是一款强大的反汇编软件,特有的IDA视图和交叉引用,可以方便理解程序逻辑和快速定位代码片断,以方便修改. IDA视图 示例程序 下面会通过修改示例程序的输出字符串,来讲解如何使用IDA Pro. #include main() { int n; scanf ("%d",&n); if (n > 0) printf("a