久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

基于API HOOK的剪切板監(jiān)控

 淘樂寶館 2011-12-07

基于API HOOK的剪切板監(jiān)控

129人閱讀 評論(0) 收藏 舉報

基于API HOOK的剪切板監(jiān)控

 
    摘  要  本文通過對剪切板機(jī)制的研究,,采用API HOOK技術(shù)對剪切板的系統(tǒng)調(diào)用函數(shù)攔截,實現(xiàn)了對剪切板的監(jiān)控,,防止敏感信息通過剪切板泄露,。
    關(guān)鍵詞  剪切板;API HOOK,;信息保密
 

 

1  引言

    計算機(jī)的普及帶來了信息交流的便利,,同時也造成了信息泄露問題的日趨嚴(yán)重。剪切板是信息泄露的一個主要途徑,,對剪切板的監(jiān)控是防止信息泄密的不可或缺的一環(huán),。本文通過對剪切板機(jī)制和API HOOK技術(shù)的研究,通過遠(yuǎn)程線程注入的方式替換剪切板的系統(tǒng)調(diào)用函數(shù),,實現(xiàn)對剪切板的監(jiān)控,。

2  剪切板機(jī)制

    Windows剪切板是一種簡單而且開銷較小的IPC(InterProcess Communication,進(jìn)程間通訊)機(jī)制,,方便用戶在不同程序間拷貝數(shù)據(jù),。在Windows操作系統(tǒng)中存在兩種剪切板機(jī)制,即標(biāo)準(zhǔn)剪切板機(jī)制和OLE剪切板機(jī)制,。
    標(biāo)準(zhǔn)剪切板的基本機(jī)制是【1】:Windows系統(tǒng)預(yù)留一塊全局共享內(nèi)存,,提供數(shù)據(jù)的進(jìn)程創(chuàng)建一個全局內(nèi)存塊,并將要傳送的數(shù)據(jù)拷貝到內(nèi)存中,,接受數(shù)據(jù)的進(jìn)程獲取此內(nèi)存塊的句柄,,并拷貝其中的數(shù)據(jù)。進(jìn)程使用剪切板的一般步驟為:調(diào)用OpenClipboard()函數(shù)打開剪切板,,調(diào)用GetClipboard Data()函數(shù)獲取剪切板的內(nèi)容,,如果是設(shè)置剪切板內(nèi)容,則調(diào)用EmptyClipboard()函數(shù)清空剪切板,,然后調(diào)用SetCipboard Data()設(shè)置剪切板內(nèi)容,調(diào)用CloseClipboard()關(guān)閉剪切板,。因此,,防泄密系統(tǒng)可以通過截獲進(jìn)程對USER32.dll中Open Clipboard,、GetClipboardData、EmptyClipboard,、SetClipboardData API函數(shù)的調(diào)用,,實現(xiàn)對剪切板的控制。
    自從OLE(Object Linking and Embedding,對象鏈接和嵌入)出現(xiàn)后,,Windows操作系統(tǒng)出現(xiàn)了另一種剪切板機(jī)制――OLE剪切板機(jī)制,。OLE剪切板使用IDataObject接口,相關(guān)的API函數(shù)和標(biāo)準(zhǔn)剪切板類似,,主要有以下幾個:
    OleSetClipboard():在剪切板上放置一個IDataObject接口指針,;
    OleGetClipboard():從剪切板獲取一個IDataObject接口指針;
    OleFlushClipboard():清除剪切板中的內(nèi)容,,并釋放IDataObject接口指針,;
    OleIsCurrentClipboard():判斷剪切板上是否存在指定對象。

3  API HOOK

    Windows API是Windows提供給應(yīng)用程序的接口,,通過這個接口,,應(yīng)用程序可以使用操作系統(tǒng)的所有資源。大多數(shù)應(yīng)用程序都要使用很多API函數(shù),,在應(yīng)用程序沒有提供編程接口,,也不知道源代碼的情況下,API HOOK技術(shù)是控制應(yīng)用程序的一種有效途徑,。通過API HOOK,,可以實現(xiàn)對Win32 API函數(shù)的攔截,從而改變函數(shù)甚至應(yīng)用程序的行為,。

3.1  API HOOK途徑

    通常API HOOK的實現(xiàn)有以下兩種途徑【2】【3】
    1)導(dǎo)入地址表(Import Address Table, IAT)補(bǔ)丁
    Windows 32位操作系統(tǒng)中,,所有可執(zhí)行文件或動態(tài)鏈接庫都是基于PE(Portable Executable)格式構(gòu)建。PE文件的結(jié)構(gòu)由多個成為“節(jié)”塊組成,,每個節(jié)中都包含了特定的內(nèi)容,,而且加載入內(nèi)存中的PE文件的結(jié)構(gòu)與磁盤上的靜態(tài)文件結(jié)構(gòu)完全一樣。在PE文件的.idata節(jié)中包含一個IAT,,它保存著所有與可執(zhí)行代碼應(yīng)用的導(dǎo)入函數(shù)名稱的偏移量,。當(dāng)調(diào)用某一導(dǎo)入函數(shù)時,可執(zhí)行程序從IAT中找到該導(dǎo)入函數(shù)的入口地址,,然后再跳轉(zhuǎn)到執(zhí)行函數(shù)代碼,。用戶可以用自己函數(shù)的入口地址覆蓋IAT中相對應(yīng)的導(dǎo)入函數(shù)地址,實現(xiàn)API函數(shù)攔截,。
     2)修改應(yīng)用程序
    該方式主要通過替換函數(shù)實現(xiàn)的前幾個字節(jié),。通過調(diào)用GetProcAddress函數(shù)得到被攔截API函數(shù)的入口地址,保存入口地址前幾個字節(jié)的內(nèi)容,,并用一個JMP或INT指令替換,。當(dāng)API函數(shù)被調(diào)用時,,應(yīng)用程序就會直接跳轉(zhuǎn)或通過中斷的方式跳轉(zhuǎn)到攔截函數(shù)。

3.2  API HOOK的實現(xiàn)步驟

    API HOOK的實現(xiàn)一般包括兩個步驟:
    1) 代碼注入
    在Windows操作系統(tǒng)中,,所有32位應(yīng)用程序都運行在一個相對獨立的私有地址空間中,。API HOOK的第一步就是把自己的攔截函數(shù)做成動態(tài)鏈接庫,注入到目標(biāo)進(jìn)程的地址空間中,,然后再實現(xiàn)函數(shù)跳轉(zhuǎn),。通常代碼注入采用創(chuàng)建遠(yuǎn)程線程的方法。
    創(chuàng)建遠(yuǎn)程線程實現(xiàn)代碼注入的主要思想是用Virtual AllocEx函數(shù)在遠(yuǎn)程進(jìn)程中申請空間,,調(diào)用WriteProcess Memory將攔截函數(shù)動態(tài)鏈接庫的名字和路徑寫入申請的空間,,調(diào)用CreateRemoteThread和LoadLibrary函數(shù)將動態(tài)鏈接庫映射到遠(yuǎn)程進(jìn)程,等待映射完畢后,,調(diào)用GetExitCodeThread獲得返回碼,,即得到映射的動態(tài)鏈接庫的加載基地址。至此,,攔截代碼已經(jīng)加載到遠(yuǎn)程進(jìn)程的地址空間中,。
    2) 掛接API
    得到攔截代碼加載到遠(yuǎn)程進(jìn)程的地址后,就可以采用IAT補(bǔ)丁或應(yīng)用程序修改的方法,,將目標(biāo)API函數(shù)的調(diào)用修改為攔截函數(shù)的調(diào)用,。

4  剪切板監(jiān)控的實現(xiàn)

    本文將兩種剪切板所用API函數(shù)的替代函數(shù)(如表1所示)存儲到ClipboardControl.dll中,供剪切板監(jiān)控程序攔截API時調(diào)用,。

 

表1  剪切板API替換函數(shù)表
函數(shù)名
替換函數(shù)名
替換函數(shù)功能
SetClipboardData
MySetClipboardData
獲取數(shù)據(jù)來源,,收集數(shù)據(jù)源信息,對
OleSetClipboard
MyOleSetClipboard
GetClipboardData
MyGetClipboardData
收集數(shù)據(jù)目的地信息,,根據(jù)防泄密規(guī)則決定該操作是否放行
OleGetClipboard
MyOleGetClipboard
SetClipboardViewer
MySetClipboardViewer
保證監(jiān)控程序觀察窗口始終處于鏈?zhǔn)?,站取?yōu)先權(quán)

 

    剪切板監(jiān)控程序調(diào)用CreateRemoteThread函數(shù)在閱讀器進(jìn)程中創(chuàng)建遠(yuǎn)程線程,把監(jiān)控代碼ClipboardControl.dll注入到目標(biāo)進(jìn)程中,,并調(diào)用ImageDirectoryEntryToData函數(shù)獲取目標(biāo)進(jìn)程模塊的輸入表地址,,通過遍歷輸入表找到USER32.dll模塊對應(yīng)的IMAGE_IMPORT_DESCRIPTOR,然后遍歷其IAT,,找到目標(biāo)API在IAT中相應(yīng)的表項,,通過VirtualQuery獲取內(nèi)存信息,調(diào)用VirtualProtectEx修改內(nèi)存為可讀寫,,再調(diào)用WriteProcessMemory修改內(nèi)存,,使表項中API函數(shù)的地址變?yōu)橄到y(tǒng)監(jiān)控代碼的地址,修改完畢后調(diào)用VirtualProtectEx將內(nèi)存屬性改回來,。當(dāng)用戶使用剪切板時,,監(jiān)控程序就能根據(jù)替換函數(shù)的代碼進(jìn)行相應(yīng)的操作,從而達(dá)到對剪切板進(jìn)行監(jiān)控的目的,。

5  總結(jié)

    本文通過創(chuàng)建遠(yuǎn)程線程的方式,,將API替代函數(shù)注入目標(biāo)進(jìn)程,,通過修改IAT,對目標(biāo)API函數(shù)進(jìn)行替換,,達(dá)到對其攔截的目的,從而實現(xiàn)了剪切板的監(jiān)控,,防止信息通過剪切板泄露,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多