◆張李 林清 劉志敏 蔣彤彤
安全模型、算法與編程
基于HOOK的U盤文檔自動(dòng)添加水印方法的研究與實(shí)現(xiàn)
◆張李 林清 劉志敏 蔣彤彤
(南京理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院 江蘇 210000)
針對(duì)Windows應(yīng)用程序都是通過調(diào)用Windows API函數(shù)對(duì)文件進(jìn)行讀寫這一特性,本文利用Windows HOOK技術(shù),設(shè)計(jì)并實(shí)現(xiàn)了一種U盤文檔自動(dòng)添加水印的方法。當(dāng)加密U盤中寫入文檔時(shí),會(huì)先對(duì)文檔添加水印,再存入加密U盤。本方法不僅能有效提高文件的安全性,而且添加水印的過程無須用戶參與,提高了應(yīng)用的透明性。
Windows HOOK;水??;加密U盤;版權(quán)保護(hù)
隨著互聯(lián)網(wǎng)的不斷普及,無紙化辦公的不斷推廣,數(shù)字文檔正逐漸取代傳統(tǒng)的紙質(zhì)文檔。但數(shù)字文檔具有易于共享,復(fù)制成本低等特點(diǎn),因此數(shù)字文檔的版權(quán)保護(hù)問題比傳統(tǒng)的紙質(zhì)文檔更為突出[1]。數(shù)字水印技術(shù)是目前保護(hù)數(shù)字文檔版權(quán)的主要手段之一。它是將作者的版權(quán)信息以數(shù)字水印的形式嵌入到圖像、文檔、音頻、視頻等數(shù)字產(chǎn)品中[2]。本文所提出的方法主要功能是針對(duì)word文檔、pdf文檔、excel文檔、ppt文檔和jpg圖片等無紙化辦公中的常見文件,為其添加數(shù)字水印,以便在共享這些文件的過程中保護(hù)作者的版權(quán)。通過本文所實(shí)現(xiàn)的方法,一方面提高了存儲(chǔ)在加密U盤內(nèi)文件的安全性,即使U盤丟失也無法獲取U盤內(nèi)文件的明文內(nèi)容,另一方面通過HOOK技術(shù)實(shí)現(xiàn)了自動(dòng)添加水印的功能,保護(hù)了用戶的版權(quán)。水印的添加和文檔內(nèi)容的加解密對(duì)用戶完全透明,使用起來方便快捷。
本文主要使用了加密U盤技術(shù),HOOK技術(shù)和多種數(shù)字水印算法。通過加密U盤技術(shù)實(shí)現(xiàn)對(duì)U盤內(nèi)容的加密保護(hù),通過HOOK技術(shù)和數(shù)字水印算法實(shí)現(xiàn)對(duì)U盤內(nèi)容自動(dòng)添加版權(quán)水印。
加密U盤是一種能夠?qū)盤存儲(chǔ)內(nèi)容進(jìn)行加密的特殊U盤。對(duì)U盤存儲(chǔ)內(nèi)容進(jìn)行加密的方法主要有三種:(1)假加密,這種方法對(duì)實(shí)際存儲(chǔ)的內(nèi)容并不進(jìn)行加密,只是隱藏了U盤內(nèi)的文件,因此稱為假加密。(2)軟加密,通過U盤內(nèi)置或附帶的軟件對(duì)U盤內(nèi)的文件進(jìn)行加密。(3)硬件加密,通過U盤內(nèi)置的硬件對(duì)U盤內(nèi)的文件進(jìn)行加密,保密性最強(qiáng)。本文使用軟加密方法對(duì)U盤內(nèi)容進(jìn)行加密。所使用的加密U盤分為光盤區(qū)和U盤區(qū),U盤區(qū)和普通U盤一樣認(rèn)證身份后可以進(jìn)行讀寫,光盤區(qū)中內(nèi)置了多種加密算法和身份認(rèn)證的接口。U盤附帶的軟件通過DLL動(dòng)態(tài)庫調(diào)用光盤區(qū)提供的加密算法和身份認(rèn)證函數(shù)的接口。因此,只有同時(shí)使用指定的U盤和附帶的軟件才能對(duì)U盤區(qū)內(nèi)容進(jìn)行讀寫, 這種加密U盤具有極高的安全性。
HOOK技術(shù)一般稱為鉤子技術(shù)或掛鉤技術(shù),是運(yùn)行在Windows內(nèi)核中的一種特殊機(jī)制,其功能和DOS系統(tǒng)的“中斷”機(jī)制類似[3]。通過HOOK技術(shù),應(yīng)用程序可以對(duì)Windows消息或指定事件進(jìn)行實(shí)時(shí)監(jiān)聽,當(dāng)消息發(fā)出或事件發(fā)生時(shí),應(yīng)用程序可以立即獲得控制權(quán)。此時(shí)應(yīng)用程序可以根據(jù)情況選擇不作處理或者運(yùn)行指定函數(shù)來實(shí)現(xiàn)一些額外功能。
HOOK API是指專門對(duì)應(yīng)用程序調(diào)用API函數(shù)進(jìn)行監(jiān)聽的HOOK技術(shù)。一旦Windows系統(tǒng)調(diào)用特定的 API函數(shù),將優(yōu)先執(zhí)行HOOK函數(shù),執(zhí)行完HOOK函數(shù)之后再執(zhí)行API函數(shù)。實(shí)現(xiàn)從API函數(shù)跳轉(zhuǎn)執(zhí)行HOOK函數(shù)的方法主要有兩種:(1)通過修改PE文件的IAT導(dǎo)入表,對(duì)API地址進(jìn)行重定向來實(shí)現(xiàn)函數(shù)的跳轉(zhuǎn)。(2)通過修改API函數(shù)的前幾個(gè)字節(jié),并用一個(gè)JMP指令代替,來實(shí)現(xiàn)函數(shù)的跳轉(zhuǎn)[4-5]。
針對(duì)不同類型的文件采用了三種不同的水印算法。針對(duì)jpg圖像文件采用分塊DCT水印算法,針對(duì)word、excel、pdf文件采用基于隱屬性的水印算法,針對(duì)ppt文件增量更新機(jī)制采用基于增量更新的水印算法。
2.3.1 jpg圖像文件
分塊DCT水印算法是一種具有較強(qiáng)魯棒性的數(shù)字水印算法。分塊DCT算法分為三個(gè)步驟:(1)將原始圖像和水印圖像劃分為大小相等的圖像塊(兩個(gè)圖像大小可以不同)并進(jìn)行DCT變換;(2)將水印DCT系數(shù)按不同強(qiáng)度嵌入原圖DCT系數(shù)中;(3)通過DCT反變換,將水印圖像嵌入到原圖像中[6]。
該算法生成的可見水印具有如下特性:(1)水印易辨識(shí),不論是在單色還是彩色圖像中,水印都清晰可見;(2)水印魯棒性強(qiáng),水印分布在圖像重要部分,即使原圖像被剪切或刪除部分,水印信息也能得到保留,具有較強(qiáng)的魯棒性。
2.3.2 word,excel,pdf文本文件
對(duì)word、excel、pdf文本文件,使用嵌入式水印方法為其增加隱水印。常用的嵌入式水印技術(shù)有基于文本格式的文本水印技術(shù)[7]和基于特征編碼的文本水印技術(shù)[8]。但基于文本格式的水印受到文本格式編輯的影響較大。尤其是對(duì)文本內(nèi)容進(jìn)行無格式拷貝時(shí),會(huì)導(dǎo)致水印內(nèi)容的完全丟失。所以本文采用了基于隱性字符屬性的特征編碼算法,來為文本文件添加水印。
隱性屬性指的是該屬性的變化不會(huì)對(duì)文檔頁面產(chǎn)生任何影響[9]。例如是否啟用字距調(diào)整的 kerning 屬性,默認(rèn)值為 false。選用這樣的兩個(gè)隱屬性作為水印信息的“1”和“0”,通過修改屬性的默認(rèn)值來達(dá)到嵌入水印信息的目的。這種算法的優(yōu)勢是:(1)水印隱蔽性強(qiáng),實(shí)現(xiàn)真正的無頁面修改;(2)水印魯棒性強(qiáng),一般的格式變化對(duì)水印信息幾乎沒有影響。但實(shí)現(xiàn)這種算法需要找到恰當(dāng)?shù)膶傩灾?,且容量較小,對(duì)文本的長度有一定要求。
2.3.3 ppt文件
與word等文本文件不同,ppt文件采用增量更新機(jī)制來組織文件,也就是說對(duì)ppt文檔內(nèi)容進(jìn)行的修改或刪除并不會(huì)直接刪除原來的內(nèi)容,而是在原文件尾部追加數(shù)據(jù)來標(biāo)明所做出的修改。當(dāng)對(duì)ppt文檔進(jìn)行刪除幻燈片或刪除幻燈片內(nèi)容等操作時(shí)會(huì)產(chǎn)生許多廢棄數(shù)據(jù)[10]。這就為添加數(shù)字水印信息留下了巨大的空間,對(duì)這些廢棄數(shù)據(jù)嵌入水印信息完全不會(huì)影響用戶的使用。針對(duì)ppt文檔的這一特點(diǎn),根據(jù)文檔增量更新信息來增加數(shù)字水印具有良好的魯棒性。
本文所提方法最終通過自主設(shè)計(jì)的軟件進(jìn)行實(shí)現(xiàn)和驗(yàn)證。該軟件存放在U盤上,主要分為三個(gè)層次:用戶層,應(yīng)用層和內(nèi)核層。其中內(nèi)核層主要負(fù)責(zé)操作HOOK驅(qū)動(dòng)以及對(duì)寫入指定U盤的文檔添加水印。應(yīng)用層主要負(fù)責(zé)解密文檔內(nèi)容、識(shí)別U盤設(shè)備以及把HOOK驅(qū)動(dòng)模塊載入到目標(biāo)進(jìn)程。用戶層主要負(fù)責(zé)用戶的身份驗(yàn)證和水印信息的修改。在用戶層通過身份認(rèn)證后,應(yīng)用層會(huì)將HOOK驅(qū)動(dòng)模塊載入到目標(biāo)API上,對(duì)WriteFile API進(jìn)行實(shí)時(shí)監(jiān)聽,此時(shí)用戶即可使用文檔水印功能。軟件的架構(gòu)如圖1所示。
本文采用C#語言實(shí)現(xiàn)上述軟件。軟件主要包括六個(gè)功能模塊:水印信息管理模塊、U盤設(shè)備識(shí)別模塊、身份認(rèn)證模塊、文檔加解密模塊、HOOK載入與驅(qū)動(dòng)模塊以及水印添加模塊。以下對(duì)這六個(gè)功能模塊進(jìn)行逐一介紹。
本模塊主要負(fù)責(zé)水印基本信息(水印內(nèi)容、水印字體大小、水印字體顏色等)的設(shè)置和不可見數(shù)字水印信息的提取。每當(dāng)調(diào)用文檔水印算法時(shí),將本模塊存儲(chǔ)的水印信息作為參數(shù)傳給文檔水印算法。該部分的界面如圖2,圖3所示。
圖1 軟件架構(gòu)圖
圖2 jpg文檔水印信息管理界面
圖3 word文檔水印信息管理界面
本模塊主要負(fù)責(zé)U盤設(shè)備的識(shí)別。通過DLL動(dòng)態(tài)庫(Dongle_API)的方式,將U盤中存儲(chǔ)的U盤識(shí)別函數(shù)和加密函數(shù)載入到附帶的軟件中。在運(yùn)行軟件時(shí),軟件會(huì)首先調(diào)用U盤中的設(shè)備識(shí)別函數(shù)(每個(gè)U盤存有一個(gè)唯一的序列號(hào),通過識(shí)別函數(shù)返回給系統(tǒng)),若軟件收不到正確的返回值則無法運(yùn)行。
在Dongle_API庫中提供了多種操作U盤的函數(shù),如對(duì)U盤的讀寫和加密函數(shù)。Dongle_Enum為U盤設(shè)備識(shí)別函數(shù),當(dāng)軟件系統(tǒng)調(diào)用該函數(shù)后會(huì)返回存儲(chǔ)在U盤內(nèi)的唯一序列號(hào),通過該序列號(hào)來對(duì)U盤進(jìn)行識(shí)別。在收到正確的返回值后則進(jìn)行用戶身份的認(rèn)證。
本模塊主要負(fù)責(zé)對(duì)用戶進(jìn)行身份認(rèn)證。在用戶初次使用U盤附帶的軟件時(shí)會(huì)進(jìn)行用戶身份的注冊。即設(shè)置用戶名和密碼。系統(tǒng)還會(huì)根據(jù)用戶設(shè)置的用戶名和密碼通過散列的方式生成一串密鑰,然后將用戶設(shè)置的用戶名、密碼和密鑰一起寫入到U盤的光盤區(qū)內(nèi)。進(jìn)行過用戶身份注冊之后,用戶的身份信息就存儲(chǔ)在光盤區(qū)中,用戶不可對(duì)其進(jìn)行更改。之后每次進(jìn)行身份認(rèn)證時(shí),都會(huì)通過調(diào)用U盤內(nèi)置的身份認(rèn)證函數(shù)對(duì)用戶進(jìn)行身份認(rèn)證。身份認(rèn)證界面如圖4所示。
圖4 身份認(rèn)證界面
本模塊具體步驟如下:
(1)調(diào)用U盤識(shí)別函數(shù);
(2)如果未接收到正確的返回值則提示“沒找到指定設(shè)備”,否則執(zhí)行步驟3;
(3)用戶輸入用戶名和密碼;
(4)進(jìn)行身份認(rèn)證,如果身份認(rèn)證通過則執(zhí)行步驟5,否則執(zhí)行步驟3;
(5)用戶輸入密鑰;
(6)如果密鑰正確則對(duì)U盤內(nèi)容解密,否則提示“密鑰不正確”并執(zhí)行步驟5。
本模塊流程圖如圖5所示。
圖5 身份認(rèn)證流程圖
文檔加解密模塊主要負(fù)責(zé)對(duì)文檔內(nèi)容的加解密。當(dāng)用戶輸入正確的密鑰之后,根據(jù)用戶選擇的加密算法調(diào)用相應(yīng)的解密算法對(duì)文檔進(jìn)行解密。此時(shí),用戶才能看到存儲(chǔ)在U盤內(nèi)文檔的明文內(nèi)容。解密界面如圖6所示
圖6 文檔解密界面
HOOK載入模塊主要是向目標(biāo)進(jìn)程注入HOOK函數(shù)。因?yàn)樵摷夹g(shù)主要針對(duì)的是WriteFile這一Windows API函數(shù),所以采用修改WriteFile函數(shù)的前幾個(gè)字節(jié),來實(shí)現(xiàn)函數(shù)的跳轉(zhuǎn)。HOOK驅(qū)動(dòng)模塊負(fù)責(zé)實(shí)際的API攔截處理工作。
本模塊主要負(fù)責(zé)對(duì)文檔添加水印。首先在Windows系統(tǒng)內(nèi)核層攔截文件的操作句柄,獲得文件地址以及文件名稱,之后根據(jù)文件地址判斷該文件是否為寫入指定U盤的文件,如果是則根據(jù)文檔類型調(diào)用相應(yīng)的水印函數(shù)為文檔添加版權(quán)信息后調(diào)用U盤中的加密函數(shù)對(duì)文檔內(nèi)容加密,最后執(zhí)行WriteFile函數(shù)將文檔寫入U(xiǎn)盤內(nèi)。本模塊流程圖如圖7所示。
具體步驟如下:
(1)監(jiān)聽Windows WriteFile API;
(2)用戶將文檔存入指定U盤;
(3)調(diào)用Windows WriteFile API執(zhí)行寫文檔;
(4)通過API HOOK技術(shù)跳轉(zhuǎn)到水印函數(shù);
(5)判斷該文檔是否存在版權(quán)水印如果不存在則執(zhí)行步驟6;
(6)為文檔添加水印并加密后,將文檔存入U(xiǎn)盤。
圖7 文檔水印流程
本文所實(shí)現(xiàn)的方法主要使用了加密U盤技術(shù),Windows HOOK技術(shù)以及數(shù)字水印算法。通過C#編程實(shí)現(xiàn),具有界面簡潔友好,用戶操作簡單,U盤內(nèi)容安全性高的特點(diǎn)。此外,由于C#中的EasyHOOK庫中封裝了許多操作Windows API 和HOOK的函數(shù),在實(shí)現(xiàn)Windows HOOK技術(shù)時(shí)較為簡單。用戶在接入指定的U盤并進(jìn)行身份驗(yàn)證之后,只需簡單地設(shè)置基本水印信息,即可實(shí)現(xiàn)對(duì)存入U(xiǎn)盤的文檔自動(dòng)添加水印的功能。但該技術(shù)還存在許多問題,如只能在Windows平臺(tái)上使用,不支持跨平臺(tái);只支持常見的word、ppt、excel、pdf、jpg這五種文件,對(duì)其他常見的辦公文檔如cad文件,bng文件還不能使用;當(dāng)U盤內(nèi)容較多時(shí),解密速度較慢。在后續(xù)研究中,將重點(diǎn)圍繞上述問題進(jìn)行深入研究。
[1]彭敏之. 數(shù)字文檔版權(quán)保護(hù)的研究[D].中南林業(yè)科技大學(xué),2014.
[2]呂秀麗,楊雨飛,張勇.基于VC++和MATLAB混合編程的可見水印系統(tǒng)設(shè)計(jì)[J].科學(xué)技術(shù)與工程,2009,9(16):4828-4832.
[3]Shen Jianfang,Cheng Lianglun,F(xiàn)u 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 時(shí)代碼注入方法和函數(shù)重定向技術(shù)研究[J].計(jì)算機(jī)應(yīng)用與軟件,2009,26(5):107-110.
[5]劉克勝,王忠壽.API Hook關(guān)鍵技術(shù)解析[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,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]連攀攀,陳青.文本數(shù)字水印算法的研究綜述[J].信息技術(shù),2014(01):180-182+186.
[10]劉永平. 基于ppt文檔的信息隱藏技術(shù)研究[D].湖南大學(xué),2009.