关于查看dll函数及参数(查看dll导出函数怎么用)

C/C++导出DLL函数的一般方法通常项目中导出DLL接口有两种方式:1.__declspec(dllexport)导出;2.*.def文件导出。__declspec(dllexport

C/C++ 导出 DLL 函数的一般方法

通常项目中导出 DLL 接口有两种方式:

1. __declspec(dllexport)导出;

2.*.def 文件导出。

__declspec(dllexport) 导出

在 DLL 导出的函数名称前使用 _declspec(dllexport)关键字导出函数接口。

test_dll.h

关于查看dll函数及参数(查看dll导出函数怎么用)

test_dll.cpp

关于查看dll函数及参数(查看dll导出函数怎么用)

def 文件导出

由于 __declspec(dllexport)导出接口需要定义一长串的内容,所以 MS 引入 def文件来导出函数接口。 使用 def文件相对简单,只需要在项目中增加一个后缀名为 .def 的文件,按照格式将 DLL 需要导出的接口定义在 def 文件即可。

1.定义 .def 文件

test_dll.def

关于查看dll函数及参数(查看dll导出函数怎么用)

  • DllName表示 Dll 的文件名
  • @1 [可选] 指定导出的函数序号。导出多个函数时,需要开发者自定义序号,不能重复。

2.添加 def 文件至工程

关于查看dll函数及参数(查看dll导出函数怎么用)

3.设置工程属性

在 “属性”->“链接器”->“输入” 配置 模块定义文件输入 def文件名称。

关于查看dll函数及参数(查看dll导出函数怎么用)

4.编译生成 DLL

使用工具查看导出函数名接口,导出接口的顺序与 def文件定义的序号相同。

关于查看dll函数及参数(查看dll导出函数怎么用)

存在问题

  • 通过工具可以查看导出函数名,暴露接口函数功能。
  • 导出的函数名可以任意被访问和使用,即使业务功能被封装在内部代码经过加密处理,但外部接口是公开的,可以被正常调用。造成在不知情,被未经授权的开发者滥用,间接造成损失。

解决方案:导出匿名接口导出匿名序号接口

匿名导出接口只需要在 def文件的导出接口名称增加 NONAME关键字即可,如下:

test_dll.def

关于查看dll函数及参数(查看dll导出函数怎么用)

  •  NONAME表示不导出函数名称(匿名)。

使用 CFF Explorer工具查看导出函数接口名称,函数名称已经被隐藏掉。

关于查看dll函数及参数(查看dll导出函数怎么用)

访问匿名序号接口静态链接

和通常工程引用 DLL 的方法相同,引用 .h,链接 .lib,运行前将 .dll文件拷贝至应用运行目录即可。

动态加载

通过动态加载的方式调用DLL接口。

当导出序号时,定义函数指针变得复杂,只能通过静态反编译的方式确定参数数量和类型,定义函数指针。

关于查看dll函数及参数(查看dll导出函数怎么用)

注意:定义函数指针的类型声明必须与函数定义一致,否则无法正常使用。

小结

  • 静态链接的方式不变,不影响团队内部使用。
  • 匿名接口,不知情的开发者无法调用 DLL 接口功能,防止 DLL 功能被滥用。
  • 提高 DLL 破解难度,调用者无法通过函数名推测函数功能,增加分析接口功能、接口间业务逻辑关系的复杂程度。

匿名导出 DLL 接口能够一定程度提升安全性,但使用 IDA 等静态反编译工具逆向代码逻辑,能够找到函数的接口参数类型,并且大致了解接口内部实现逻辑(没有函数名,逆向分析的难度已经加大),如果要进一步提升 DLL 的安全性,需要使用加壳工具进行保护或采用其他的安全防护手段。

本文内容由互联网用户自发贡献,该文观点仅代表作者本人,本站仅供展示。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 97552693@qq.com 举报,一经查实,本站将立刻删除。

给TA打赏
共{{data.count}}人
人已打赏
互联网

wps组织架构图的制作(wps的smartart在哪里)

2023-9-20 11:31:45

互联网

ps绘制椭圆路径讲解(ps怎么画椭圆的线条)

2023-9-20 11:33:19

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索