陈亦欣,肖 锋,李庆楠
(1.江汉大学 数学与计算机科学学院,湖北 武汉 430056;2.武汉大学 计算机学院,湖北 武汉 430072)
通用型DRM系统的扩散控制研究
陈亦欣1,肖 锋1,李庆楠2
(1.江汉大学 数学与计算机科学学院,湖北 武汉 430056;2.武汉大学 计算机学院,湖北 武汉 430072)
针对数字媒体内容版权保护的需求,提出了一种通用型DRM系统的扩散控制技术,它不依赖于媒体文件格式和媒体的内容。对媒体文件进行加密捆绑封包,只有授权用户才能对其解包以及解密,同时进程监控程序防止用户非法扩散媒体文件内容,进程隐藏方法则对监控程序进行保护,防止用户强制将其关闭。扩散控制技术利用保护文件和被保护媒体的结合与管控,防止了版权内容被非法扩散。
通用型DRM;数字媒体;文件捆绑;进程隐藏
微软的Windows Media DRM平台可以保护并安全地传送点播内容和订阅内容,以在计算机、便携设备或网络设备上播放。其中Windows Media权限管理器会将Windows Media DRM文件打包并向合法用户颁发许可证。数字媒体权利的所有者可以使用Windows Media权限管理器来对指定的数字媒体文件加密并使用一个“密钥”将其锁定,然后与内容提供商所提供的其他信息捆绑在一起。只有获取许可证的人才能播放打包的文件[1]。
然而Windows Media DRM的保护对象只是Windows Media Audio格式(扩展名为.wma)或Windows Me⁃dia Video格式(扩展名为.wmv)的文件,并且播放软件也必须为Windows Media播放器,对于其他格式的媒体文件尚不能起到保护作用,并且实现的技术细节也未公开。
基于通用性原则,本文提出一种对任何格式的数字媒体文件都适用的防止媒体内容扩散的保护方案。其中对用户操作行为的管控最为关键(见图1),主要步骤设计如下:
1)打包。服务器将媒体文件和保护文件打包成为一个文件,再传输给用户。用户运行下载到本地的媒体文件包,解包即开始,文件头部的解包程序自动运行。
2)解包并加载驱动。文件存放的目录中,进程和文件隐藏驱动、API拦截驱动等几个驱动文件从打包文件中被释放出来并加载。在加载监控程序之前会做一次检查,遇到已经启动的非法进程,会提示用户将其关闭。
3)获取身份信息。负责保护的监控程序这时就会获取计算机的硬件指纹,进而和服务器进行通信,把获得的客户机硬件指纹信息以及用户的信息等发送到授权服务器[2]。
4)验证信息。授权服务器得到发送来的信息后,会接受一个授权请求包,那么它会在数据库中查询信息来验证用户对该文件的权利,验证不通过就会拒绝请求;一旦验证通过,就会给用户发送解密文件的密钥。
5)解密并持续监控。获得了密钥的监控程序就会对文件进行解密操作,同时监控程序开启心跳线程建立与授权服务器的持续连接,如果发现连接断开则退出并关闭文件。
6)管控用户操作。解密了的文件在内存中生成明文,自动关联相应的应用程序来对其打开播放。这时就要安装钩子函数来实现屏蔽消息,达到防止复制、粘贴、打印、截屏等操作。并且它还要发送一条消息给驱动层的API拦截驱动,通知它拦截的明文文件的绝对路径。每当系统打开一个文件,该文件的绝对路径都将被获取用以和前面得到的明文文件的绝对路径进行比较,如果不吻合则放过,如果吻合则记录下打开该文件的进程ID。
7)退出。监控程序一直等到应用程序退出后,才卸载加载过的驱动以及钩子,删除释放过的文件。
图1 DRM系统管控用户使用媒体文件的流程图Fig.1 Procedure of DRM system controlling the using of media file
下面分别介绍系统中涉及的扩散控制关键技术,包括基于文件捆绑的自解包自解密文件结构的设计,以及基于Windows平台注入技术实现的进程和文件的监控和隐藏方法。
DRM规范定义了受保护内容对象需要打包成一个特定格式的文件,该文件包中除了加密的数字媒体内容外,还包含一些用来描述受保护内容的元数据[3]。文件包只是简单地起到一种存放内容和数据的作用[4]。而在本方案中,笔者对包文件结构的内容进行了改进和扩充。DRM平台的服务器将一切需要在客户端运行的文件连同媒体内容都打包到一个包文件之中。该包文件中不仅包括媒体文件的密文,还有自解包文件、监控程序以及各种功能性DLL组件等。
1)密文(CIPHERTEXT.CT):密文即需要被保护的媒体文件,它也是文件包中最主要的内容,它被传输到客户端后将由解密程序进行解密。
2)监控程序(Decipher.exe):监控程序的作用就是对密文进行解密和对打开媒体文件的应用程序进行选择,另外,它还要对相应的DLL文件和几个驱动服务进行加载,用来对打开媒体文件的应用程序进行监管[5]。
3)DLL组件:即MouseHook.dll,其作用是对鼠标键盘和一些API函数进行监视和拦截。
4)驱动文件:包含driver_hook_ssdt.sys、driver_hide_proc.sys以及driver_hide_file.sys 3个文件。
5)打包/解包程序(UnBind.exe):打包程序的作用是对所有的文件进行捆绑,包文件传输到客户端后用户运行包就会运行解包程序进行解包操作,对包内所有文件进行还原,并且它还是解包后的引导程序,因此它还负责对完成后的后续任务的进程进行创建。该包文件为可执行文件(.exe文件)。当客户端用户双击打开它时,它能够实现自解包、密文文件的自解密,并自动有序地运行包内的其他文件。
1.1 捆绑文件内部结构
将文件捆绑打包的目的是使用户在客户端使用媒体文件时,对其进行一定的限制,防止内容被其转发。捆绑文件的主要功能是把媒体文件的密文和监控程序、文件隐藏驱动、进程隐藏驱动、监控的DLL和API拦截驱动捆绑成一个包文件。
打包的流程如图2所示,打包程序把同一目录下的解包程序、密文文件、监控程序、DLL以及驱动文件捆绑为一个文件。该文件的内部结构如图3所示。
图2 文件捆绑图Fig.2 Binding files
图3 服务器端自解压文件内部结构Fig.3 Internal structure of self extracting file in server side
打包程序创建一个新的.exe文件,计算解包文件长度并将其写入该文件。同时,分别计算密文、解密程序、DLL组件和驱动文件的长度并将它们顺序写入.exe文件。
解包程序位于.exe文件的头部,因此,解包程序是.exe文件中最先运行的程序,利用文件定位,该程序实现了解绑操作,并作为引导程序创建.exe文件中其他程序的进程从而完成后续工作。在解包程序UnBind.exe文件里,各个文件的长度信息被记录在一个名为MODIFY_DATA的数据结构之中。
打包程序首先获得每一个需要被捆绑文件的长度信息,再把该长度信息写入到打包程序自身的MODIFY_DATA数据结构内。接着,对MODIFY_DATA结构中的finder进行查找,从而得到解包程序的MODIFY_DATA数据结构,再把打包程序自身的MODIFY_DATA数据结构复制到解包程序的MODI⁃FY_DATA里。
1.2 文件解包原理
解包顾名思义就是将打好的包文件释放出来,是封包的逆过程。解包的结果就是把包文件里除了解包程序之外的所有内容还原。利用在解包程序里存储的文件结构信息,就能够得到包中每个文件的大小等信息,再利用文件定位的方法把内部文件的长度读取出来,最后对文件内容进行完整的还原。在解包过程中,对监控程序进行还原时,解包程序定位于密文的尾部,首先对文件信息之中监控程序的长度值进行读取,接着往后读取长度值字节,就完成了对监控程序的完整还原。其中自解包和自解密的关键在于位于包的头部的解包程序。它的作用首先是运行包文件时它会自动运行继而完成解包功能;第二,它将密文解密为明文但实际上并不把密文解包出来以保证文件的安全性,此即为自解密功能的基本思路。解包的流程如图4所示。
图4 解包图Fig.4 Unbinding files
当包中的文件全部都被释放出来后,解包程序将立即运行监控程序,然后加载进程隐藏驱动和文件隐藏驱动以及API拦截驱动。一切由客户端所运行的非exe文件都存放于两个目录之内,这两个目录都被文件隐藏驱动所隐藏起来,用户无法访问。
2.1 进程监控方法
DRM平台中的监控功能模块管控的是应用程序的运行状态,防止用户进行拷贝等相关操作,它分为3部分:①监控程序;②鼠标钩子DLL;③API拦截驱动,其工作步骤如下。
1)首先监控程序被启动,同时API拦截驱动也被启动。监控程序第一步会打开文件的绝对路径,再把它发送到API拦截驱动,与此同时利用ShellExecute函数对文件进行打开[6],这个函数只要为它指定文件的路径,就能够根据打开的文件格式来判断需要用到的第三方应用程序。
2)文件的绝对路径被API拦截驱动得到之后,系统中所有打开状态文件的进程就会被监控,并一一比对获取的绝对路径是否与其中某个打开文件的绝对路径相同,一旦相同,则将该进程的ID返回给监控程序。
3)接着监控程序得到这个应用程序的ID之后,利用系统API函数SetWindowsHookEx来对目标进程挂接鼠标和键盘钩子,禁止非法的剪切、复制或保存等。
4)当应用程序的进程ID被API拦截驱动得到后,通过将系统API函数ZwWriteFile替换掉从而对该进程的一切写操作进行禁止。
5)待一切任务完成,第三方进程退出后,卸载DLL以及驱动。
监控功能在将打开文件的绝对路径传递给驱动层并得到应用程序进程ID的过程实际上是一个交互的过程,采用了DeviceIoControl函数[7]。
对于鼠标键盘的监控主要是为了防止用户使用鼠标点选、拖拽,以及键盘的快捷键、组合键等形式对文件内容进行剪切、复制、粘贴、截屏、打印等。鼠标和键盘监控的范围是显示文件内容的屏幕内区域,也就是应用程序的主窗口。在Windows操作系统之中,操作鼠标或键盘时就会传递消息给应用程序窗口,Windows操作系统通过句柄来判断一个具体的窗口,在传递该消息时选定一个窗口句柄来代表接受消息的具体窗口[8]。鼠标和键盘操作的消息能够被成功处理就是因为窗口都有各自的消息处理函数以及消息队列,如图5所示。
图5 窗口消息Fig.5 Window message
这里的鼠标和键盘钩子使用的是SetWindowsHookEx函数进行安装。该函数的原型是SetWindow⁃sHookEx(WH_KEYBOARD,KeyBoardProc,HInstance,0);该函数需要指明钩子作用的主窗口线程和回调函数。一旦指定的线程消息队列里有鼠标或者键盘事件出现时,回调函数被调用来处理这些消息,它会通过消息内容判断后续的操作是进行消息传递还是阻塞。回调函数声明见表1。
表1 回调函数的声明Tab.1 Declaration of call back founctions
其中nCode表示传递给钩子的事件;wparam包括消息内容,是传递给钩子子程序的值,回调函数(钩子函数)根据该值来过滤鼠标和键盘。代表复制的Ctrl+C组合键操作时,回调函数返回TRUE;否则继续消息的传递。线程对系统剪贴板的使用会被监视,系统剪贴板将被屏蔽。
以上的所有保护方法都是基于系统功能之上的,并未对应用程序的自带功能进行一定的限制。对于第三方应用程序不做过多限制的好处是不改变用户自身的操作习惯。然而,对应用程序完全不做限制也是有问题的,例如一部分软件内部会自带一些“另存为”之类的操作及功能,可能会涉及到文件明文内容的泄露。所以监视第三方应用程序的API函数调用是非常必要的,其原理则是拦截以及屏蔽那些有可能造成明文泄露的API函数。
拦截的原理则是修改系统服务调度表中相应的内核函数的地址,当某个内核函数被调用时都会先调用钩子函数[9]。而在本拦截驱动里替换的是ZwFileWrite这个内核函数。由于前一步中第三方应用程序的进程ID已经被得到,所以这个ID就能够被利用从而过滤这个企图调用ZwFileWrite的进程,只要这个ID的进程调用ZwFileWrite就会返回无法找到句柄的错误信息,使得该进程无法进行写操作。
2.2 进程隐藏和文件隐藏
进程隐藏是为了保护监控进程而对其进行隐藏。因为如果不隐藏运行中的监控程序,那么用户就能通过手动的方式调出任务管理器,在任务管理器中找到监控进程并关闭它,这样一来就无法保证所有保护措施已经执行以及无法得知打开受保护文件的第三方软件何时退出。因此本方案需要加载driv⁃er_hide_proc.sys驱动来对进程进行隐藏。
首先,原本系统在获取当前系统进程列表时,会调用内核函数ZwQuerySystemInformation[10];但笔者通过修改系统服务调度表里的ZwQuerySystemInformation的地址就可以使系统不调用该函数,而是调用driv⁃er_hide_proc.sys中的NewZwQuerySystemInformation函数。其次,ZwQuerySystemInformation的原始地址存在于driver_hide_proc.sys之中,NewZwQuerySystemInformation函数就利用该地址来调用原始函数ZwQuerySys⁃temInformation。紧接着,由于NewZwQuerySystemInformation函数调用了ZwQuerySystemInformation函数,而后者的返回值将会传递给前者,而非传回系统。最后,在NewZwQuerySystemInformation函数中修改返回的进程链表,删除打包进程和监控进程的记录,再将修改后的链表返回给系统,如图6所示。
图6 进程信息隐藏方式Fig.6 Method of process information hiding
文件隐藏用于隐藏临时文件所在的文件夹,即图4中的DRMDIR以及DRIVERDIR两个文件夹。其原理和上面的进程隐藏一致,通过替换ZwQueryDirectoryFile内核函数,修改FileInformationBuffer链表来达到隐藏文件的目的。
具体的实现中,服务器部分被简化为用一台主机完成Web服务器以及授权服务器的工作。测试环境为Windows XP操作系统。图7和图8以.doc文档为例展示了对用户非法操作媒体文件的管控。
图7 运行加密后的数字媒体文件Fig.7 Runing of encrypted digital media files
图8 用户非法操作被禁止Fig.8 Prohibiting of illegal operation
相比已有的一些类似带有数字版权保护功能的系统,本系统不需要针对文件格式去特别定制文件的打开程序,并且也不会改变用户的基本使用习惯。表2是对一些常用媒体文件类型进行的功能测试结果,“×”表示该操作已被封锁,“无此功能”表示该第三方软件本身不支持该类编辑功能。
表2 测试结果Tab.2 Test results
表2中只列出了部分常用软件的测试结果,对于如记事本、画图、Excel、Word、PPT、QQ音乐以及QQ影音等常用软件,本系统能够防止用户对其打开的内容进行另存为、复制-粘贴、打印拷屏以及禁止用户将文件内容在非授权电脑上打开。
为保护数字媒体的版权,防止其内容被非法扩散出去,本系统提出了一种通用型DRM的扩散控制技术。将需要保护的内容进行加密和封装,设计了一种进程监控程序对用户的非法操作进行管控,并且利用进程隐藏和文件隐藏的方法保护监控进程不被非法关闭,较为有效地防止了数字媒体内容的非法扩散。系统在未来还需进一步改进和完善,提高包文件的解密和加载速度、避免杀毒软件误报等,让用户体验更加透明。
(References)
[1]Microsoft Inc.Microsoft windows media-digital rights management(DRM)[EB/OL].http://msdn.microsoft.com/zh-cn/library/ cc838192(v=vs.95).aspx.
[2]刘思伟,慕德俊.数字版权管理的互操作技术研究[J].计算机科学,2008(5):236-239.
[3]钟勇,张宏,刘凤玉,等.一种基于逻辑框架的数字版权管理机制和实现[J].计算机研究与发展,2010,47(2):223-230.
[4]孟芳慧,曹宝香,杨义先,等.多媒体数字产品版权保护模型研究与设计[J].计算机科学,2013,40(1):98-102.
[5]宋文军.计算机机房进程监控的设计与实现[J].软件导刊,2012(11):74-75.
[6]徐江峰,邵向阳.基于HOOK API技术的进程监控系统的设计与实现[J].计算机工程与设计,2011,32(4):1330-1334.
[7]张志勇,牛丹梅.数字版权管理中数字权利使用控制研究进展[J].计算机科学,2011,38(4):48-54.
[8]赵广强,凌捷.基于HOOK技术的进程管理系统研究[J].计算机工程与设计,2014,35(7):2325-2329.
[9]黎孟雄,郭鹏飞.软件实验室智能管理系统的研究与实现[J].实验技术与管理,2013(6):62-64.
[10]赵红专,袁平,谢乐川.三网融合环境下数字版权管理的身份控管方案[J].计算机工程,2012,38(11):136-138.
(责任编辑:曾 婷)
Research on Diffusion Control for General DRM System
CHEN Yixin1,XIAO Feng1,LI Qingnan2
(1.School of Mathematics and Computer Science,Jianghan University,Wuhan 430056,Hubei,China;2.School of Computer,Wuhan University,Wuhan 430072,Hubei,China)
In view of the demand of copyright protection of digital media,a technology of diffusion con⁃trol for general DRM system is proposed.It does not depend on the format and content of media files.Me⁃dia files are encrypted and packed,which can be only opened by authorized users.Meanwhile,the pro⁃cess monitoring program stops illegal operations of diffusing media file content,and process hiding meth⁃od prevents the monitoring program from being shut down by users.Diffusion control for general DRM sys⁃tem concerns combining of the protected media files and the protecting files,and it prevents digital media content from being illegally diffused.
general DRM system;digital media;file binding;process hiding
TP309
:A
:1673-0143(2015)06-0544-07
10.16389/j.cnki.cn42-1737/n.2015.06.012
2015-09-04
陈亦欣(1985—),男,助教,博士,研究方向:数字版权管理。