怎么提取DLL文件中的导出函数呢?

怎么提取DLL文件中的导出函数呢?,第1张

调用DLL有两种方法:静态调用和动态调用

(一)静态调用其步骤如下:

1把你的youAppDLL拷到你目标工程(需调用youAppDLL的工程)的Debug目录下;

2把你的youApplib拷到你目标工程(需调用youAppDLL的工程)目录下;

3把你的youApph(包含输出函数的定义)拷到你目标工程(需调用youAppDLL的工程)目录下;

4打开你的目标工程选中工程,选择Visual C++的Project主菜单的Settings菜单;

5执行第4步后,VC将会d出一个对话框,在对话框的多页显示控件中选择Link页。然后在Object/library modules输入框中输入:youApplib

6选择你的目标工程Head Files加入:youApph文件;

7最后在你目标工程(cpp,需要调用DLL中的函数)中包含你的:#include "youApph"

注:youApp是你DLL的工程名。

(二)动态调用其程序如下:

动态调用时只需做静态调用步骤1

01 {

02 HINSTANCE hDllInst = LoadLibrary("youAppDLL");

03 if(hDllInst)

04 {

05 typedef DWORD (WINAPI MYFUNC)(DWORD,DWORD);

06 MYFUNC youFuntionNameAlias = NULL;

07 // youFuntionNameAlias 函数别名

08 youFuntionNameAlias = (MYFUNC)GetProcAddress(hDllInst,"youFuntionName");

09 // youFuntionName 在DLL中声明的函数名

10 if(youFuntionNameAlias)

11 {

12 youFuntionNameAlias(param1,param2);

13 }

14 FreeLibrary(hDllInst);

15 }

16 }

显式(静态)调用:

LIB + DLL + H,注意H中dllexport改为dllimport

隐式(动态)调用:

DLL + 函数原型声明,先LoadLibrary,再GetProcAddress(即找到DLL中函数的地址),不用后FreeLibrary

函数名很简单,导出表里写的明明白白,随便一个dll查看工具都可以读出,比如CFF explorer。但是对于参数,就像楼上说的那样,不能看出它真实的数据类型(即在高级语言中的抽象数据类型)。因为都编译成汇编了,没有抽象的概念了,此时只能知道数据大小。

但是,不代表就没有办法了。有个一软件叫IDA,专门用于静态分析,它可以反编译汇编成C的伪代码,从而大致能知道传入、传出了啥。如果再知道函数的功能的话,只要不是太复杂,分析出参数类型问题不大。

IDA反编译大概效果就是这样:void __fastcall Function(__int64 a1, __int64 a2, int a3, _QWORD a4)。这里只复制了个声明,但也可以看出,比晦涩的汇编容易读多了。注意上面写的数据类型只能当作参考,因为这些数据类型也是软件根据代码行为推测的。

众所周知,DLL导出函数有两种模式:按函数名或按序号

经编译DLL生成后,如果想隐藏函数名不需要任何工具,可以直接改二进制内容进行处理;

1、用二进制编辑器打开DLL文件,然后查找“DLL的文件名”。

2、文件名后紧跟着就是各个函数名,以00作为分隔符

3、文件名前面就是函数的具体信息,包括入口地址、函数顺序号、函数名地址、函数数量等

4、找到函数的数量修改为0000000即可,如果想要更彻底可以把函数名也全置为零。

附件是我修改后的内核kernel32dll和一个testdldll文件,经测试testdldll使用完全没有问题,但是用Dependency查看时,所有函数名变为“N/A”

具体二进制格式基本如下:

00 00 00 00

dll文件名存储地址

01 00 00 00

函数数量(8位)

函数名称的数量(8位)

函数入口地址的存储地址(8位)

函数名称地址的存储地址(8位)

函数序号的存储地址(8位)

函数入口地址列表(8位)

函数名称地址列表(8位)

函数序号列表(4位)

dll文件名称

函数名称列表

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/13494794.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存