CN103198244A - 保护动态链接库的方法 - Google Patents

保护动态链接库的方法 Download PDF

Info

Publication number
CN103198244A
CN103198244A CN2013101001168A CN201310100116A CN103198244A CN 103198244 A CN103198244 A CN 103198244A CN 2013101001168 A CN2013101001168 A CN 2013101001168A CN 201310100116 A CN201310100116 A CN 201310100116A CN 103198244 A CN103198244 A CN 103198244A
Authority
CN
China
Prior art keywords
dynamic link
link library
function
file
dll
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2013101001168A
Other languages
English (en)
Other versions
CN103198244B (zh
Inventor
孙吉平
韩勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Senseshield Technology Co Ltd
Original Assignee
Beijing Senseshield Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Senseshield Technology Co Ltd filed Critical Beijing Senseshield Technology Co Ltd
Priority to CN201310100116.8A priority Critical patent/CN103198244B/zh
Publication of CN103198244A publication Critical patent/CN103198244A/zh
Application granted granted Critical
Publication of CN103198244B publication Critical patent/CN103198244B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种保护动态链接库的方法,用于调用动态链接库文件的情况下对动态链接库文件导出函数的信息进行保护,包括以下步骤:S1:分析动态链接库文件的导出表,解析出所述动态链接库文件的导出表中的导出函数的函数名,将导出函数的函数名字符串全部清除;S2:将修改后的动态链接库文件整体移到可执行文件中;S3:在可执行文件中添加一属性为可读可写可执行的节,用于将原入口地址改为指向节的代码,通过节从内存加载修改后的动态链接库文件后,跳回原入口地址。本发明的保护动态链接库的方法针对现有技术中的缺陷,EXE从内存直接加载DLL,不会有任何临时文件产生,最大限度的保护了软件的安全性。

Description

保护动态链接库的方法
技术领域
本发明涉及软件保护领域,尤其涉及一种保护动态链接库的方法。
背景技术
软件作为一种特殊的产品,由于其纯数字化的特征,从问世起就一直遭受盗版的困扰。盗版的存在不仅给软件开发者造成了巨大的损失,也极大阻碍了整个软件行业的发展。因此,几乎所有的软件都采取了相应的技术措施来避免软件遭受破解和盗版,而其中大多数软件都会使用到动态链接库(DLL),并且会包含有重要的功能,所以对软件使用到的动态链接库(DLL)做必要的保护势在必行。
现有技术中的保护方法中,该DLL的导出表仍然暴露在外,其函数名仍然可见,对破解或盗版者来说,可以直达函数体进行跟踪调试,或通过函数名猜测其函数功能,从而提供破解线索,不利于软件的保护。软件所使用的DLL还可能被破解或被盗版者替换掉,从而对软件功能和安全造成威胁,该DLL还可能被非法盗用。现有的保护是将DLL捆绑到可执行文件(EXE)中,在运行中动态释放到硬盘中,存成文件再调用,但其在本质上并没有起到真正保护的作用。
发明内容
本发明所要解决的技术问题是,针对现有保护技术中所采用的暴露接口函数名和存在实体文件的缺陷,EXE从内存直接加载DLL,不会有任何临时文件产生,最大限度的保护了软件的安全性。
为了解决上述技术问题,本发明提供了一种保护动态链接库的方法,用于调用动态链接库文件的情况下对动态链接库文件导出函数的信息进行保护,包括以下步骤:
S1:分析动态链接库文件的导出表,解析出所述动态链接库文件的导出表中的导出函数的函数名,将所述导出函数的函数名字符串全部清除;
S2:将修改后的动态链接库文件整体移到可执行文件中;
S3:在所述可执行文件中添加一属性为可读可写可执行的节,用于将原入口地址改为指向所述节的代码,通过所述节从内存加载修改后的动态链接库文件后,跳回原入口地址。
作为优选,S2步骤还包括:获得所述导出函数的序号,以一个不重复的随机数替代所述序号,将可执行文件的导入表和动态链接库文件的导出表互相关联,并将该随机数作为可执行文件的导入表和动态链接库文件的导出表的唯一对应号。
作为优选,所述方法通过隐式调用方式实现,在步骤S1之前还执行步骤S0,
S0:分析可执行文件的导入表,找到需要被保护的动态链接库文件名,根据导入表的导入描述项,找到需要调用的所有导出函数的函数名和引用地址后,删去该导入描述项。
作为优选,所述方法通过显式调用方式实现,在步骤S3之前还执行步骤S21,
S21:分析可执行文件的代码,将用于得到需要被保护的动态链接库导出函数首地址的函数所引用的函数名字符串全部清除;
S3步骤中的所述节包括功能函数,其功能为判断是否要调用需要保护的动态链接库文件,如果是,则执行步骤S31;如果否,则执行步骤S32;
S31:直接从内存中加载;
S32:正常调用系统中能够加载动态链接库的函数。
与现有技术相比,本发明的保护动态链接库的方法的有益效果在于:通过将导出函数的函数名字符串全部清除,并且以一个随机数替代导出函数的序号并将该随机数作为可执行文件的导入表和动态链接库文件的导出表的唯一对应号,将DLL中的文件数据整体移到EXE中,使两者都形成没有符号接口暴露的“隐式链接”,使DLL与EXE成为一体,从内存直接加载DLL,不会有任何临时文件产生,最大限度的保护了软件的安全性。
附图说明
图1为使用本发明的实施例的保护动态链接库的方法前的整体调用关系示意图;
图2为使用本发明的实施例的保护动态链接库的方法后的整体调用关系示意图;
图3为本发明的实施例一的保护动态链接库的方法的流程示意图;
图4为本发明的实施例二的保护动态链接库的方法的流程示意图。
具体实施方式
下面结合附图和具体实施例对本发明的实施例的保护动态链接库的方法作进一步详细描述,但不作为对本发明的限定。
在对本发明说明之前,先对动态链接库及相关技术应用做一下说明。WIN平台下动态链接库英文为DLL,是Dynamic Link Library的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库。动态链接库的优点:其一,共享代码、资源和数据,使用DLL的主要目的就是为了共享代码,DLL的代码可以被所有的Windows应用程序共享;其二,隐藏实现的细节,DLL中的例程可以被应用程序访问,而应用程序并不知道这些例程的细节;其三,拓展开发工具如Delphi的功能,可以创建一个DLL,被C++、VB或任何支持动态链接库的语言调用。这样如果一种语言存在不足,就可以通过访问另一种语言创建的DLL来弥补。可执行程序(EXE)通过动态链接库(DLL)导出表的函数名或序号来实现调用的。
可执行文件的调用方式分为隐式调用和显式调用,其中:
隐式调用这种用法的前提是在编译之前已经明确知道要调用DLL中的哪几个函数,编译时在目标文件中只保留必要的链接信息,而不含DLL函数的代码;当程序执行时,利用链接信息加载DLL函数代码并在内存中将其链接入调用程序的执行空间中,其主要目的是便于代码共享;
显式调用这种方式是指在编译之前并不知道将会调用哪些DLL函数,完全是在运行过程中根据需要决定应调用哪个函数,并用LoadLibrary和GetProcAddress动态获得DLL函数的入口地址。
相比之下,隐式调用在编程时比较简单,指定导入库文件后,不必考虑函数的重命名,就可以直接调用动态库函数。但由于隐式调用不能指定动态库的加载时机,因此在一个程序开始运行时,操作系统会将该程序需要的动态链接库都加载入内存,势必造成程序初始化的时间过长,影响用户体验。而显式调用采用动态加载的方法,用到什么加载什么,用完即释放,灵活性较高,可以使程序得到优化。
图1为使用本发明的实施例的保护动态链接库的方法前的整体调用关系示意图;图2为使用本发明的实施例的保护动态链接库的方法后的整体调用关系示意图。本发明的实施例的保护动态链接库的方法,用于调用动态链接库文件的情况下对动态链接库文件导出函数的信息进行保护,包括以下步骤:
S1:分析动态链接库文件的导出表,解析出所述动态链接库文件的导出表中的导出函数的函数名,将所述导出函数的函数名字符串全部清除;
S2:将修改后的动态链接库文件整体移到可执行文件中;
S3:在所述可执行文件中添加一属性为可读可写可执行的节,用于将原入口地址改为指向所述节的代码,通过所述节从内存加载修改后的动态链接库文件后,跳回原入口地址。
通过将导出函数的函数名字符串全部清除,将DLL中的文件数据整体移到EXE中,使两者都形成没有符号接口暴露的“隐式链接”,使DLL与EXE成为一体,从内存直接加载DLL,不会有任何临时文件产生,最大限度的保护了软件的安全性。
作为一种改进,本发明的实施例的保护动态链接库的方法的S2步骤还包括:获得所述导出函数的序号,以一个不重复的随机数替代所述序号,将并将该随机数作为可执行文件的导入表和动态链接库文件的导出表的唯一对应号。照此方法后,EXE在加载DLL时,根本不会生成临时硬盘上的文件,直接从内存中加载,而导出函数的序号则被对应的随机序号取代,增加了安全性。
图3为本发明的实施例一的保护动态链接库的方法的流程示意图。本发明的实施例一的保护动态链接库的方法通过隐式调用方式实现,在步骤S1之前执行步骤S0:
S0:分析可执行文件的导入表,找到需要被保护的动态链接库文件名,根据导入表的导入描述项,找到需要调用的所有导出函数的函数名和引用地址后,删去该导入描述项。
本实施例以在WIN平台下一个可执行文件program.exe,调用function.dll中的导出函数A来获取信息为例进行说明,图3中步骤a1到步骤a5详细的标示出了具体步骤。当然,本实施例也可以运用在别的平台。
1、在program.exe的导入表中找到function.dll的导入描述项,解析出program.exe所有引用到A函数的地址,保存起来(放入之后新建节的代码中),将此导入描述项删除;
2、解析function.dll的导出表,得到函数名,序号为1,将信息暂时保存到内存中;
3、随机选个数字(例如0x1234),准备用于A函数的序号,替换之前的序号1;
4、将function.dll导出表描述项的Name指针对对应的A函数的函数名字符串全部清除,再将该项序号改为0x1234;
5、将修改好的function.dll以资源的形式放入到program.exe中;
6、在program.exe中添加一个节,可读写执行属性,将program.exe原入口点(RVA)0x1000信息记下,替换为新加节的起始地址(RVA)0x5000;
7、在program.exe新节中添加代码,找到添加的资源(修改后的function.dll文件),使用LoadLibrary载入模块,然后将第1步解析出来的引用A函数地址进行重定位,最后跳到原入口点(RVA)0x1000。
至此处理结束,在运行program.exe后,会首先执行新添加节的代码,将原function.dll模块载入。在文件中不会存在任何A函数字符串信息,调用过程也是直接调用,也未释放任何临时文件帮助加载,起到了很好的保护作用,提高了软件的安全性。
图4为本发明的实施例二的保护动态链接库的方法的流程示意图。本发明的实施例二的保护动态链接库的方法通过显式调用方式实现,在步骤S3之前执行步骤S21:
S21:分析可执行文件的代码,将用于得到需要被保护的动态链接库导出函数首地址的函数所引用的函数名字符串全部清除;
S3步骤中的所述节包括功能函数,其功能为判断是否要调用需要保护的动态链接库文件,如果是,则执行步骤S31;如果否,则执行步骤S32;
S31:直接从内存中加载;
S32:正常调用系统中能够加载动态链接库的函数。
本实施例以在WIN平台下一个可执行文件program.exe,调用function.dll中的导出函数B来获取信息为例进行说明,图4中步骤b1到步骤b7详细的标示出了具体步骤。当然,本实施例也可以运用在别的平台。
1、解析function.dll的导出表,得到B函数的函数名,序号为1。将信息暂时保存到内存中;
2、随机选个数字(例如0x1234),准备用于B函数的序号,替换之前的序号1;
3、将修改好的function.dll以资源的形式放入到program.exe中;
4、分析EXE文件的代码部分,解析出GetProcAddress函数取得原function.dll文件的导出函数地址的第二个参数,将0x1234前加0000改为0x00001234,意为强制以序号方式取得函数地址,将原第二个参数所指向的函数名字符串全部清除;
5、在program.exe中添加一个节,可读写执行属性,将program.exe原入口点(RVA)0x1000信息记下。替换为新加节的起始地址(RVA)0x5000;
6、在新节中添加代码,通过程序调用功能函数(定义为MyLoadLibrary),判断是否要载入所要保护的function.dll文件,如果是的话,找到添加的资源(修改后的function.dll文件),从内存中加载。如果不是需要保护的文件,就正常调用LoadLibrary加载。
至此处理结束,在运行program.exe后,当需要显式加载function.dll时,会执行功能函数(定义为MyLoadLibrary)检查,如果是要加载要保护的function.dll文件,就从资源节中寻找function.dll资源,直接从内存中LoadLibrary。无论在program.exe和function.dll中,不存在任何原函数名B函数相关字符串,也不存在临时释放的文件,起到了很好的保护作用,提高了软件的安全性。
以上实施例仅为本发明的示例性实施例,不用于限制本发明,本发明的保护范围由权利要求书限定。本领域技术人员可以在本发明的实质和保护范围内,对本发明做出各种修改或等同替换,这种修改或等同替换也应视为落在本发明的保护范围内。

Claims (4)

1.一种保护动态链接库的方法,用于调用动态链接库文件的情况下对动态链接库文件导出函数的信息进行保护,其特征在于,包括以下步骤:
S1:分析动态链接库文件的导出表,解析出所述动态链接库文件的导出表中的导出函数的函数名,将所述导出函数的函数名字符串全部清除;
S2:将修改后的动态链接库文件整体移到可执行文件中;
S3:在所述可执行文件中添加一属性为可读可写可执行的节,用于将原入口地址改为指向所述节的代码,通过所述节从内存加载修改后的动态链接库文件后,跳回原入口地址。
2.根据权利要求1所述的保护动态链接库的方法,其特征在于,S2步骤还包括:获得所述导出函数的序号,以一个不重复的随机数替代所述序号,将可执行文件的导入表和动态链接库文件的导出表互相关联,并将该随机数作为可执行文件的导入表和动态链接库文件的导出表的唯一对应号。
3.根据权利要求1所述的保护动态链接库的方法,其特征在于,所述方法通过隐式调用方式实现,则在步骤S1之前还执行步骤S0,
S0:分析可执行文件的导入表,找到需要被保护的动态链接库文件名,根据导入表的导入描述项,找到需要调用的所有导出函数的函数名和引用地址后,删去该导入描述项。
4.根据权利要求1所述的保护动态链接库的方法,其特征在于,所述方法通过显式调用方式实现,则在步骤S3之前还执行步骤S21,
S21:分析可执行文件的代码,将用于得到需要被保护的动态链接库导出函数首地址的函数所引用的函数名字符串全部清除;
S3步骤中的所述节包括功能函数,其功能为判断是否要调用需要保护的动态链接库文件,如果是,则执行步骤S31;如果否,则执行步骤S32;
S31:直接从内存中加载;
S32:正常调用系统中能够加载动态链接库的函数。
CN201310100116.8A 2013-03-26 2013-03-26 保护动态链接库的方法 Active CN103198244B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310100116.8A CN103198244B (zh) 2013-03-26 2013-03-26 保护动态链接库的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310100116.8A CN103198244B (zh) 2013-03-26 2013-03-26 保护动态链接库的方法

Publications (2)

Publication Number Publication Date
CN103198244A true CN103198244A (zh) 2013-07-10
CN103198244B CN103198244B (zh) 2016-06-29

Family

ID=48720796

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310100116.8A Active CN103198244B (zh) 2013-03-26 2013-03-26 保护动态链接库的方法

Country Status (1)

Country Link
CN (1) CN103198244B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105447349A (zh) * 2015-11-20 2016-03-30 珠海多玩信息技术有限公司 对so文件中的导出符号进行保护的方法及装置
CN106034119A (zh) * 2015-03-16 2016-10-19 阿里巴巴集团控股有限公司 应用安装包的加密混淆方法及装置
CN107256349A (zh) * 2017-06-13 2017-10-17 广州阿里巴巴文学信息技术有限公司 动态库防盗用方法、装置、电子设备及可读存储介质
CN107704279A (zh) * 2016-08-08 2018-02-16 腾讯科技(深圳)有限公司 一种数据加载方法以及装置
CN110414217A (zh) * 2019-07-31 2019-11-05 广东小天才科技有限公司 应用程序的安全运行方法、装置、电子设备和存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6618735B1 (en) * 1999-06-30 2003-09-09 Microsoft Corporation System and method for protecting shared system files
CN1535408A (zh) * 2001-07-31 2004-10-06 使用“重命名”原理保护软件防止未授权使用的方法
CN1945589A (zh) * 2006-10-16 2007-04-11 珠海金山软件股份有限公司 一种Windows平台下保护动态链接库接口的方法
CN101826014A (zh) * 2010-04-20 2010-09-08 北京邮电大学 一种软件工程源代码的分割方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6618735B1 (en) * 1999-06-30 2003-09-09 Microsoft Corporation System and method for protecting shared system files
CN1535408A (zh) * 2001-07-31 2004-10-06 使用“重命名”原理保护软件防止未授权使用的方法
CN1945589A (zh) * 2006-10-16 2007-04-11 珠海金山软件股份有限公司 一种Windows平台下保护动态链接库接口的方法
CN101826014A (zh) * 2010-04-20 2010-09-08 北京邮电大学 一种软件工程源代码的分割方法

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106034119A (zh) * 2015-03-16 2016-10-19 阿里巴巴集团控股有限公司 应用安装包的加密混淆方法及装置
CN106034119B (zh) * 2015-03-16 2019-01-04 阿里巴巴集团控股有限公司 应用安装包的加密混淆方法及装置
CN105447349A (zh) * 2015-11-20 2016-03-30 珠海多玩信息技术有限公司 对so文件中的导出符号进行保护的方法及装置
CN107704279A (zh) * 2016-08-08 2018-02-16 腾讯科技(深圳)有限公司 一种数据加载方法以及装置
CN107704279B (zh) * 2016-08-08 2020-12-29 腾讯科技(深圳)有限公司 一种数据加载方法以及装置
CN107256349A (zh) * 2017-06-13 2017-10-17 广州阿里巴巴文学信息技术有限公司 动态库防盗用方法、装置、电子设备及可读存储介质
CN110414217A (zh) * 2019-07-31 2019-11-05 广东小天才科技有限公司 应用程序的安全运行方法、装置、电子设备和存储介质
CN110414217B (zh) * 2019-07-31 2023-03-24 广东小天才科技有限公司 应用程序的安全运行方法、装置、电子设备和存储介质

Also Published As

Publication number Publication date
CN103198244B (zh) 2016-06-29

Similar Documents

Publication Publication Date Title
Balasubramanian et al. System programming in rust: Beyond safety
Sen et al. Jalangi: A selective record-replay and dynamic analysis framework for JavaScript
Ma et al. Accurate, low cost and instrumentation-free security audit logging for windows
JP4902129B2 (ja) セキュリティ仮想マシンを介してセキュリティポリシーを実施するための方法およびシステム
EP3365772B1 (en) Missing include suggestions for external files
US8464207B2 (en) System and method for tracking software changes
US8615735B2 (en) System and method for blurring instructions and data via binary obfuscation
CN110059456B (zh) 代码保护方法、代码保护装置、存储介质与电子设备
CN104408366A (zh) 基于插装技术的安卓应用程序权限使用行为跟踪方法
US20130125096A1 (en) Systems and Methods for Dynamic Collection of Probe Call Sites
CN103198244A (zh) 保护动态链接库的方法
CN111124479B (zh) 配置文件的解析方法、系统及电子设备
JP2023507709A (ja) 統合された参照及び二次のマーキング
CN111506500B (zh) 内存泄露检测方法、装置、电子设备及可读存储介质
Ognawala et al. Compositional fuzzing aided by targeted symbolic execution
CN114144764A (zh) 使用影子栈的栈跟踪
US9117017B2 (en) Debugger with previous version feature
Liu et al. Exploring missed optimizations in webassembly optimizers
US8769498B2 (en) Warning of register and storage area assignment errors
US20180129490A1 (en) Object ordering preservation during lto link stage
US8423974B2 (en) System and method for call replacement
Hammacher Design and implementation of an efficient dynamic slicer for Java
KR101842263B1 (ko) 어플리케이션에 대한 역공학 차단 방법 및 장치
CN106897588B (zh) 一种标签函数的处理方法及装置
Foroughipour et al. AndroClonium: Bytecode-level code clone detection for obfuscated Android apps

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: 100872 room 1706, building 59, Zhongguancun street, Haidian District, Beijing

Applicant after: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

Address before: 100872 room 1706, building 59, Zhongguancun street, Haidian District, Beijing

Applicant before: BEIJING SHENSI SHUDUN TECHNOLOGY Co.,Ltd.

COR Change of bibliographic data
C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee
CP02 Change in the address of a patent holder

Address after: 100193 Beijing, Haidian District, East West Road, No. 10, East Hospital, building No. 5, floor 5, layer 510

Patentee after: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

Address before: 100872 room 1706, building 59, Zhongguancun street, Haidian District, Beijing

Patentee before: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

CP01 Change in the name or title of a patent holder

Address after: 100193 5th floor 510, No. 5 Building, East Yard, No. 10 Wangdong Road, Northwest Haidian District, Beijing

Patentee after: Beijing Shendun Technology Co.,Ltd.

Address before: 100193 5th floor 510, No. 5 Building, East Yard, No. 10 Wangdong Road, Northwest Haidian District, Beijing

Patentee before: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

CP01 Change in the name or title of a patent holder