一種可執(zhí)行文件的保護(hù)方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)的可執(zhí)行文件處理技術(shù),特別涉及一種可執(zhí)行文件的保護(hù)方法及裝置。
【背景技術(shù)】
[0002]隨著計(jì)算機(jī)技術(shù)的發(fā)展,越來(lái)越多的可執(zhí)行文件被編譯出來(lái)以實(shí)現(xiàn)計(jì)算機(jī)的各種應(yīng)用。計(jì)算機(jī)的可執(zhí)行文件由于其數(shù)字化的特征,從問(wèn)世以來(lái)就一直遭受著盜版的困擾。由于盜版的存在,不僅給可執(zhí)行文件的開(kāi)發(fā)者造成了巨大的損失,也極大地阻礙了整個(gè)行業(yè)的發(fā)展。目前,防止盜版,對(duì)可執(zhí)行文件進(jìn)行保護(hù)的主要方法為加殼技術(shù)。加殼技術(shù)的全稱是可執(zhí)行文件資源壓縮,是保護(hù)可執(zhí)行文件的常用手段,加殼過(guò)的可執(zhí)行文件可以直接運(yùn)行,但是不能查看源代碼,要經(jīng)過(guò)脫殼技術(shù)才可以查看源代碼。加殼技術(shù)常用的方式是在二進(jìn)制的可執(zhí)行文件中植入一段代碼,在運(yùn)行的時(shí)候該段代碼優(yōu)先取得可執(zhí)行文件的控制權(quán),阻止對(duì)可執(zhí)行文件的代碼反匯編分析或動(dòng)態(tài)分析,保護(hù)可執(zhí)行文件的版權(quán),防止其他程序?qū)蓤?zhí)行文件的破解。
[0003]當(dāng)對(duì)可執(zhí)行文件進(jìn)行加殼時(shí),該可執(zhí)行文件可能已經(jīng)被加殼,這時(shí)就可能導(dǎo)致對(duì)可執(zhí)行文件的加殼失敗或者即使加殼成功,也會(huì)導(dǎo)致再次加殼后的可執(zhí)行文件無(wú)法運(yùn)行。因此,如何對(duì)已經(jīng)加殼的可執(zhí)行文件進(jìn)行再次加殼成為了一個(gè)亟待解決的問(wèn)題。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明實(shí)施例提供一種可執(zhí)行文件的保護(hù)方法,該方法能夠?qū)σ鸭託さ目蓤?zhí)行文件進(jìn)行再次加殼。
[0005]本發(fā)明實(shí)施例還提供一種可執(zhí)行文件的保護(hù)裝置,該裝置能夠?qū)σ鸭託さ目蓤?zhí)行文件進(jìn)行再次加殼。
[0006]根據(jù)上述目的,本發(fā)明是這樣實(shí)現(xiàn)的:
[0007]一種可執(zhí)行文件的保護(hù)方法,該方法包括:
[0008]判斷可執(zhí)行文件已經(jīng)被加殼處理;
[0009]根據(jù)可執(zhí)行文件已經(jīng)被加殼所采用的加殼方式對(duì)應(yīng)的脫殼方式,對(duì)可執(zhí)行文件進(jìn)行脫殼;
[0010]根據(jù)設(shè)置的加殼方式,對(duì)可執(zhí)行文件進(jìn)行加殼。
[0011]當(dāng)判斷可執(zhí)行文件未被加殼處理時(shí),該方法還包括:根據(jù)設(shè)置的加殼方式,對(duì)可執(zhí)行文件進(jìn)行加殼。
[0012]所述判斷可執(zhí)行文件已經(jīng)被加殼處理為:
[0013]對(duì)可執(zhí)行文件的結(jié)構(gòu)信息進(jìn)行分析,以確定被加殼處理。
[0014]所述對(duì)可執(zhí)行文件的結(jié)構(gòu)信息進(jìn)行分析為:分析可執(zhí)行文件的文件頭信息、區(qū)段信息、輸入表信息、入口點(diǎn)信息、重定位信息和資源信息中的一種或多種組合。
[0015]所述根據(jù)可執(zhí)行文件已經(jīng)被加殼所采用的加殼方式對(duì)應(yīng)的脫殼方式,對(duì)可執(zhí)行文件進(jìn)行脫殼為:
[0016]根據(jù)可執(zhí)行文件已經(jīng)被加殼所采用的加殼方式,尋找可執(zhí)行文件的原始入口點(diǎn)信息后,將可執(zhí)行文件的代碼和對(duì)應(yīng)的數(shù)據(jù)進(jìn)行轉(zhuǎn)存內(nèi)存映像,然后查找可執(zhí)行文件的輸入表信息,對(duì)輸入表信息進(jìn)行修改,修改轉(zhuǎn)存內(nèi)存映像中的輸入表信息,保存。
[0017]一種可執(zhí)行文件的保護(hù)裝置,包括:分析模塊、判定模塊、脫殼模塊及保護(hù)模塊,其中,
[0018]分析模塊,用于對(duì)可執(zhí)行文件的結(jié)構(gòu)信息進(jìn)行分析;
[0019]判定模塊,用于根據(jù)分析模塊的分析結(jié)果判定可執(zhí)行文件被加殼處理,將可執(zhí)行文件發(fā)送給脫殼模塊處理;
[0020]脫殼模塊,用于根據(jù)可執(zhí)行文件已經(jīng)被加殼所采用的加殼方式對(duì)應(yīng)的脫殼方式,對(duì)可執(zhí)行文件進(jìn)行脫殼后,將可執(zhí)行文件發(fā)送給保護(hù)模塊處理;
[0021]保護(hù)模塊,用于根據(jù)設(shè)置的加殼方式,對(duì)可執(zhí)行文件進(jìn)行加殼。
[0022]所述判定模塊,還用于根據(jù)分析模塊的分析結(jié)果判定可執(zhí)行文件未被加殼處理,直接將可執(zhí)行文件發(fā)送給保護(hù)模塊處理。
[0023]所述分析模塊,還用于所述對(duì)可執(zhí)行文件的結(jié)構(gòu)信息進(jìn)行分析為:分析可執(zhí)行文件的文件頭信息、區(qū)段信息、輸入表信息、入□點(diǎn)信息、重定位信息和資源信息中的一種或多種組合。
[0024]脫殼模塊,還用于所述根據(jù)可執(zhí)行文件已經(jīng)被加殼所采用的加殼方式對(duì)應(yīng)的脫殼方式,對(duì)可執(zhí)行文件進(jìn)行脫殼為:根據(jù)可執(zhí)行文件已經(jīng)被加殼所采用的加殼方式,尋找可執(zhí)行文件的原始入口點(diǎn)信息后,將可執(zhí)行文件的代碼和對(duì)應(yīng)的數(shù)據(jù)進(jìn)行轉(zhuǎn)存內(nèi)存映像,然后查找可執(zhí)行文件的輸入表信息,對(duì)輸入表信息進(jìn)行修改,修改轉(zhuǎn)存內(nèi)存映像中的輸入表信息,保存。
[0025]由上述方案可以看出,本發(fā)明實(shí)施例當(dāng)要對(duì)可執(zhí)行文件進(jìn)行加殼時(shí),首先分析可執(zhí)行文件是否已經(jīng)被加殼,如果是,則對(duì)該可執(zhí)行文件進(jìn)行脫殼后,再對(duì)脫殼后的可執(zhí)行文件進(jìn)行加殼。這樣,就可以實(shí)現(xiàn)對(duì)已加殼的可執(zhí)行文件進(jìn)行再次加殼,保護(hù)可執(zhí)行文件。
【附圖說(shuō)明】
[0026]圖1為本發(fā)明實(shí)施例提供的可執(zhí)行文件的保護(hù)方法流程圖;
[0027]圖2為本發(fā)明實(shí)施例提供的COFF文件格式的PE文件結(jié)構(gòu)示意圖;
[0028]圖3為本發(fā)明實(shí)施例提供的可執(zhí)行文件的保護(hù)裝置結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0029]為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。
[0030]在對(duì)可執(zhí)行文件進(jìn)行處理過(guò)程中,用戶常常需要使用自己的加殼技術(shù)對(duì)可執(zhí)行文件進(jìn)行加殼。但是,要處理的可執(zhí)行文件可能已經(jīng)被加殼,這時(shí)用戶就無(wú)法按照自己的方式對(duì)已經(jīng)加殼過(guò)的可執(zhí)行文件進(jìn)行再次加殼處理,以對(duì)可執(zhí)行文件進(jìn)行保護(hù)。
[0031]因此,本發(fā)明實(shí)施例當(dāng)要對(duì)可執(zhí)行文件進(jìn)行加殼時(shí),首先分析可執(zhí)行文件是否已經(jīng)被加殼,如果是,則對(duì)該可執(zhí)行文件進(jìn)行脫殼后,再對(duì)脫殼后的可執(zhí)行文件進(jìn)行加殼。這樣,就可以實(shí)現(xiàn)對(duì)已加殼的可執(zhí)行文件進(jìn)行再次加殼,保護(hù)可執(zhí)行文件。
[0032]這樣,就可以使得可執(zhí)行文件按照用戶設(shè)定的加殼方式進(jìn)行保護(hù),增加了保護(hù)可執(zhí)行文件的靈活性,增加了再次加殼后的可執(zhí)行文件的反編譯和分析的難度,大大提高了經(jīng)過(guò)處理的可執(zhí)行文件的安全性。
[0033]圖1為本發(fā)明實(shí)施例提供的可執(zhí)行文件的保護(hù)方法流程圖,其具體步驟為:
[0034]步驟101、判斷可執(zhí)行文件是否已經(jīng)被加殼處理,如果是,執(zhí)行步驟103 ;如果否,執(zhí)行步驟102 ;
[0035]在本步驟中,對(duì)可執(zhí)行文件的結(jié)構(gòu)信息進(jìn)行分析,以確定是否被加殼處理;
[0036]步驟102、根據(jù)設(shè)置的加殼方式,對(duì)可執(zhí)行文件進(jìn)行加殼;
[0037]步驟103、根據(jù)可執(zhí)行文件已經(jīng)被加殼所采用的加殼方式對(duì)應(yīng)的脫殼方式,對(duì)可執(zhí)行文件進(jìn)行脫殼;
[0038]步驟104、根據(jù)設(shè)置的加殼方式,對(duì)可執(zhí)行文件進(jìn)行加殼。
[0039]在本發(fā)明實(shí)施例中,已經(jīng)被加殼的可執(zhí)行文件再次被加殼時(shí)很有可能失敗或者即使加殼成功,也會(huì)導(dǎo)致再次加殼后的可執(zhí)行文件無(wú)法運(yùn)行,比如加殼后的可執(zhí)行文件的區(qū)段表空間不足以再增加一個(gè)殼段的區(qū)段表,再次加殼就會(huì)失??;或者已經(jīng)加殼的代碼中有自校驗(yàn)功能,再次加殼后的可執(zhí)行文件運(yùn)行時(shí)就會(huì)失敗等。因此,本發(fā)明需要對(duì)加殼的可執(zhí)行文件進(jìn)行判斷,確定是否為加殼后,再進(jìn)行處理。
[0040]在本發(fā)明實(shí)施例中,所述對(duì)可執(zhí)行文件的結(jié)構(gòu)信息進(jìn)行分析為:分析可執(zhí)行文件的文件頭信息、區(qū)段信息、輸入表信息、入口點(diǎn)信息、重定位信息和資源信息中的一種或多種組合,從而確定是否被加殼處理。
[0041]在本發(fā)明實(shí)施例中,所述根據(jù)可執(zhí)行文件已經(jīng)被加殼所采用的加殼方式對(duì)應(yīng)的脫殼方式,對(duì)可執(zhí)行文件進(jìn)行脫殼為:
[0042]根據(jù)可執(zhí)行文件已經(jīng)被加殼所采用的加殼方式,尋找可執(zhí)行文件的原始入口點(diǎn)信息后,將可執(zhí)行文件的代碼和對(duì)應(yīng)的數(shù)據(jù)等進(jìn)行轉(zhuǎn)存內(nèi)存映像,然后查找可執(zhí)行文件的輸入表信息,對(duì)輸入表信息進(jìn)行修改,修改轉(zhuǎn)存內(nèi)存映像中的輸入表信息,保存。
[0043]舉一個(gè)具體例子對(duì)本發(fā)明實(shí)施例進(jìn)行詳細(xì)說(shuō)明。
[0044]以微軟視窗系統(tǒng)下的32位可移植的執(zhí)行體(PE)文件為例。
[0045]微軟視窗系統(tǒng)下的PE文件格式是通用對(duì)象(COFF,Common Object File Format)文件格式