• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于代碼搬移的PE文件信息隱藏

      2010-08-06 09:29:16朱天明劉嘉勇
      通信技術 2010年8期
      關鍵詞:子程序密鑰代碼

      朱天明, 劉嘉勇

      (四川大學 信息安全研究所,四川 成都 610064)

      0 引言

      隨著計算機技術的飛速發(fā)展,以及互聯(lián)網(wǎng)的廣泛應用,計算機已經(jīng)逐漸成為了人們?nèi)粘I畈豢苫蛉钡囊徊糠郑藗兯芙佑|到的信息也越來越多。信息的安全漸漸的成為了人們關注的主要問題,信息隱藏就是實現(xiàn)信息安全傳輸?shù)囊环N解決方法。目前,信息隱藏技術主要局限于針對圖像、聲音、視頻等多媒體載體[1]。對基于可執(zhí)行(PE)文件信息隱藏技術的研究還很有限,它主要是利用 PE文件結(jié)構中的冗余空間和字段、靜態(tài)分配的字符串存儲空間等來進行信息隱藏[2-3]。這些方法都存在信息隱藏過于集中,信息與原始 PE文件內(nèi)容結(jié)合不夠緊密,容易被發(fā)現(xiàn)的缺點[4]。針對這些問題,在研究 PE格式以及機器指令格式的基礎上,提出了一種基于代碼搬移來將信息隱藏到 PE文件中的方案,并對方案進行了實現(xiàn)和分析。

      1 基于代碼搬移的PE信息隱藏方案

      1.1 方案原理

      一般在程序的編寫過程中,程序員都會寫出很多的子程序來實現(xiàn)各種功能,并在主程序中調(diào)用這些子程序,這就使得在一個完整的程序中會存在著很多大大小小的子程序。在PE文件代碼節(jié)中,一個子程序就是相對完整的一塊代碼塊,這塊代碼實現(xiàn)一個特定的功能。正是子程序的這個相對完整的特性給了將子程序進行搬移的可能。可以根據(jù)載體文件的冗余大小和隱藏文件的大小,選取若干個子程序并將其搬移到代碼節(jié)末尾的冗余空間中,然后在原來子程序處隱藏信息,為了加強信息的機密性和抗攻擊的性能,在信息隱藏時,可以對信息進行加密,以及用秘密共享技術將信息分割存儲到不同的子程序中,這樣當一部分的信息被破壞的時候,仍然可以恢復出隱藏信息。

      在選取子程序時,選取的子程序的總大小要大于或等于經(jīng)過秘密分割和加密處理之后的隱藏文件的大小,并且小于載體文件總的冗余大小,這樣才可以實現(xiàn)信息的隱藏。在對子程序進行搬移時,由于搬移的是二進制的代碼,所以需要解決以下三個方面的問題:

      (1)判斷子程序的位置

      對于子程序的搬移,在搬移之前,首先需要準確的判斷出子程序在代碼中所處的位置。由于對子程序的調(diào)用都是通過主調(diào)程序的Call指令進行的,所以可以通過Call來查找子程序的位置。先將二進制的代碼進行反匯編,通過 PE頭OptionalHeader結(jié)構體中的字段AddressOfEntryPoint找到程序的入口點[5],從程序的入口點處依次查找Call指令,并且排除掉對動態(tài)鏈接庫中的函數(shù)的調(diào)用就能得到子程序的地址。如匯編指令CALL 0x00431234,0x00431234處就是一個子程序的開始。

      (2)判斷子程序的大小

      對于子程序的大小,可以通過子程序的結(jié)尾地址減去開始地址得到,開始的地址通過第一步找到的CALL指令的跳轉(zhuǎn)地址可以得到,現(xiàn)在需要判斷子程序的結(jié)尾地址。在匯編指令中,在一個程序結(jié)尾處都會出現(xiàn)一條retn指令來清理子程序使用的堆棧以及將程序返回到調(diào)用程序處[6]。所以,可以通過找到retn指令來判斷子程序的結(jié)尾地址。然而,在有的子程序中,當進行條件判斷的時候,可能會有多個retn指令,其中只有一個retn才是子程序真正的結(jié)尾,如圖1。在這種情下,程序中間出現(xiàn)的retn指令前面會出現(xiàn)如JZ、JNZ等條件轉(zhuǎn)移指令,如果條件滿足程序就會跳轉(zhuǎn)到這個retn指令后面去執(zhí)行,那么這個retn指令就有可能不會執(zhí)行,也就不是程序結(jié)尾的標志,如子程序中第一個 retn。所以判斷子程序大小的方法為:依次查找retn指令,然后排除掉可能會被跳轉(zhuǎn)指令跳過的retn,直到找到最終的retn指令,從而得到子程序的結(jié)尾地址。具有多個retn折子程序如下:

      (3)修改子程序中的跳轉(zhuǎn)指令

      在搬移子程序的時候,由于跳轉(zhuǎn)指令的特性,需要對跳轉(zhuǎn)指令重新進行改寫以使得其跳轉(zhuǎn)到正確的地址,這樣才能保證程序在隱藏了信息之后仍然可以正常運行。在子程序中,跳轉(zhuǎn)指令有CALL和JMP兩類,對應的機器碼分別為E8 XXXXXXXX,E9 XXXXXXXX,其中偏移量(XXXXXXXX)=跳轉(zhuǎn)的目的地址-跳轉(zhuǎn)的起始地址-5h 。JMP指令不需要修改,需要修改的為CALL指令。在搬移過程中,CALL指令跳轉(zhuǎn)的目的地址沒有發(fā)生變化,而跳轉(zhuǎn)的起始地址由于指令被搬移了而發(fā)生了變化,從而偏移量也會發(fā)生變化。這就需要將子程序中所有的這種 CALL的偏移量根據(jù)搬移到的位置進行重新計算并改寫,使其在搬移后仍能調(diào)用正確的函數(shù)。

      1.2 方案的實現(xiàn)

      1.2.1 方案的實現(xiàn)流程

      如圖1所示。此為信息隱藏的實現(xiàn)流程,對于提取過程,僅僅是隱藏過程的逆過程。

      圖1 實現(xiàn)流程

      1.2.2 實現(xiàn)步驟

      (1)對載體文件以及隱藏信息文件的預分析

      對載體PE文件C進行預分析,得到載體文件子程序的數(shù)量、大小以及 PE文件代碼段的冗余大小,并根據(jù)調(diào)用的先后順序?qū)⒆映绦蚺判虿松闲蛱?。對隱藏信息進行分析得到秘密分割后信息的大小。通過分析得到的數(shù)據(jù),選取合適的子程序并用密鑰K表示所選取的子程序的序號。如,選取第1,2個子程序,則密鑰為0102.

      (2)對信息進行預處理

      首先,用密鑰K對需要隱藏的信息進行加密得到M’。然后,用秘密分割算法將加密后的信息進行分割得到子信息,,…,。這里在實現(xiàn)中將隱藏信息分為3個子信息,門限為2即需要兩個完整的子信息便可以恢復隱藏信息。

      (3)對信息進行隱藏

      通過密鑰K的控制,找到需要隱藏信息的子程序,將子程序搬移到代碼段末尾的冗余處,并且將其中的 CALL指令進行修改。然后,在原來子程序最開始處添加一句代碼,JMP xxxxxxxx其中xxxxxxxx是子程序被搬移處的地址,添加這一句指令使程序能跳轉(zhuǎn)到正確的子程序處執(zhí)行,接著將子信息,,…,依次隱藏到子程序原來的位置處。隱藏完畢之后,再將子信息的大小數(shù)據(jù)保存在一個 PE文件固定位置處,以便在恢復隱藏信息時將子信息分離開來。這里在實現(xiàn)中將子信息大小數(shù)據(jù)保存在 PE頭的冗余位置處。然后修改PE文件頭的VirtualSize字段為修改后代碼節(jié)的大小,最后得到隱藏了信息的PE文件。

      (4)信息的提取

      信息的提取過程僅僅是信息的隱藏過程的逆過程。首先,通過密鑰找到隱藏了信息的原始子程序的位置,并根據(jù)保存的子信息的大小,分別提取隱藏的子信息。然后,用找到的足夠份數(shù)的子信息通過密鑰分割技術恢復原始的加密信息,并對加密信息進行解密,得到隱藏信息。

      2 實驗及分析

      算法實現(xiàn)平臺:Microsoft Windows XP sp2,1.5G RAM,Microsoft Visual C++ 6.0。 軟件包括一個分析程序中子程序的大小的模塊,并用序號將子程序標出。實驗選取的隱藏載體文件為CPU-Z.EXE版本為1.5.2.2,其中代碼節(jié)的冗余大小為 3 252 bytes。根據(jù)代碼節(jié)冗余,選取的隱藏文件為CPU-Z的系統(tǒng)配置文件cpuz.ini大小為180 bytes。運行軟件,可以在軟件子程序分析的模塊中得到子程序的序號和大小信息,以及經(jīng)過秘密分割后隱藏文件的大小。根據(jù)處理后隱藏文件cpuz.ini的大小260 bytes,選取了第1、20兩個子程序進行隱藏。輸入密鑰 0120點擊預處理,等預處理完成之后,點擊隱藏信息,然后便可以得到隱藏了信息的CPU-Z.EXE文件。執(zhí)行隱藏了信息的載體程序,程序仍然能正常運行并且功能完整。點擊提取信息得到提取出來的cpuz.ini,將其與原來的 cpuz.ini文件用文件對比軟件WinMerge對比,兩個文件完全一致。

      本方案不是將信息簡單地隱藏到節(jié)末尾的冗余處,而是將信息隱藏在正常的代碼之中,提出的PE信息隱藏方式如下:

      正常代碼…

      隱藏密文

      正常代碼…

      而在其前面和后面的部分都是 PE文件正常的代碼。傳統(tǒng)的將信息隱藏到 PE文件節(jié)后冗余處的方法,隱藏信息后的PE文件如下:

      正常代碼…

      密文…

      00 00 00 00 00 00 00(PE段尾全為零)

      隱藏的信息在代碼段末尾,而在其下的部分為冗余段,全部為零。可以看到用本方案隱藏的信息處于 PE文件代碼之中,而傳統(tǒng)方案僅僅在節(jié)末尾隱藏了數(shù)據(jù)??梢姳痉桨负蛡鹘y(tǒng)方案相比隱藏的數(shù)據(jù)具有更高的隱蔽性,并且選取了多個子程序進行隱藏,因此隱藏的信息具有分散性,而一個載體文件可以有很多的子程序,攻擊者在沒有密鑰的情況下,想找的正確的子程序,難度很大。

      3 結(jié)語

      隨著因特網(wǎng)和計算機的普及,各種各樣的軟件層出不窮,目前,網(wǎng)絡上就存在著大量的PE格式文件,基于PE文件的信息隱藏具有很廣闊的應用前景,隱藏載體多樣化,數(shù)量多、種類多,只要是PE格式的執(zhí)行程序都可以成為隱藏的載體,隱藏后不易被察覺?,F(xiàn)創(chuàng)造性的提出了將PE文件原有代碼進行搬移,而將信息隱藏到正常的PE文件數(shù)據(jù)之中,將隱藏數(shù)據(jù)和PE文件原始數(shù)據(jù)緊密的結(jié)合在了一起,避免了隱蔽信息過于集中的問題,增強了隱藏信息的隱蔽性和安全性。

      [1] 高凌燕,王趾成,易向軍.基于BMP文件信息隱藏技術的探討[J]. 通信技術,2008,41(08):54-56.

      [1] 劉振華,尹萍.信息隱藏技術及其應用[M]. 北京:科學出版社,2002.

      [2] 吳振強,馮紹東,馬建峰.PE文件的信息隱藏方案與實現(xiàn)[J].計算機工程與應用,2005,41(27):148-150.

      [3] 方旺盛,邵利平,張克俊.基于PE文件格式的信息隱藏技術研究[J].微計算機信息,2006,11(3):77-80.

      [4] 端木慶峰,王衍波,張凱澤,等.基于 PE文件資源數(shù)據(jù)的信息隱藏方案[J].計算機工程,2009,35(13):128-133.

      [5] 段鋼.加密與解密[M].第3版.北京:電子工業(yè)出版社,2008:269.

      [6] IRVINE K R. Assembly Language for Intel-Based Computers Fourth Edition[M].北京:電子工業(yè)出版社,2004.

      猜你喜歡
      子程序密鑰代碼
      探索企業(yè)創(chuàng)新密鑰
      密碼系統(tǒng)中密鑰的狀態(tài)與保護*
      創(chuàng)世代碼
      動漫星空(2018年11期)2018-10-26 02:24:02
      創(chuàng)世代碼
      動漫星空(2018年2期)2018-10-26 02:11:00
      創(chuàng)世代碼
      動漫星空(2018年9期)2018-10-26 01:16:48
      創(chuàng)世代碼
      動漫星空(2018年5期)2018-10-26 01:15:02
      一種對稱密鑰的密鑰管理方法及系統(tǒng)
      基于ECC的智能家居密鑰管理機制的實現(xiàn)
      電信科學(2017年6期)2017-07-01 15:45:06
      淺談子程序在數(shù)控車編程中的應用
      子程序在數(shù)控車加工槽中的應用探索
      广州市| 开封市| 当阳市| 寻乌县| 玉龙| 汽车| 瑞丽市| 建始县| 邯郸县| 阿图什市| 梅州市| 清水河县| 尉氏县| 东乌珠穆沁旗| 郓城县| 崇明县| 体育| 高陵县| 泸溪县| 嘉定区| 油尖旺区| 贵溪市| 壤塘县| 青岛市| 元阳县| 郴州市| 阆中市| 庄浪县| 雷山县| 招远市| 屯留县| 揭东县| 崇信县| 丰县| 房产| 赤峰市| 开远市| 湖南省| 义乌市| 民勤县| 广河县|