基于HOOK的U盘文档自动添加水印方法的研究与实现

2020-11-14 08:51张李林清刘志敏蒋彤彤
网络安全技术与应用 2020年11期
关键词:数字水印U盘文档

◆张李 林清 刘志敏 蒋彤彤

安全模型、算法与编程

基于HOOK的U盘文档自动添加水印方法的研究与实现

◆张李 林清 刘志敏 蒋彤彤

(南京理工大学计算机科学与工程学院 江苏 210000)

针对Windows应用程序都是通过调用Windows API函数对文件进行读写这一特性,本文利用Windows HOOK技术,设计并实现了一种U盘文档自动添加水印的方法。当加密U盘中写入文档时,会先对文档添加水印,再存入加密U盘。本方法不仅能有效提高文件的安全性,而且添加水印的过程无须用户参与,提高了应用的透明性。

Windows HOOK;水印;加密U盘;版权保护

1 引言

随着互联网的不断普及,无纸化办公的不断推广,数字文档正逐渐取代传统的纸质文档。但数字文档具有易于共享,复制成本低等特点,因此数字文档的版权保护问题比传统的纸质文档更为突出[1]。数字水印技术是目前保护数字文档版权的主要手段之一。它是将作者的版权信息以数字水印的形式嵌入到图像、文档、音频、视频等数字产品中[2]。本文所提出的方法主要功能是针对word文档、pdf文档、excel文档、ppt文档和jpg图片等无纸化办公中的常见文件,为其添加数字水印,以便在共享这些文件的过程中保护作者的版权。通过本文所实现的方法,一方面提高了存储在加密U盘内文件的安全性,即使U盘丢失也无法获取U盘内文件的明文内容,另一方面通过HOOK技术实现了自动添加水印的功能,保护了用户的版权。水印的添加和文档内容的加解密对用户完全透明,使用起来方便快捷。

2 相关技术介绍

本文主要使用了加密U盘技术,HOOK技术和多种数字水印算法。通过加密U盘技术实现对U盘内容的加密保护,通过HOOK技术和数字水印算法实现对U盘内容自动添加版权水印。

2.1 加密U盘

加密U盘是一种能够对U盘存储内容进行加密的特殊U盘。对U盘存储内容进行加密的方法主要有三种:(1)假加密,这种方法对实际存储的内容并不进行加密,只是隐藏了U盘内的文件,因此称为假加密。(2)软加密,通过U盘内置或附带的软件对U盘内的文件进行加密。(3)硬件加密,通过U盘内置的硬件对U盘内的文件进行加密,保密性最强。本文使用软加密方法对U盘内容进行加密。所使用的加密U盘分为光盘区和U盘区,U盘区和普通U盘一样认证身份后可以进行读写,光盘区中内置了多种加密算法和身份认证的接口。U盘附带的软件通过DLL动态库调用光盘区提供的加密算法和身份认证函数的接口。因此,只有同时使用指定的U盘和附带的软件才能对U盘区内容进行读写, 这种加密U盘具有极高的安全性。

2.2 HOOK API技术

HOOK技术一般称为钩子技术或挂钩技术,是运行在Windows内核中的一种特殊机制,其功能和DOS系统的“中断”机制类似[3]。通过HOOK技术,应用程序可以对Windows消息或指定事件进行实时监听,当消息发出或事件发生时,应用程序可以立即获得控制权。此时应用程序可以根据情况选择不作处理或者运行指定函数来实现一些额外功能。

HOOK API是指专门对应用程序调用API函数进行监听的HOOK技术。一旦Windows系统调用特定的 API函数,将优先执行HOOK函数,执行完HOOK函数之后再执行API函数。实现从API函数跳转执行HOOK函数的方法主要有两种:(1)通过修改PE文件的IAT导入表,对API地址进行重定向来实现函数的跳转。(2)通过修改API函数的前几个字节,并用一个JMP指令代替,来实现函数的跳转[4-5]。

2.3 水印算法

针对不同类型的文件采用了三种不同的水印算法。针对jpg图像文件采用分块DCT水印算法,针对word、excel、pdf文件采用基于隐属性的水印算法,针对ppt文件增量更新机制采用基于增量更新的水印算法。

2.3.1 jpg图像文件

分块DCT水印算法是一种具有较强鲁棒性的数字水印算法。分块DCT算法分为三个步骤:(1)将原始图像和水印图像划分为大小相等的图像块(两个图像大小可以不同)并进行DCT变换;(2)将水印DCT系数按不同强度嵌入原图DCT系数中;(3)通过DCT反变换,将水印图像嵌入到原图像中[6]。

该算法生成的可见水印具有如下特性:(1)水印易辨识,不论是在单色还是彩色图像中,水印都清晰可见;(2)水印鲁棒性强,水印分布在图像重要部分,即使原图像被剪切或删除部分,水印信息也能得到保留,具有较强的鲁棒性。

2.3.2 word,excel,pdf文本文件

对word、excel、pdf文本文件,使用嵌入式水印方法为其增加隐水印。常用的嵌入式水印技术有基于文本格式的文本水印技术[7]和基于特征编码的文本水印技术[8]。但基于文本格式的水印受到文本格式编辑的影响较大。尤其是对文本内容进行无格式拷贝时,会导致水印内容的完全丢失。所以本文采用了基于隐性字符属性的特征编码算法,来为文本文件添加水印。

隐性属性指的是该属性的变化不会对文档页面产生任何影响[9]。例如是否启用字距调整的 kerning 属性,默认值为 false。选用这样的两个隐属性作为水印信息的“1”和“0”,通过修改属性的默认值来达到嵌入水印信息的目的。这种算法的优势是:(1)水印隐蔽性强,实现真正的无页面修改;(2)水印鲁棒性强,一般的格式变化对水印信息几乎没有影响。但实现这种算法需要找到恰当的属性值,且容量较小,对文本的长度有一定要求。

2.3.3 ppt文件

与word等文本文件不同,ppt文件采用增量更新机制来组织文件,也就是说对ppt文档内容进行的修改或删除并不会直接删除原来的内容,而是在原文件尾部追加数据来标明所做出的修改。当对ppt文档进行删除幻灯片或删除幻灯片内容等操作时会产生许多废弃数据[10]。这就为添加数字水印信息留下了巨大的空间,对这些废弃数据嵌入水印信息完全不会影响用户的使用。针对ppt文档的这一特点,根据文档增量更新信息来增加数字水印具有良好的鲁棒性。

3 自动添加水印方法的设计与实现

本文所提方法最终通过自主设计的软件进行实现和验证。该软件存放在U盘上,主要分为三个层次:用户层,应用层和内核层。其中内核层主要负责操作HOOK驱动以及对写入指定U盘的文档添加水印。应用层主要负责解密文档内容、识别U盘设备以及把HOOK驱动模块载入到目标进程。用户层主要负责用户的身份验证和水印信息的修改。在用户层通过身份认证后,应用层会将HOOK驱动模块载入到目标API上,对WriteFile API进行实时监听,此时用户即可使用文档水印功能。软件的架构如图1所示。

本文采用C#语言实现上述软件。软件主要包括六个功能模块:水印信息管理模块、U盘设备识别模块、身份认证模块、文档加解密模块、HOOK载入与驱动模块以及水印添加模块。以下对这六个功能模块进行逐一介绍。

3.1 水印信息管理模块

本模块主要负责水印基本信息(水印内容、水印字体大小、水印字体颜色等)的设置和不可见数字水印信息的提取。每当调用文档水印算法时,将本模块存储的水印信息作为参数传给文档水印算法。该部分的界面如图2,图3所示。

图1 软件架构图

图2 jpg文档水印信息管理界面

图3 word文档水印信息管理界面

3.2 U盘设备识别模块

本模块主要负责U盘设备的识别。通过DLL动态库(Dongle_API)的方式,将U盘中存储的U盘识别函数和加密函数载入到附带的软件中。在运行软件时,软件会首先调用U盘中的设备识别函数(每个U盘存有一个唯一的序列号,通过识别函数返回给系统),若软件收不到正确的返回值则无法运行。

在Dongle_API库中提供了多种操作U盘的函数,如对U盘的读写和加密函数。Dongle_Enum为U盘设备识别函数,当软件系统调用该函数后会返回存储在U盘内的唯一序列号,通过该序列号来对U盘进行识别。在收到正确的返回值后则进行用户身份的认证。

3.3 身份认证模块

本模块主要负责对用户进行身份认证。在用户初次使用U盘附带的软件时会进行用户身份的注册。即设置用户名和密码。系统还会根据用户设置的用户名和密码通过散列的方式生成一串密钥,然后将用户设置的用户名、密码和密钥一起写入到U盘的光盘区内。进行过用户身份注册之后,用户的身份信息就存储在光盘区中,用户不可对其进行更改。之后每次进行身份认证时,都会通过调用U盘内置的身份认证函数对用户进行身份认证。身份认证界面如图4所示。

图4 身份认证界面

本模块具体步骤如下:

(1)调用U盘识别函数;

(2)如果未接收到正确的返回值则提示“没找到指定设备”,否则执行步骤3;

(3)用户输入用户名和密码;

(4)进行身份认证,如果身份认证通过则执行步骤5,否则执行步骤3;

(5)用户输入密钥;

(6)如果密钥正确则对U盘内容解密,否则提示“密钥不正确”并执行步骤5。

本模块流程图如图5所示。

图5 身份认证流程图

3.4 文档加解密模块

文档加解密模块主要负责对文档内容的加解密。当用户输入正确的密钥之后,根据用户选择的加密算法调用相应的解密算法对文档进行解密。此时,用户才能看到存储在U盘内文档的明文内容。解密界面如图6所示

图6 文档解密界面

3.5 HOOK载入模块与HOOK驱动模块

HOOK载入模块主要是向目标进程注入HOOK函数。因为该技术主要针对的是WriteFile这一Windows API函数,所以采用修改WriteFile函数的前几个字节,来实现函数的跳转。HOOK驱动模块负责实际的API拦截处理工作。

3.6 文档水印模块

本模块主要负责对文档添加水印。首先在Windows系统内核层拦截文件的操作句柄,获得文件地址以及文件名称,之后根据文件地址判断该文件是否为写入指定U盘的文件,如果是则根据文档类型调用相应的水印函数为文档添加版权信息后调用U盘中的加密函数对文档内容加密,最后执行WriteFile函数将文档写入U盘内。本模块流程图如图7所示。

具体步骤如下:

(1)监听Windows WriteFile API;

(2)用户将文档存入指定U盘;

(3)调用Windows WriteFile API执行写文档;

(4)通过API HOOK技术跳转到水印函数;

(5)判断该文档是否存在版权水印如果不存在则执行步骤6;

(6)为文档添加水印并加密后,将文档存入U盘。

图7 文档水印流程

4 总结

本文所实现的方法主要使用了加密U盘技术,Windows HOOK技术以及数字水印算法。通过C#编程实现,具有界面简洁友好,用户操作简单,U盘内容安全性高的特点。此外,由于C#中的EasyHOOK库中封装了许多操作Windows API 和HOOK的函数,在实现Windows HOOK技术时较为简单。用户在接入指定的U盘并进行身份验证之后,只需简单地设置基本水印信息,即可实现对存入U盘的文档自动添加水印的功能。但该技术还存在许多问题,如只能在Windows平台上使用,不支持跨平台;只支持常见的word、ppt、excel、pdf、jpg这五种文件,对其他常见的办公文档如cad文件,bng文件还不能使用;当U盘内容较多时,解密速度较慢。在后续研究中,将重点围绕上述问题进行深入研究。

[1]彭敏之. 数字文档版权保护的研究[D].中南林业科技大学,2014.

[2]吕秀丽,杨雨飞,张勇.基于VC++和MATLAB混合编程的可见水印系统设计[J].科学技术与工程,2009,9(16):4828-4832.

[3]Shen Jianfang,Cheng Lianglun,Fu Xiufen. Implementation of program behavior anomaly detection and protection using hook technology [C]. Kunming:International Conference on Com-munications and Mobile Computing,2009.

[4]舒敬荣,朱安国,齐善明.HOOK API 时代码注入方法和函数重定向技术研究[J].计算机应用与软件,2009,26(5):107-110.

[5]刘克胜,王忠寿.API Hook关键技术解析[J].网络安全技术与应用,2006(11):48-50.

[6]Yao Zhao,Baozong Yuan. A hybrid image compression scheme combining block-based fractal coding and DCT[J]. Signal Processing: Image Communication,1996,8(2).

[7]Brassil J T,Low S,Maxemchuk N F,et al.Electronic marking and identification techniques to discourage document copying[J].IEEE Journal on Selected Areasin Communications,2006,13(8): 1495-1504.

[8]Mir N.Copyright for web content using invisible text watermarking [J].Computers in Human Behavior,2014,30(30):648-653.

[9]连攀攀,陈青.文本数字水印算法的研究综述[J].信息技术,2014(01):180-182+186.

[10]刘永平. 基于ppt文档的信息隐藏技术研究[D].湖南大学,2009.

猜你喜欢
数字水印U盘文档
浅谈Matlab与Word文档的应用接口
基于遗传优化的自然语言文本数字水印方法
有人一声不吭向你扔了个文档
基于网屏编码的数字水印技术
自动辨认插口方向的U盘
让U盘起死回生
Word文档 高效分合有高招
数字水印技术及其在电力系统中的应用
一种基于三维小波变换的鲁棒视频水印方案
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat