專(zhuān)利名稱(chēng)::基于linux平臺(tái)數(shù)字版權(quán)管理的文件使用控制方法
技術(shù)領(lǐng)域:
:本發(fā)明屬于數(shù)字版權(quán)管理
技術(shù)領(lǐng)域:
,特別是涉及到基于li皿x平臺(tái)數(shù)字版權(quán)管理的文件使用控制方法。
背景技術(shù):
:數(shù)字版權(quán)管理(digitalrightsmanagement,以下簡(jiǎn)稱(chēng)DRM)是指內(nèi)容出版商或版權(quán)持有者為管理文件使用權(quán)和保護(hù)文件數(shù)字版權(quán)而采取的綜合性解決方案。目前數(shù)字版權(quán)管理研究主要集中在windows平臺(tái)下,同時(shí)大都采用基于加密、許可證和配套的新應(yīng)用程序的框架。這幾乎在所有的有關(guān)數(shù)字版權(quán)管理的技術(shù)文獻(xiàn)和研究論文均有論述,孫輝.DRM體系結(jié)構(gòu)研究.南京,2007;馮海永等.通用型DRM系統(tǒng)的研究與實(shí)現(xiàn).計(jì)算機(jī)工程與設(shè)計(jì).2008;李丹等.基于DRM的版權(quán)管理系統(tǒng)的研究與設(shè)計(jì).計(jì)算機(jī)技術(shù)與發(fā)展.2008?,F(xiàn)有的DRM系統(tǒng)無(wú)一例外需要開(kāi)發(fā)新的應(yīng)用程序來(lái)使用被保護(hù)的文件,同時(shí)需要用戶(hù)在聯(lián)網(wǎng)情況下進(jìn)行身份驗(yàn)證以及獲取許可證,市場(chǎng)上流行的WindowmediaDRM和海海公司產(chǎn)品均采取這一策略。為了使應(yīng)用層監(jiān)管對(duì)用戶(hù)透明,有必要提出一種新的框架來(lái)改變這一現(xiàn)狀,開(kāi)發(fā)出一種通用的DRM系統(tǒng)能夠?qū)λ械奈募袷讲捎媒y(tǒng)一的使用控制并且對(duì)用戶(hù)體驗(yàn)沒(méi)有任何影響。為了保護(hù)主機(jī)資源不受惡意軟件破壞采用了多種防范措施,但它們的共同特點(diǎn)是運(yùn)行在用戶(hù)模式下,很容易受到惡意軟件的攻擊,趙文進(jìn)等在《計(jì)算機(jī)工程》上發(fā)表的《基于linux內(nèi)核的通用軟件封裝器的設(shè)計(jì)與實(shí)現(xiàn)》采取LKM機(jī)制對(duì)進(jìn)程級(jí)別的系統(tǒng)調(diào)用實(shí)現(xiàn)了監(jiān)控,通過(guò)截獲應(yīng)用層與內(nèi)核的信息交互實(shí)現(xiàn)了人工干預(yù)。這對(duì)于如何改變現(xiàn)有DRM策略迫使用戶(hù)采用新的文件應(yīng)用程序這種困境是一個(gè)良好的啟示。Li皿x內(nèi)核只提供基本的操作系統(tǒng)服務(wù)功能,例如內(nèi)存分配,文件系統(tǒng)和進(jìn)程調(diào)度等,而GUI部分則采用通用的Xwindow系統(tǒng),Xwindow是基于事件驅(qū)動(dòng),并且采用了C/S架構(gòu),應(yīng)用程序的可視窗口與用戶(hù)實(shí)際上通過(guò)各種事件來(lái)進(jìn)行交互,為了實(shí)現(xiàn)對(duì)用戶(hù)操作更為精確地監(jiān)控有必要在Xwindow系統(tǒng)基礎(chǔ)上截獲部分用戶(hù)操作事件然后與內(nèi)核模塊共同決策。
發(fā)明內(nèi)容針對(duì)上述問(wèn)題與研究空白,本發(fā)明提出一種基于使用Xwindow系統(tǒng)作為圖形用戶(hù)界面的li皿x平臺(tái)下的數(shù)字版權(quán)管理實(shí)現(xiàn)機(jī)制——客戶(hù)端文件使用監(jiān)控策略。本發(fā)明的技術(shù)方案為一種基于li皿x平臺(tái)數(shù)字版權(quán)管理的文件使用控制方法,用于對(duì)基于li皿x平臺(tái)的客戶(hù)端實(shí)現(xiàn)使用文件監(jiān)控,所述客戶(hù)端使用Xwindow系統(tǒng)作為圖形用戶(hù)界面,其特征在于包括以下步驟,步驟l,服務(wù)器端接受客戶(hù)端對(duì)保護(hù)文件的請(qǐng)求后抽取客戶(hù)端的硬件信息,然后從該硬件信息中抽取作為服務(wù)器端所使用的加密密鑰,采用該加密密鑰對(duì)保護(hù)文件加密得到加密后文件;3步驟2,在服務(wù)器端將安全組件與加密后文件打包,打包生成一個(gè)自解壓的可執(zhí)行文件發(fā)送給客戶(hù)端;步驟3,當(dāng)步驟2所得可執(zhí)行文件在客戶(hù)端上運(yùn)行時(shí),首先從客戶(hù)端的硬件信息中抽取解密密鑰并且與服務(wù)器端所使用的加密密鑰對(duì)比,若一致則運(yùn)行解密進(jìn)程獲得保護(hù)文件,否則說(shuō)明客戶(hù)端非法使用保護(hù)文件而拒絕服務(wù);在運(yùn)行解密進(jìn)程的過(guò)程中同時(shí)啟動(dòng)一個(gè)用于監(jiān)控保護(hù)文件窗口狀態(tài)的進(jìn)程,這個(gè)進(jìn)程在保護(hù)文件的窗口關(guān)閉時(shí)進(jìn)行清理工作,包括卸載系統(tǒng)函數(shù)重定向模塊以及關(guān)閉在用戶(hù)空間監(jiān)控用戶(hù)操作的進(jìn)程;步驟4,在獲得保護(hù)文件后,解密進(jìn)程生成一個(gè)子進(jìn)程負(fù)責(zé)啟動(dòng)合適的第三方應(yīng)用程序打開(kāi)保護(hù)文件,父進(jìn)程啟動(dòng)安全組件提供的windowscan進(jìn)程;步驟5,windowscan進(jìn)程首先創(chuàng)建子進(jìn)程負(fù)責(zé)加載系統(tǒng)函數(shù)重定向模塊,所述系統(tǒng)函數(shù)重定向模塊將系統(tǒng)調(diào)用表中sys_write函數(shù)和sys_getdents64函數(shù)分別重定向到my_write函數(shù)和my_getdents64系統(tǒng)函數(shù);在加載系統(tǒng)函數(shù)重定向模塊時(shí),接收保護(hù)文件的文件名和打開(kāi)保護(hù)文件的進(jìn)程名作為參數(shù),同時(shí)利用netlink機(jī)制開(kāi)始監(jiān)聽(tīng)windowscan進(jìn)程的消息;重定向后,所述my—getdents64系統(tǒng)函數(shù)根據(jù)傳遞進(jìn)來(lái)的保護(hù)文件的文件名來(lái)確定隱藏哪個(gè)文件,所述myjrite函數(shù)則負(fù)責(zé)控制向磁盤(pán)中寫(xiě)入數(shù)據(jù)的監(jiān)控;步驟6,windowscan進(jìn)程監(jiān)控客戶(hù)端上焦點(diǎn)窗口的活動(dòng),當(dāng)焦點(diǎn)窗口變化是保護(hù)文件主窗口到另存為對(duì)話(huà)框的時(shí)候,該進(jìn)程再啟動(dòng)一個(gè)子進(jìn)程鎖住屏幕上的鼠標(biāo)操作防止焦點(diǎn)窗口的變化,新的子進(jìn)程抓取用戶(hù)在"另存為"對(duì)話(huà)框中的鍵盤(pán)輸入,直至關(guān)閉"另存為"對(duì)話(huà)框,該子進(jìn)程將用戶(hù)的鍵盤(pán)操作記錄為一個(gè)字符串作為用戶(hù)欲另存為的目標(biāo)文件名,然后該子進(jìn)程通過(guò)netlink機(jī)制將用戶(hù)欲另存為的文件名傳遞給系統(tǒng)函數(shù)重定向模塊,子進(jìn)程結(jié)束這個(gè)操作后返回父進(jìn)程windowscan,windowscan進(jìn)程繼續(xù)監(jiān)控焦點(diǎn)窗口的變化;同時(shí),windowscan進(jìn)程監(jiān)控用戶(hù)在保護(hù)文件主窗口上面涉及到復(fù)制剪貼的鍵盤(pán)和鼠標(biāo)操作,通過(guò)屏蔽復(fù)制剪貼這些操作所引發(fā)的事件達(dá)到使復(fù)制剪貼失效的目的。而且,my_Write函數(shù)控制向磁盤(pán)中寫(xiě)入數(shù)據(jù)的實(shí)現(xiàn)方式為,當(dāng)正在使用系統(tǒng)函數(shù)的進(jìn)程名是第三方應(yīng)用程序的進(jìn)程名時(shí),判斷該函數(shù)執(zhí)行的目標(biāo)文件名是不是保護(hù)文件名或者windowscan進(jìn)程截獲的"另存為"文件名,是就拒絕寫(xiě)盤(pán)操作,否則調(diào)用sysjrite函數(shù)。本發(fā)明的優(yōu)點(diǎn)如下(1)本發(fā)明將保護(hù)文件與用戶(hù)所用的客戶(hù)端綁定,客戶(hù)端一般為電腦,包括個(gè)人計(jì)算機(jī)或筆記本);用戶(hù)從服務(wù)器端下載的打包文件只能在用戶(hù)原有電腦上運(yùn)行而不能轉(zhuǎn)移,從而有效的防止了保護(hù)文件的擴(kuò)散問(wèn)題。(2)本發(fā)明從操作系統(tǒng)層面出發(fā)設(shè)計(jì)保護(hù)措施從而實(shí)現(xiàn)了對(duì)用戶(hù)透明的版權(quán)控制;原有數(shù)字版權(quán)保護(hù)系統(tǒng)均需要開(kāi)發(fā)新的針對(duì)每種文件格式的應(yīng)用程序,在打開(kāi)文件前還需要進(jìn)行用戶(hù)身份驗(yàn)證。本發(fā)明在服務(wù)器端將實(shí)現(xiàn)保護(hù)的程序和模塊與加密后的文件綁定成一個(gè)可執(zhí)行文件發(fā)送給用戶(hù),只需要運(yùn)行這個(gè)文件就可以在使用戶(hù)閱覽文件內(nèi)容的同時(shí)實(shí)現(xiàn)訪問(wèn)控制。(3)本發(fā)明具有通用性和可擴(kuò)展性;本發(fā)明所有的設(shè)計(jì)均在li皿x內(nèi)核基礎(chǔ)上實(shí)現(xiàn),不針對(duì)特殊的li皿x發(fā)行版本,同時(shí)用戶(hù)空間窗口的監(jiān)控也主要是針對(duì)XWindow系統(tǒng),這個(gè)系統(tǒng)目前被絕大多數(shù)li皿x發(fā)行版本采用來(lái)設(shè)計(jì)用戶(hù)界面,同時(shí)本發(fā)明可以很容易的根據(jù)用戶(hù)li皿x內(nèi)核版本的變化進(jìn)行擴(kuò)展從而適應(yīng)用戶(hù)的操作系統(tǒng)。(4)本發(fā)明具有良好的安全性能;打包文件運(yùn)行過(guò)程中產(chǎn)生的臨時(shí)文件(包括軟件運(yùn)行所需要的解密后的源文件、程序以及內(nèi)核模塊),均存放在內(nèi)存上,程序一旦出現(xiàn)異常均全部清除,同時(shí)程序在運(yùn)行過(guò)程中產(chǎn)生的這些文件對(duì)用戶(hù)來(lái)說(shuō)全部是隱藏不可見(jiàn)的從而防止用戶(hù)進(jìn)行惡意損壞。圖1本發(fā)明實(shí)施例的自解壓流程圖;圖2本發(fā)明實(shí)施例的解密程序執(zhí)行流程圖;圖3本發(fā)明實(shí)施例的系統(tǒng)函數(shù)重定向模塊程序框圖;圖4本發(fā)明實(shí)施例的windowscan進(jìn)程程序框圖。具體實(shí)施例方式以下結(jié)合附圖和實(shí)施例詳細(xì)說(shuō)明本發(fā)明技術(shù)方案步驟l,服務(wù)器端接受客戶(hù)端對(duì)保護(hù)文件的請(qǐng)求后抽取客戶(hù)端的硬件信息,然后從該硬件信息中抽取作為服務(wù)器端所使用的加密密鑰,采用該加密密鑰得到加密后文件。本發(fā)明將需要進(jìn)行數(shù)字版權(quán)管理的源文件稱(chēng)為保護(hù)文件。根據(jù)客戶(hù)端的硬件信息生成加密密鑰,可以用于后續(xù)驗(yàn)證是否為同一客戶(hù)端。由于客戶(hù)端一般為電腦,可以采用電腦的硬件地址信息。具體實(shí)施時(shí),生成加密密鑰的方式采用現(xiàn)有密鑰生成算法即可。采用該加密密鑰對(duì)保護(hù)文件加密,即可得到加密后文件,具體實(shí)施時(shí)采用現(xiàn)有加密算法即可。本發(fā)明不予贅述。步驟2,在服務(wù)器端將安全組件與加密后文件打包,打包生成一個(gè)自解壓的可執(zhí)行文件發(fā)送給客戶(hù)端。在服務(wù)器端實(shí)現(xiàn)自解壓的可執(zhí)行文件的生成,實(shí)際上涉及的是基本的文件讀寫(xiě)操作,實(shí)施例使用了標(biāo)準(zhǔn)C的庫(kù)函數(shù)。為了不破壞可執(zhí)行文件頭部格式并且保證在客戶(hù)端它能順利的自解壓生成解密文件、程序源文件以及可自由加載到linux內(nèi)核的模塊來(lái)進(jìn)行訪問(wèn)與監(jiān)控,實(shí)施例設(shè)計(jì)了能夠自解壓的可執(zhí)行文件的內(nèi)部結(jié)構(gòu),如下表所示可執(zhí)行文件內(nèi)部結(jié)構(gòu)表<table>tableseeoriginaldocumentpage5</column></row><table><table>tableseeoriginaldocumentpage6</column></row><table>其中,解壓程序用于實(shí)現(xiàn)自解壓,對(duì)各部分指定長(zhǎng)度,能夠保證正確解壓。密文即服務(wù)端通過(guò)加密密鑰所得加密后文件。安全組件包括Windowscan程序和系統(tǒng)函數(shù)重定向模塊。系統(tǒng)函數(shù)重定向模塊是用于系統(tǒng)函數(shù)重定向的內(nèi)核模塊,Windowscan程序是用于在用戶(hù)空間進(jìn)行監(jiān)控的應(yīng)用程序,監(jiān)控內(nèi)容包括保護(hù)文件主窗口的狀態(tài)以及用戶(hù)在它上面執(zhí)行的操作。步驟3,當(dāng)步驟2所得可執(zhí)行文件在客戶(hù)端上運(yùn)行時(shí),首先從客戶(hù)端的硬件信息中抽取解密密鑰并且與服務(wù)器端所使用的加密密鑰對(duì)比,若一致則運(yùn)行解密進(jìn)程獲得保護(hù)文件,否則說(shuō)明客戶(hù)端非法使用保護(hù)文件而拒絕服務(wù)。為了在使用保護(hù)文件的工作完成后,自動(dòng)釋放客戶(hù)端系統(tǒng)資源,本發(fā)明還提出在運(yùn)行解密進(jìn)程的過(guò)程中同時(shí)啟動(dòng)一個(gè)用于監(jiān)控保護(hù)文件窗口狀態(tài)的進(jìn)程,這個(gè)進(jìn)程在保護(hù)文件的窗口關(guān)閉時(shí)進(jìn)行清理工作,即卸載安全組件。清理內(nèi)容包括卸載系統(tǒng)函數(shù)重定向模塊以及關(guān)閉在用戶(hù)空間監(jiān)控用戶(hù)操作的進(jìn)程。實(shí)施例采用可執(zhí)行文件中提供的解壓程序,通過(guò)解壓程序提供解壓進(jìn)程,從而實(shí)現(xiàn)解壓。如附圖l所示,解壓進(jìn)程負(fù)責(zé)從在服務(wù)器端打包的可執(zhí)行文件中抽取出各程序和模塊。解壓進(jìn)程在創(chuàng)建解密進(jìn)程啟動(dòng)的同時(shí)要啟動(dòng)一個(gè)窗口狀態(tài)監(jiān)控進(jìn)程,因?yàn)樵诮饷苓M(jìn)程中搜索適當(dāng)?shù)牡谌綉?yīng)用程序(如W0RD)來(lái)展示文件后監(jiān)控的目標(biāo)——保護(hù)文件主窗口才出現(xiàn),所以窗口狀態(tài)監(jiān)控進(jìn)程需要區(qū)分窗口關(guān)閉與窗口尚未打開(kāi)這兩種情況。創(chuàng)建解密進(jìn)程可以采用子進(jìn)程,啟動(dòng)窗口狀態(tài)監(jiān)控進(jìn)程則采用父進(jìn)程。具體實(shí)施時(shí),在窗口狀態(tài)監(jiān)控進(jìn)程開(kāi)始運(yùn)行后并不馬上檢查窗口狀態(tài)而是等待windowscan進(jìn)程開(kāi)始運(yùn)行后來(lái)激活。窗口狀態(tài)監(jiān)控的基礎(chǔ)來(lái)源于li皿x下Xwindow系統(tǒng)的Property機(jī)制,通過(guò)窗口名稱(chēng)這個(gè)Property與保護(hù)文件的文件名稱(chēng)進(jìn)行比對(duì)可以定位保護(hù)文件主窗口并且進(jìn)行監(jiān)控。監(jiān)控的實(shí)現(xiàn),可以為循環(huán)掃描客戶(hù)端桌面上的所有窗口,判斷保護(hù)文件主窗口是否存在,是則繼續(xù)掃描,否則卸載安全組件。步驟4,在獲得保護(hù)文件后,解密進(jìn)程生成一個(gè)子進(jìn)程負(fù)責(zé)啟動(dòng)合適的第三方應(yīng)用程序打開(kāi)保護(hù)文件,父進(jìn)程啟動(dòng)windowscan進(jìn)程。實(shí)施例采用可執(zhí)行文件中提供的解密程序,通過(guò)解密程序提供解密進(jìn)程,從而實(shí)現(xiàn)解壓。如圖2所示,客戶(hù)端上,在解密進(jìn)程運(yùn)行過(guò)程中,首先要抽取客戶(hù)端的硬件信息并且運(yùn)算得到解密密鑰,與加密密鑰的比對(duì)過(guò)程實(shí)際上就是用解密密鑰解密加密后的保護(hù)文件,如果解密失敗那么意味著用戶(hù)非法,就直接退出整個(gè)程序(即不會(huì)進(jìn)行后續(xù)步驟),如果成功那么意味著比對(duì)成功,用戶(hù)是合法的,然后創(chuàng)建子進(jìn)程,子進(jìn)程會(huì)在用戶(hù)電腦上搜索可以打開(kāi)文件的第三方應(yīng)用程序來(lái)打開(kāi)保護(hù)文件,同時(shí)父進(jìn)程會(huì)直接運(yùn)行安全組件,即通過(guò)運(yùn)行可執(zhí)行文件中提供的windowscan程序,啟動(dòng)windowscan進(jìn)程。步驟5,windowscan進(jìn)程首先創(chuàng)建子進(jìn)程負(fù)責(zé)加載系統(tǒng)函數(shù)重定向模塊,所述系統(tǒng)函數(shù)重定向模塊將系統(tǒng)調(diào)用表中sys_write函數(shù)和sys_getdents64函數(shù)分別重定向到my_write函數(shù)和my_getdents64系統(tǒng)函數(shù);在加載系統(tǒng)函數(shù)重定向模塊時(shí),接收保護(hù)文件的文件名和打開(kāi)保護(hù)文件的進(jìn)程名作為參數(shù),同時(shí)利用netlink機(jī)制開(kāi)始監(jiān)聽(tīng)windowscan進(jìn)程的消息;重定向后,所述my—getdents64系統(tǒng)函數(shù)根據(jù)傳遞進(jìn)來(lái)的保護(hù)文件的文件名來(lái)確定隱藏哪個(gè)文件,所述my—write函數(shù)則負(fù)責(zé)控制向磁盤(pán)中寫(xiě)入數(shù)據(jù)的監(jiān)控。運(yùn)行解密進(jìn)程獲得保護(hù)文件后,保護(hù)文件存儲(chǔ)在內(nèi)存中并且隱藏為對(duì)客戶(hù)端的用戶(hù)來(lái)說(shuō)是不可見(jiàn)的。隱藏的實(shí)現(xiàn)是通過(guò)使用重定向系統(tǒng)函數(shù)模塊。實(shí)施例還提供了my—write函數(shù)控制向磁盤(pán)中寫(xiě)入數(shù)據(jù)的實(shí)現(xiàn)方式,當(dāng)正在使用系統(tǒng)函數(shù)的進(jìn)程名是第三方應(yīng)用程序的進(jìn)程名時(shí),判斷該函數(shù)執(zhí)行的目標(biāo)文件名是不是保護(hù)文件名或者windowscan進(jìn)程截獲的"另存為"文件名,是就拒絕寫(xiě)盤(pán)操作,否則調(diào)用回li皿x系統(tǒng)內(nèi)核原sysjrite函數(shù)。如圖3所示,在系統(tǒng)函數(shù)重定向模塊中,本發(fā)明實(shí)施例采用了成熟的linuxrootkit以及LKM技術(shù),通過(guò)修改li皿x操作系統(tǒng)的內(nèi)核系統(tǒng)調(diào)用表達(dá)到了對(duì)應(yīng)用程序欺騙效果。li皿x提供了Current宏,從而可以獲得當(dāng)前正在使用系統(tǒng)函數(shù)的進(jìn)程名Current->comm,而該模塊在被windowscan的子進(jìn)程加載的時(shí)候獲得了打開(kāi)保護(hù)文件的第三方應(yīng)用程序的名稱(chēng)processname。my_Wrie這個(gè)替代后的系統(tǒng)調(diào)用函數(shù)通過(guò)比對(duì)processname和正在使用系統(tǒng)函數(shù)的進(jìn)程名Current->comm可以達(dá)到第一層的調(diào)用分流。艮卩Current->comm==processname時(shí),豐艮據(jù)sys_write函數(shù)的文^[牛t示識(shí)符fd參數(shù)獲取文件名;Current->comm!=processname時(shí),調(diào)用linux系統(tǒng)內(nèi)核原sys_write函數(shù)(標(biāo)記為originalsys—write函數(shù))。第一層分流保證了對(duì)系統(tǒng)調(diào)用表這個(gè)操作系統(tǒng)全局變量的修改不會(huì)影響到其它進(jìn)程而只是針對(duì)打開(kāi)保護(hù)文件的該進(jìn)程產(chǎn)生影響。My_write這個(gè)新的系統(tǒng)函數(shù)會(huì)根據(jù)傳入該函數(shù)的參數(shù)fd獲得文件節(jié)點(diǎn)這個(gè)數(shù)據(jù)結(jié)構(gòu),在li皿x平臺(tái)下文件節(jié)點(diǎn)用Structinode表示,通過(guò)inode這個(gè)數(shù)據(jù)結(jié)構(gòu)就可以獲得了系統(tǒng)調(diào)用目前正在操作的文件信息。通過(guò)將windowscan進(jìn)程傳入的保護(hù)文件名稱(chēng)filename和通過(guò)netlink機(jī)制(該機(jī)制在內(nèi)核模塊中作用,圖中記為Netlink-kernel)獲取的windowscan進(jìn)程截獲的用戶(hù)欲另存為文件名saveasfilename,與系統(tǒng)函數(shù)正在操作的文件結(jié)構(gòu)中的成員變量cLiname這個(gè)參數(shù)進(jìn)行比對(duì)可以達(dá)到第二層的調(diào)用分流。即參數(shù)!=filename或者參數(shù)!=saveasfilen咖e時(shí),調(diào)用0riginalsys—write函數(shù);參數(shù)==filen咖eor或者參數(shù)==saveasfilename時(shí),返回文件標(biāo)識(shí)符錯(cuò)誤。第二層的調(diào)用分流保證了對(duì)系統(tǒng)調(diào)用表這個(gè)操作系統(tǒng)全局變量的修改不會(huì)影響到同一進(jìn)程操作的其他非保護(hù)文件。其中,!=表示不等于,==表示等于。步驟6,windowscan進(jìn)程監(jiān)控客戶(hù)端上焦點(diǎn)窗口的活動(dòng),當(dāng)焦點(diǎn)窗口變化是保護(hù)文件主窗口到另存為對(duì)話(huà)框的時(shí)候,該進(jìn)程再啟動(dòng)一個(gè)子進(jìn)程鎖住屏幕上的鼠標(biāo)操作防止7焦點(diǎn)窗口的變化,新的子進(jìn)程抓取用戶(hù)在"另存為"對(duì)話(huà)框中的鍵盤(pán)輸入,直至關(guān)閉"另存為"對(duì)話(huà)框,該子進(jìn)程將用戶(hù)的鍵盤(pán)操作記錄為一個(gè)字符串作為用戶(hù)欲另存為的目標(biāo)文件名,然后該子進(jìn)程通過(guò)netlink機(jī)制將用戶(hù)欲另存為的文件名傳遞給系統(tǒng)函數(shù)重定向模塊,子進(jìn)程結(jié)束這個(gè)操作后返回父進(jìn)程windowscan,windowscan進(jìn)程繼續(xù)監(jiān)控焦點(diǎn)窗口的變化;同時(shí),windowscan進(jìn)程監(jiān)控用戶(hù)在保護(hù)文件主窗口上面涉及到復(fù)制剪貼的鍵盤(pán)和鼠標(biāo)操作,通過(guò)屏蔽復(fù)制剪貼這些操作所引發(fā)的事件達(dá)到使復(fù)制剪貼失效的目的。如附圖4所示,windowscan進(jìn)程在步驟5建立的子進(jìn)程加載系統(tǒng)函數(shù)重定向模塊,父進(jìn)程則會(huì)循環(huán)監(jiān)控焦點(diǎn)窗口的變化情況(即循環(huán)檢測(cè)焦點(diǎn)窗口活動(dòng)序列),同時(shí)抓取主窗口上涉及復(fù)制剪貼的鍵鼠操作??梢酝ㄟ^(guò)Xwindow下的Xlib函數(shù)XgetlnputFocus函數(shù)獲得實(shí)時(shí)焦點(diǎn)窗口,設(shè)置兩個(gè)字符串分別存儲(chǔ)前后兩個(gè)時(shí)刻焦點(diǎn)窗口的名稱(chēng),當(dāng)這個(gè)變化過(guò)程匹配"保護(hù)文件主窗口另存為對(duì)話(huà)框"的序列時(shí),就可以斷定用戶(hù)在對(duì)保護(hù)文件進(jìn)行另存為操作,這時(shí)候啟動(dòng)一個(gè)后臺(tái)子進(jìn)程屏蔽屏幕鼠標(biāo)操作防止用戶(hù)繼續(xù)改變焦點(diǎn)窗口,同時(shí)這個(gè)子進(jìn)程抓取用戶(hù)在另存為對(duì)話(huà)框上的所有鍵盤(pán)輸入,創(chuàng)建鍵盤(pán)事件處理循環(huán)。這類(lèi)似于在li皿x平臺(tái)上實(shí)現(xiàn)中文輸入法的機(jī)制(抓取用戶(hù)輸入生成漢字寫(xiě)入應(yīng)用程序顯示區(qū)域),根據(jù)鍵盤(pán)輸入的處理結(jié)果就可以生成一個(gè)字符串代表用戶(hù)欲命名的另存為文件名,在另存為對(duì)話(huà)框關(guān)閉時(shí)通過(guò)net1ink機(jī)制建立net1ink客戶(hù)端將這個(gè)文件名傳遞給內(nèi)核模塊,結(jié)束子進(jìn)程。權(quán)利要求一種基于linux平臺(tái)數(shù)字版權(quán)管理的文件使用控制方法,用于對(duì)基于linux平臺(tái)的客戶(hù)端實(shí)現(xiàn)使用文件監(jiān)控,所述客戶(hù)端使用Xwindow系統(tǒng)作為圖形用戶(hù)界面,其特征在于包括以下步驟,步驟1,服務(wù)器端接受客戶(hù)端對(duì)保護(hù)文件的請(qǐng)求后抽取客戶(hù)端的硬件信息,然后從該硬件信息中抽取作為服務(wù)器端所使用的加密密鑰,采用該加密密鑰對(duì)保護(hù)文件加密得到加密后文件;步驟2,在服務(wù)器端將安全組件與加密后文件打包,打包生成一個(gè)自解壓的可執(zhí)行文件發(fā)送給客戶(hù)端;步驟3,當(dāng)步驟2所得可執(zhí)行文件在客戶(hù)端上運(yùn)行時(shí),首先從客戶(hù)端的硬件信息中抽取解密密鑰并且與服務(wù)器端所使用的加密密鑰對(duì)比,若一致則運(yùn)行解密進(jìn)程獲得保護(hù)文件,否則說(shuō)明客戶(hù)端非法使用保護(hù)文件而拒絕服務(wù);在運(yùn)行解密進(jìn)程的過(guò)程中同時(shí)啟動(dòng)一個(gè)用于監(jiān)控保護(hù)文件窗口狀態(tài)的進(jìn)程,這個(gè)進(jìn)程在保護(hù)文件的窗口關(guān)閉時(shí)卸載安全組件;步驟4,在獲得保護(hù)文件后,解密進(jìn)程生成一個(gè)子進(jìn)程負(fù)責(zé)啟動(dòng)合適的第三方應(yīng)用程序打開(kāi)保護(hù)文件,父進(jìn)程啟動(dòng)安全組件提供的windowscan進(jìn)程;步驟5,windowscan進(jìn)程首先創(chuàng)建子進(jìn)程負(fù)責(zé)加載系統(tǒng)函數(shù)重定向模塊,所述系統(tǒng)函數(shù)重定向模塊將系統(tǒng)調(diào)用表中sys_write函數(shù)和sys_getdents64函數(shù)分別重定向到my_write函數(shù)和my_getdents64系統(tǒng)函數(shù);在加載系統(tǒng)函數(shù)重定向模塊時(shí),接收保護(hù)文件的文件名和打開(kāi)保護(hù)文件的進(jìn)程名作為參數(shù),同時(shí)利用netlink機(jī)制開(kāi)始監(jiān)聽(tīng)windowscan進(jìn)程的消息;重定向后,所述my_getdents64系統(tǒng)函數(shù)根據(jù)傳遞進(jìn)來(lái)的保護(hù)文件的文件名來(lái)確定隱藏哪個(gè)文件,所述my_write函數(shù)則負(fù)責(zé)控制向磁盤(pán)中寫(xiě)入數(shù)據(jù)的監(jiān)控;步驟6,windowscan進(jìn)程監(jiān)控客戶(hù)端上焦點(diǎn)窗口的活動(dòng),當(dāng)焦點(diǎn)窗口變化是保護(hù)文件主窗口到另存為對(duì)話(huà)框的時(shí)候,該進(jìn)程再啟動(dòng)一個(gè)子進(jìn)程鎖住屏幕上的鼠標(biāo)操作防止焦點(diǎn)窗口的變化,新的子進(jìn)程抓取用戶(hù)在“另存為”對(duì)話(huà)框中的鍵盤(pán)輸入,直至關(guān)閉“另存為”對(duì)話(huà)框,該子進(jìn)程將用戶(hù)的鍵盤(pán)操作記錄為一個(gè)字符串作為用戶(hù)欲另存為的目標(biāo)文件名,然后該子進(jìn)程通過(guò)netlink機(jī)制將用戶(hù)欲另存為的文件名傳遞給系統(tǒng)函數(shù)重定向模塊,子進(jìn)程結(jié)束這個(gè)操作后返回父進(jìn)程windowscan,windowscan進(jìn)程繼續(xù)監(jiān)控焦點(diǎn)窗口的變化;同時(shí),windowscan進(jìn)程監(jiān)控用戶(hù)在保護(hù)文件主窗口上面涉及到復(fù)制剪貼的鍵盤(pán)和鼠標(biāo)操作,通過(guò)屏蔽復(fù)制剪貼這些操作所引發(fā)的事件達(dá)到使復(fù)制剪貼失效的目的。2.如權(quán)利要求1所述的文件使用控制方法,其特征在于my_Write函數(shù)控制向磁盤(pán)中寫(xiě)入數(shù)據(jù)的實(shí)現(xiàn)方式為,當(dāng)正在使用系統(tǒng)函數(shù)的進(jìn)程名是第三方應(yīng)用程序的進(jìn)程名時(shí),判斷該函數(shù)執(zhí)行的目標(biāo)文件名是不是保護(hù)文件名或者windowscan進(jìn)程截獲的"另存為"文件名,是就拒絕寫(xiě)盤(pán)操作,否則調(diào)用syS_write函數(shù)。全文摘要本發(fā)明提供一種基于linux平臺(tái)數(shù)字版權(quán)管理的文件使用控制方法,本發(fā)明優(yōu)點(diǎn)在于將數(shù)字文件與客戶(hù)端綁定,從而有效的防止了數(shù)字文件的擴(kuò)散;在服務(wù)器端將實(shí)現(xiàn)保護(hù)的程序和模塊與加密后的文件綁定成一個(gè)可執(zhí)行文件發(fā)送給用戶(hù),從操作系統(tǒng)層面出發(fā)設(shè)計(jì)保護(hù)措施從而實(shí)現(xiàn)了對(duì)用戶(hù)透明的版權(quán)控制;具有通用性和可擴(kuò)展性;具有良好的安全性能。文檔編號(hào)G06F21/24GK101719210SQ20091027340公開(kāi)日2010年6月2日申請(qǐng)日期2009年12月25日優(yōu)先權(quán)日2009年12月25日發(fā)明者劉學(xué)彬,王玉林申請(qǐng)人:武漢大學(xué)