趣文网 > 作文大全

C/C++ DLL 导出接口保护(匿名导出)

2020-12-02 18:45:01
相关推荐

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

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

1. __declspec(dllexport)导出;

2.*.def 文件导出。

__declspec(dllexport) 导出

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

test_dll.h

test_dll.cpp

def 文件导出

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

1.定义 .def 文件

test_dll.def

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

3.设置工程属性

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

4.编译生成 DLL使用工具查看导出函数名接口,导出接口的顺序与 def文件定义的序号相同。

存在问题

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

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

test_dll.def

NONAME表示不导出函数名称(匿名)。使用 CFF Explorer工具查看导出函数接口名称,函数名称已经被隐藏掉。

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

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

动态加载

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

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

小结

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

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

阅读剩余内容
网友评论
相关内容
延伸阅读
小编推荐

大家都在看

关于我想拥有什么的作文 我最喜欢的电影英语作文 老师的作用作文 关于劳动的作文200 暑假作文题目大全29个 写人物作文300字左右 300优秀作文 二年级的暑假生活作文 描写飞机的作文 仿写作文评语 少年责任作文 改变自己作文 许嵩高考作文破记录 有关朋友的英语作文 放假第一天作文 感恩母校500字作文 我想有个星期八作文 足球比赛作文500字 公益活动作文 初二下册语文第二单元作文 假如我是一朵花作文 有趣的蚂蚁作文200字 打屁股作文1000000字 伟大的母爱作文400字 每一棵草都会开花作文 和睦相处作文 紫叶酢浆草作文 先抑后扬写人作文600字 写景作文大全300字 当有人敲门的时候作文