999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

PE文件隱型加殼技術(shù)的研究與實(shí)現(xiàn)

2009-01-01 00:00:00徐向陽解慶春

(1.湖南大學(xué) 計(jì)算機(jī)與通信學(xué)院,長沙 410082;2.中國科學(xué)院 近代物理研究所,蘭州 730000)

摘 要:

通過對PE(portable executable)文件格式的了解,編寫PE分析工具對文件內(nèi)部結(jié)構(gòu)進(jìn)行分析。詳細(xì)介紹了對PE可執(zhí)行文件加殼的全過程,在此過程中巧妙地使用MD5、CRC32等成熟的hash算法及防API斷點(diǎn)跟蹤等多種反破解技術(shù),并采用自動(dòng)隱藏加密方案,大大地提高了軟件的保護(hù)力度。

關(guān)鍵詞:可移植的可執(zhí)行文件; 加殼; 哈希算法; 反跟蹤

中圖分類號:TP309+.7 文獻(xiàn)標(biāo)志碼:A

文章編號:10013695(2009)01033702

Research and implementation of PE file stealthy shell technique

XU Xiangyang1, XIE Qingchun1,2, LIUYong2, YUDi1, LIUYin1

(1.College of Computer Communication, Hunan University, Changsha 410082, China; 2.Institute of Modern Physics, Chinese Academy of Sciences, Lanzhou 730000, China)

Abstract:Wrote an analysis tool at the base of understanding the portable executable file format.It presented the whole processes of the encrypting on the PE file in detail.In these processes,used variety anticrack techniques such as MD5, CRC32 algorithms of mature hash as well as antitrack from the interrupt of API functions, and also used some methods of automatic hiding and encrypting.The result is that the protection strength of the software is enhanced.

Key words:PE file; shell; hash algorithm; antitrack



眾所周知,當(dāng)今盜版軟件問題很嚴(yán)重,侵犯了軟件開發(fā)者的知識產(chǎn)權(quán),對軟件產(chǎn)業(yè)的健康發(fā)展造成了不利的影響。為了防止軟件被非法復(fù)制、修改,除了用法律對產(chǎn)權(quán)進(jìn)行保護(hù)之外也需要對產(chǎn)品本身從技術(shù)上進(jìn)行保護(hù)。軟件加殼技術(shù)是目前保護(hù)知識產(chǎn)權(quán)的一種有效方法。有軟件加殼就有脫殼,有時(shí)候越有名的加密技術(shù)反而會(huì)更不安全,因?yàn)橐粋€(gè)軟件的加密程度越強(qiáng),就會(huì)引來更多人對它進(jìn)行研究,使其被破解的機(jī)會(huì)就越大。所以說軟件開發(fā)者有必要根據(jù)自己需要,建立模型、提出自己的加殼保護(hù)方案,以達(dá)到軟件在生命周期內(nèi)被保護(hù)的目的。本文研究對象就是Win 32平臺(tái)下的PE文件,筆者綜合應(yīng)用了當(dāng)今優(yōu)秀的加殼技術(shù),如比較成熟的密碼學(xué)算法和多種反破解方法,結(jié)合自己提出的獨(dú)特的隱形加密方案實(shí)現(xiàn),大大提高了軟件的保護(hù)力度。

1 PE文件結(jié)構(gòu)

PE是Win 32環(huán)境自身所帶的執(zhí)行文件格式。通過對PE的深刻了解,根據(jù)對PE各個(gè)部分之間的聯(lián)系,得到PE文件總體框架結(jié)構(gòu)圖[1,2],如圖1所示。PE各個(gè)模塊的詳細(xì)解釋參見文獻(xiàn)[1]。可以將一個(gè)PE文件看成一本書,將每個(gè)section看成書的內(nèi)容。這本書有兩個(gè)目錄,第一個(gè)目錄是塊表,有塊表就可以找到相應(yīng)的塊;第二個(gè)目錄則是data directory,這是一個(gè)類似于索引的目錄,利用它可以很快找到相應(yīng)的數(shù)據(jù)。要明確一點(diǎn):一個(gè)塊表只可以定位一個(gè)相應(yīng)的塊,而幾個(gè)數(shù)據(jù)目錄可以指向同一個(gè)塊。

2 自動(dòng)隱藏加密方案的設(shè)計(jì)和實(shí)現(xiàn) 

加殼是加密的一種,本方案主要是介紹密碼型加殼,這種加殼方案一般應(yīng)用在共享軟件的注冊、對重要執(zhí)行文件設(shè)置特定權(quán)限等領(lǐng)域。在運(yùn)行帶殼的程序時(shí),首先會(huì)提示用戶輸入用戶名、口令或者注冊碼。輸入指令正確,外殼程序?qū)?nèi)部加密的塊表等還原之后定位到原程序并執(zhí)行。如果破解者強(qiáng)行更改密碼檢測指令,會(huì)導(dǎo)致程序不正確地執(zhí)行。因?yàn)楸患用艿拇a并沒有用相應(yīng)的口令進(jìn)行解碼,塊表沒有被還原,指令就不能準(zhǔn)確地定位。

本文設(shè)計(jì)的軟件加殼方案主要由三部分組成,即PE分析工具、裝配程序設(shè)計(jì)和外殼程序設(shè)計(jì)。其中后面兩部分是整個(gè)程序的核心[3]。

21 PE文件分析工具的設(shè)計(jì)和實(shí)現(xiàn)

在對Window的PE文件格式了解的基礎(chǔ)上,可以根據(jù)PE文件的結(jié)構(gòu)寫出分析工具。該分析工具可以顯示加殼前后PE文件的變化,可進(jìn)一步了解加殼原理,并檢驗(yàn)加殼成功與否。具體步驟請查看分析工具編寫及實(shí)現(xiàn)[4]。 

22 裝配程序設(shè)計(jì)

首先裝配程序就是對原程序在外殼程序嵌入到原程序之前,對原程序文件作一些記錄和塊的加密操作。其基本流程如圖2所示。

1)文件數(shù)據(jù)的讀入 文件的讀入方式采用內(nèi)存映射文件的方式。如果文件被分析工具分析過,則可知程序已載入內(nèi)存,直接讀取。如果沒有經(jīng)過分析工具分析過,則需要先把文件載入內(nèi)存。在文件讀入過程中要注意兩點(diǎn):a)使用內(nèi)存影射時(shí)對文件設(shè)置為可讀、可寫的權(quán)限;b)文件映射時(shí)映射的內(nèi)存要比磁盤上的文件要大一些,以便在文件的尾部添加可執(zhí)行的代碼。 

2)判斷文件是否是PEEXE文件 可直接調(diào)用PE分析工具中的文件格式的判斷模塊來處理。

3)自動(dòng)隱藏加密 加殼文件的驗(yàn)證密碼由用戶輸入獲得,也應(yīng)放在殼中,但是不能以明文存放。本文采用MD5算法將密碼加密。為了表述簡單,用變量HashPassword記錄存儲(chǔ)的固定長度的MD5(用戶名密碼)作為hash值。當(dāng)然為了防止靜態(tài)分析,可以用一些不太明顯的名字記錄此hash值,如abc。由于采用的是hash算法,即使得到了密文,也不能夠根據(jù)密文反推出明文,保證了密碼的安全性。原程序的入口點(diǎn),即PE文件首部的AddressOfEntryPoint字段的值必須要保存。入口點(diǎn)可以通過讀取PE文件結(jié)構(gòu)的方法獲取,入口點(diǎn)也應(yīng)保存在外殼中。

為了更有效地防止動(dòng)態(tài)跟蹤。對程序的入口點(diǎn)進(jìn)行加密。采取了對HashPassword二次利用的方法,利用VC++的一個(gè)函數(shù)CString.SubString(int a,int b)取128 bit hash值的一部分(a,b值可以在界面自己設(shè)置)來當(dāng)做第二次加密的密鑰。過程偽代碼如下:

密文=Encrypt(入口點(diǎn),HashPassword.substring(a,b));

//用輸入的密碼作為密鑰對程序的入口點(diǎn)進(jìn)行加密

入口點(diǎn)=Decrypt(密文,HashPassword.substring(a,b));

//當(dāng)輸入的密碼正確時(shí),用密碼作為密鑰對密文進(jìn)行解密

這里的加密算法選用一般的對稱加密。在殼程序中,直接使用語句“Jump to Decrypt(密文,輸入密碼(a,b))”來代替“Jump to Entrypoint”這條指向真正入口點(diǎn)語句的調(diào)用。由于在程序中沒有明文的密鑰,該方法稱之為自動(dòng)隱藏加密。

該方法實(shí)現(xiàn)一個(gè)密碼執(zhí)行兩次加密,更有效地防止破解者在找不到用戶名和密碼的情況下,應(yīng)用修改跳轉(zhuǎn)指令而獲得成功的可能性。而這樣入口點(diǎn)和密碼緊密地結(jié)合在一起,無論修改哪一個(gè)值,程序都無法正常地運(yùn)行,大大地增強(qiáng)了加密強(qiáng)度。

4)對導(dǎo)入表等所在的塊(一般為.text)進(jìn)行加密 對塊加密的目的是為了防止通過分析工具查找到程序入口點(diǎn)并對其直接修改,有效地防止程序被非法修改。

5)添加新的section并對塊表進(jìn)行修改、對齊 把外殼組織為一個(gè)塊的形式且新塊要考慮文件對齊。

6)修改文件頭信息 原有的文件頭信息需要保存在外殼程序當(dāng)中,如要保存原來程序入口的RVA,設(shè)置新的入口地址,修改NumberOfSections、SizeOfImage等。

7)構(gòu)造外殼程序的導(dǎo)入表 外殼程序是被裝配上去的,而不是由程序直接編譯鏈接的,相應(yīng)的導(dǎo)入表不會(huì)自己生成。所以外殼程序的導(dǎo)入表就必須人工構(gòu)造。可以在外殼程序中使用任何API調(diào)用,以豐富外殼程序的功能[3]。

8)調(diào)用CRC32算法 將頭信息和外殼程序?qū)懭肽繕?biāo)文件。

3 外殼程序設(shè)計(jì)

外殼程序就是加密軟件將一段加密代碼附加到執(zhí)行程序上,并把程序入口指向附加的代碼中。但被加密的程序裝入內(nèi)存之后,附加代碼首先執(zhí)行。具體的外殼程序的執(zhí)行過程如圖3所示。 

1)CRC校驗(yàn) 最后外殼程序要執(zhí)行CRC32,計(jì)算文件的校驗(yàn)值,進(jìn)一步來檢查、判斷程序是否被修改過。如果為否,程序按流程圖順序執(zhí)行。

2)反跟蹤 檢查內(nèi)存中是否存在靜態(tài)分析技術(shù)代碼指令和動(dòng)態(tài)調(diào)試軟件的跟蹤。根據(jù)當(dāng)今cracker應(yīng)用較多的破解技術(shù),本文采用了三種方法。該技術(shù)在程序加殼中起著舉足輕重的作用,主要包括防靜態(tài)匯編、防調(diào)試器、防監(jiān)視等[5]。

3)合法性驗(yàn)證 外殼程序必須對密碼是否正確進(jìn)行驗(yàn)證,由于密碼已經(jīng)用MD5加密后放入殼中,外殼程序也必須對輸入的密碼進(jìn)行MD5的hash運(yùn)算。如果經(jīng)hash后的值與殼中保存的密文一致,那么說明密碼正確,加殼后程序會(huì)正常執(zhí)行;否則,程序直接退出。

4)解密還原塊 通過合法性檢查后,現(xiàn)在要做的就是對源程序的一些塊進(jìn)行解密還原。裝配時(shí)已經(jīng)保存了被加密的塊數(shù)、塊的長度起始RVA地址。由被加密塊的RVA地址就可以找到該塊的密文在內(nèi)存中的首址。再使用裝配加密時(shí)的口令并根據(jù)保存的該塊的長度進(jìn)行解密。

5)轉(zhuǎn)入源程序執(zhí)行 在完成了對源程序一些關(guān)鍵塊的解密還原和import表的人工填寫后,源程序已經(jīng)完全還原。將保存的源程序的入口RVA加上裝入基址,就是源程序的實(shí)際入口地址,使用一條“Jump to Decrypt(密文,輸入密碼(a,b))+ImageBase;”指令跳入源程序執(zhí)行。

4 實(shí)驗(yàn)結(jié)果

實(shí)驗(yàn)用的系統(tǒng)是Windows XP,可執(zhí)行文件選用的是操作系統(tǒng)自帶的記事本程序notepad.exe。

正確性測試:

首先打開要加殼的文件,運(yùn)行PE分析工具模塊,圖4給出文件的相關(guān)信息。圖5(a)顯示了文件加殼之前塊表的信息;(b)顯示了文件加殼之后塊表的信息,發(fā)現(xiàn)文件多了一個(gè)新的塊.Xy(是自定義的新塊名字),說明加塊成功。執(zhí)行加殼后的程序,除多了一道彈出對話框讓用戶輸入密碼,檢驗(yàn)口令正確與否流程之外,幾乎與加殼前沒有區(qū)別。說明外殼已完整地嵌入到源程序,驗(yàn)證了隱形加殼方法編寫程序的正確性。

5 結(jié)束語

本文對PE文件結(jié)構(gòu)及Windows底層運(yùn)作機(jī)制進(jìn)行了深刻剖析,通過自己設(shè)計(jì)的自動(dòng)隱藏的加密方案即實(shí)現(xiàn)用密碼Hash值對程序入口點(diǎn)加密,防止分析工具直接修改跳轉(zhuǎn)指令來達(dá)到破解的目的,大大提高了程序的反靜態(tài)分析能力。還巧妙地使用MD5、CRC32等成熟的hash算法及防API斷點(diǎn)跟蹤等多種反破解技術(shù),大大提高了加殼軟件的反跟蹤能力。

參考文獻(xiàn):

[1]Microsoft portable executable and common object file format specification revision 6.0[K].USA:Microsoft Corporation,1999.

[2]劉曉冬.軟件加殼技術(shù)的研究與實(shí)現(xiàn)[D].沈陽:沈陽工業(yè)大學(xué),2006.

[3]張建明.PE可執(zhí)行文件通用加密工具的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2004(8):2124.

[4]看雪學(xué)院.軟件加密技術(shù)內(nèi)幕[M].北京:電子工業(yè)出版社,2004.

[5]SMOKINGROOM.Delphi程序編程語言之常用反跟蹤技術(shù) [EB/OL].(20050412)[20060815].http://industry.ccidnet.com/art/1077/20051202/809153_1.html.

[6]段鋼.加密與解密[M].2版.北京:電子工業(yè)出版社,2003.

主站蜘蛛池模板: 999精品视频在线| 99热国产这里只有精品无卡顿"| 欧美h在线观看| 久久久久人妻精品一区三寸蜜桃| 国产网友愉拍精品视频| 免费99精品国产自在现线| 在线欧美一区| AV片亚洲国产男人的天堂| 青青操国产视频| 多人乱p欧美在线观看| 久久永久视频| 亚洲无码高清一区二区| 一区二区三区国产| 欧美精品亚洲二区| 一级毛片中文字幕| 国产亚洲欧美日韩在线一区| 久久综合激情网| 国产一区二区在线视频观看| 午夜福利无码一区二区| 91精品久久久无码中文字幕vr| 波多野吉衣一区二区三区av| 中文字幕在线永久在线视频2020| 日韩无码黄色| 99ri精品视频在线观看播放| 黄色网站不卡无码| 国产美女视频黄a视频全免费网站| 人妻精品久久无码区| 99热这里只有精品在线播放| 日本免费福利视频| 手机成人午夜在线视频| a级高清毛片| m男亚洲一区中文字幕| 日韩黄色精品| 爱色欧美亚洲综合图区| 精品少妇三级亚洲| 天堂在线www网亚洲| 亚洲三级a| 久久伊人久久亚洲综合| 国产三级毛片| 麻豆精选在线| 看国产一级毛片| 毛片大全免费观看| 无码专区国产精品第一页| 久久国产拍爱| 青草视频在线观看国产| www精品久久| 波多野结衣第一页| 亚洲色无码专线精品观看| 亚洲综合亚洲国产尤物| 免费a在线观看播放| 凹凸国产熟女精品视频| 色国产视频| 精品色综合| 亚洲性网站| 亚洲欧美在线综合图区| 最新亚洲人成无码网站欣赏网| 国产成熟女人性满足视频| 免费A级毛片无码无遮挡| 亚洲欧洲自拍拍偷午夜色| 欧美成人第一页| 欧美日韩亚洲国产| 国产91熟女高潮一区二区| 国产欧美视频在线观看| 国产日产欧美精品| 波多野结衣一区二区三区四区视频| 这里只有精品在线| 伊人激情综合| 国产在线观看第二页| 欧美a在线看| 热久久这里是精品6免费观看| 国产精品女在线观看| 免费无码AV片在线观看中文| 大香网伊人久久综合网2020| 亚洲第一黄色网址| 久久亚洲黄色视频| 日韩无码精品人妻| 国产又色又刺激高潮免费看| 色婷婷在线影院| 一区二区在线视频免费观看| 波多野结衣在线一区二区| 高清久久精品亚洲日韩Av| 免费国产在线精品一区 |