一种基于交互协议的动态库加解密及动态加载方法与流程

文档序号:14836179发布日期:2018-06-30 12:30阅读:302来源:国知局
一种基于交互协议的动态库加解密及动态加载方法与流程

本发明涉及数字媒体版权管理DRM领域,具体是一种基于交互协议的动态库加解密及动态加载方法。



背景技术:

数字媒体内容保护DRM技术,是广泛应用于音视频、文档等多媒体数字内容版权保护的主流技术,大量应用于。在DRM应用系统体系中,DRM客户端承担认证、授权、内容解密关键安全功能。DRM客户端通常是中间件包括动态、静态库的函数集形式,需要与各种音视频流媒体播放器、文件阅读器等应用终端集成,运行Windows、Android、IOS等操作系统平台。

在实际DRM技术应用中,一方面DRM客户端软件执行安全算法,具有高安全性要求;另一方面DRM客户端软件可执行代码处于曝露在开放的环境下,极容易遭到软件逆向分析的攻击从而彻底破坏DRM技术安全基础。因此,解决DRM客户端软件代码安全是DRM技术中重要挑战。

目前软件代码的逆向工程从理论与实践都发展很快,在理论上应用程序切片、模型检查、数据流分析等分析方法,一般针对执行代码反汇编代码进行逆向分析,在实践中,C、C++、Java等编程语言都能做逆向分析,同时还出现了很多的逆向工程软件。在逆向分析的基础上,通过代码篡改等手段更改软件执行路径和逻辑,破解软件的安全性。

为了防止对DRM客户端静态代码逆向分析,因此提出一种通过对核心安全软件代码加密和接口隐藏机制来提高DRM客户端的安全性。



技术实现要素:

本发明的目的在于提供一种基于交互协议的动态库加解密及动态加载方法,以解决上述背景技术中提出的问题。

为实现上述目的,本发明提供如下技术方案:

一种基于交互协议的动态库加解密及动态加载方法,包含以下步骤:

S1、DRM客户端分解代码装载器和核心代码库;

S2、对核心代码库文件动态库外部函数接口隐藏、计算数字签名和文件内容加密;

S3、对加密后的核心代码库文件添加封装文件头;

S4、只需要明文的代码装载器以函数库与第三方应用集成;

S5、代码装载器与DRM系统建立加密会话通道获取对文件解密的所需信息;

S6、将核心代码库读入内存中做解密和校验数字签名;

S7、将内存中解密后的核心代码库动态库映射进程虚拟线性空间;

S8、从映射的动态库中获取核心代码库的入口函数地址,实现对核心代码库接口函数调用。

作为本发明进一步的方案:所述函数接口隐藏的方法具体是:将动态库中动态链接函数表中函数链接符号和函数地址清除,接口函数地址按照预置隐藏策略写入至预设一个代码段空间;一般利用专门函数代码段空间作为接口函数地址隐藏空间;接口隐藏的规则在代码装载器启动时实时从DRM系统端获取。

作为本发明再进一步的方案:网关与HNR服务器会建立网络通讯隧道,隧道建立后网关所有的网络上下行数据都必须经过HNR服务器,HNR服务器将网关的所有或大部分的下行数据都通过IPQAM调制器走数字电视网络发送给网关。

作为本发明再进一步的方案:所述代码装载器在解密核心代码库时必须通过与DRM系统端之间安全会话实时通过获取解密密钥信息。

作为本发明再进一步的方案:内存中对核心代码库解密和校验签名,在内存中解密后动态库直接映射成进程线性空间,保证了终端文件系统中不会保存明文的核心代码库,防止代码静态逆向分析。

与现有技术相比,本发明的有益效果是:本发明利用将DRM客户端中具有安全要求算法、逻辑和流程归入核心代码库,对其做加密、数字签名后再分发到开放环境下的各种类型应用终端;对核心代码库解密密钥是建立在代码装载器与DRM系统建立安全会话通道基础上通过消息交互方式从DRM系统端获取;解密与数字签名校验在内存中完成,并从内存中直接映射装载核心代码动态库。这些技术方法从DRM客户端核心安全功能模块的分发、终端文件存储、文件解密、动态库装载端到端的过程以及解密密钥实时交互获取机制,保障了不会被第三方以明文方式截获,从而有效地防止第三方对DRM客户端核心安全功能实施反汇编等方式静态代码逆向分析和代码注入,保证了DRM客户端在开放环境下的运行安全。本发明中针对动态库的处理方法适用Windows PE格式、Linux和Android ELF格式以及其它平台的动态库文件格式要求。

附图说明

图1是本发明实施例提供的基于交互协议的动态库加解密及动态加载方法流程图。

图2是本发明实施例提供的动态库函数接口隐藏方法流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图1~2,本发明实施例中,一种基于交互协议的动态库加解密及动态加载方法,该方法应用于终端操作系统为Windows平台的应用,比如视频播放器集成DRM客户端实现数字媒体版权保护的管控。参考图1所示,该方法大致包括步骤S1至S6:

步骤S1中、DRM客户端作为播放器的集成中间件分成代码装载器和核心代码库两个模块。在Windows平台下,代码装载器编译成静态库或动态库与播放器代码做联编;核心代码库编译成动态库,编译后的动态库是PE格式的动态连接库。

步骤S2中、在DRM系统中预先设置一组密钥,当需要对核心代码库版本加密时通过文件加密工具从DRM系统选取一个密钥。一般优选地首先应用MD5数字摘要算法计算出核心代码库文件数字签名串,再利用选择密钥应用对称加密算法AES对文件进行加密。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的技术人员来说,在不脱离本发明构思的前提下,还可以做出若干等同替代或明显变型,而且性能或用途相同,都应当视为属于本发明的保护范围。

步骤S3中、为加密后的核心代码库文件添加封装文件头,文件头部包含版本号、加密的密钥标识ID、接口隐藏策略、文件长度信息、数字签名信息以及其它信息,是用于库文件解密所需信息。

步骤S4中、代码装载器与播放器做软件联编集成,播放器允许调用代码装载器公开的函数接口,用于启动模块或其它功能调用。加密后的核心代码库文件随播放器一起打包或单独文件下载方式存储在终端设备的本地文件系统中。

步骤S5中、播放器启动过程中同时启动代码装载器,代码装载器向DRM系统

发起CHAP消息协议,通过交换密钥建立起双向加密的会话通道。代码装载器从指定文件路径下核心代码库文件的封装头信息,在会话通道中发起密钥查询消息,获取密钥标识ID对应的密钥,同时根据版本号获取接口隐藏策略信息。

步骤S6中、代码装载器将加密的核心代码库文件读入内存中,查找到加密部分的内存起始偏移,使用获取的密钥根据加密数据长度对核心代码文件做解密操作,解密后内容计算MD5数字摘要并与文件头中数字摘要对比验证签名一致性,如果不一致,则视为非法的文件并放弃后续步骤。

步骤S6中、代码装载器将解密验证签名后的内存数据,实际对应动态库文件加载进程虚拟线性空间,根据Windows下动态链接库DLL的PE格式协议,重新调整各个段Section的线性地址,该步骤的具体方法如下:

首先根据PE格式计算需要在进程连续虚拟线性空间申请空间大小,并设置为可读写可执行模式;将内存中解密后的动态库各部分拷贝至对应的虚拟内存空间;重新计算重定位地址;然后导出入口函数地址后可对函数进行调用,即完成DLL文件从内存直接加载过程。

如图2所示,本发明的另一具体实施方式提供了一种动态库函数接口隐藏的方法,用于将DRM客户端核心代码库在动态库的动态符号链接表中去除对外函数接口符号信息,并应用隐藏算法将函数地址隐藏在代码段或数据段中。参考图2所示,该方法大致包括步骤H1至H4:

步骤H1中,解析Windows PE格式的核心代码动态库文件的动态符号链接表中获取所有对外接口函数地址。

步骤H2中,利用在核心代码动态库中预留一段空间的代码段,具体方法是定义一个包含连续数目空操作指令NOP函数,利用该函数占用的代码段空间作为接口函数地址存放的空间,该函数地址是这段空间的起始位置。在DRM系统中预置一组隐藏策略,不同的核心代码库版本选择一个隐藏策略。隐藏策略定义为接口函数地址先后排列顺序编码。

步骤H3中,在接口函数地址隐藏完成后,在动态符号链接表中保留一个约定的根接口函数地址外,清除其余接口函数地址内容。

步骤H4中,在代码装载器将核心代码库DLL映射到内存空间后,利用文件封装头中版本号从DRM系统获取接口隐藏策略信息。核心代码库的根接口函数根据接口隐藏策略还原出其它所有正确对应的接口函数地址,返回给代码装载器接口函数地址列表共代码装载器功能调用。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1