本發(fā)明實(shí)施例涉及信息安全領(lǐng)域,尤其涉及一種指令重組方法和裝置。
背景技術(shù):
花指令是對(duì)抗反匯編的有效手段之一,正常代碼添加了花指令之后,可以破壞靜態(tài)反匯編的過程,使反匯編的結(jié)果出現(xiàn)錯(cuò)誤。錯(cuò)誤的反匯編結(jié)果會(huì)造成破解者的分析工作大量增加,進(jìn)而使之不能理解程序的結(jié)構(gòu)和算法,也就很難破解程序,從而達(dá)到病毒或軟件保護(hù)的目的。
傳統(tǒng)的花指令生成過程中,設(shè)計(jì)者首先會(huì)找到某段匯編空閑的寄存器,并那個(gè)對(duì)該寄存器添加花指令。破解者在對(duì)花指令的破解過程中,僅需該寄存器中的花指令抹去,即可輕松完成破解程序的任務(wù),破解難度低下。
傳統(tǒng)方法生成的花指令都是由一些無效指令構(gòu)成,與程序中的上下文沒有關(guān)聯(lián),因此直接抹去也不會(huì)影響到程序的正常運(yùn)行,沒有對(duì)程序起到較好的保護(hù)作用。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種指令重組方法和裝置,以解決傳統(tǒng)方法生成的花指令沒有對(duì)程序起到較好的保護(hù)作用的問題。
第一方面,本發(fā)明實(shí)施例提供了一種指令重組方法,包括:
從初始指令中提取至少一條有效指令;
對(duì)所述有效指令進(jìn)行等效變形得到第一等效指令;
將所述第一等效指令替換所述有效指令得到第一重組指令;
向所述第一重組指令中添加至少一條花指令得到第二重組指令。
進(jìn)一步的,所述向所述第一重組指令中添加至少一條花指令得到第二重組指令之后,還包括:
從所述第二重組指令中提取一條指令作為待處理指令;
對(duì)所述待處理指令進(jìn)行等效變換得到第二等效指令;
將所述第二等效指令替換所述第二重組指令中提取的有效指令得到第三重組指令。
進(jìn)一步的,所述向所述第一重組指令中添加至少一條花指令得到第二重組指令,包括:
將所述花指令拆分為至少兩個(gè)花指令片段;
確定所述第一重組指令中的指令數(shù)量,根據(jù)所述指令數(shù)量確定所述花指令片段的添加位置;
根據(jù)所述添加位置將所述花指令片段添加到所述第一重組指令中得到第二重組指令。
進(jìn)一步的,所述等效變形操作包括指令交換操作、取地址操作、取反操作和指令壓縮操作。
第二方面,本發(fā)明實(shí)施例還提供了一種指令重組裝置,該裝置包括:
有效指令提取模塊,用于從初始指令中提取至少一條有效指令;
等效變形模塊,對(duì)所述有效指令進(jìn)行等效變形得到第一等效指令;
指令替換模塊,用于將所述第一等效指令替換所述有效指令得到第一重組指令;
花指令添加模塊,用于向所述第一重組指令中添加至少一條花指令得到第二重組指令。
進(jìn)一步的,指令重組裝置還包括:
指令二次提取模塊,用于從所述第二重組指令中提取一條指令作為待處理指令;
二次等效變換模塊,用于對(duì)所述待處理指令中提取的有效指令進(jìn)行等效變換得到第二等效指令;
二次替換模塊,用于將所述第二等效指令替換所述第二重組指令中提取的有效指令得到第三重組指令。
進(jìn)一步的,花指令添加模塊包括:
花指令拆分單元,用于將所述花指令拆分為至少兩個(gè)花指令片段;
指令添加位置確定單元,用于確定所述第一重組指令中的指令數(shù)量,根據(jù)所述指令數(shù)量確定所述花指令片段的添加位置;
指令添加單元,用于根據(jù)所述添加位置將所述花指令片段添加到所述第一重組指令中得到第二重組指令。
進(jìn)一步的,所述等效變形操作包括指令交換操作、取地址操作、取反操作和指令壓縮操作。
本發(fā)明實(shí)施例通過對(duì)軟件程序中的有效指令進(jìn)行等效變形操作,并添加花指令進(jìn)而完成指令重組操作,以解決傳統(tǒng)方法因容易被抹去而造成沒有對(duì)程序起到較好的保護(hù)作用的問題,進(jìn)而生成比較復(fù)雜的指令片段,在不影響程序正常運(yùn)行效率的前提下增加了破解難度,對(duì)程序起到更好的保護(hù)作用。
附圖說明
圖1是本發(fā)明實(shí)施例一中的一種指令重組方法流程圖;
圖2是本發(fā)明實(shí)施例二中的一種指令重組方法流程圖;
圖3是本發(fā)明實(shí)施例三中的一種指令重組方法的優(yōu)選實(shí)施方式的流程圖;
圖4是本發(fā)明實(shí)施例四中的一種指令重組裝置結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明??梢岳斫獾氖?,此處所描述的具體實(shí)施例僅僅用于解釋本發(fā)明,而非對(duì)本發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部結(jié)構(gòu)。
實(shí)施例一
圖1是本發(fā)明實(shí)施例一中的一種指令重組方法流程圖,本實(shí)施例可適用于花指令自動(dòng)生成的情況,該方法可以由一種指令重組裝置來執(zhí)行,該裝置可以由軟件和/或硬件的方式來實(shí)現(xiàn)。
現(xiàn)有技術(shù)中計(jì)算設(shè)備的系統(tǒng)包括:用戶界面層、應(yīng)用層、操作系統(tǒng)內(nèi)核層、硬件映射層、和硬件層。
其中,用戶界面層是用戶與設(shè)備之間的接口,用戶通過該層與設(shè)備(即設(shè)備的其他層次,例如應(yīng)用層進(jìn)行交互。應(yīng)用層指應(yīng)用軟件層。操作系統(tǒng)內(nèi)核層是一種基于軟件的邏輯層,一般來講是由軟件數(shù)據(jù)和軟件代碼組成,相比于界面層和應(yīng)用層,操作系統(tǒng)內(nèi)核層的代碼擁有更高的權(quán)限,可以對(duì)計(jì)算機(jī)系統(tǒng)中的各種軟硬件資源進(jìn)行完整的操作。
硬件映射層是一種基于軟件的邏輯層,它一般工作在操作系統(tǒng)內(nèi)核層,擁有與內(nèi)核層相同的權(quán)限。硬件映射層主要是為了解決將不同類型的硬件的操作模式映射為一種統(tǒng)一的上層接口,向上屏蔽硬件的特殊性。一般來說,硬件映射層主要被操作系統(tǒng)內(nèi)核層使用,來完成對(duì)各種硬件的操作。硬件層是指構(gòu)成計(jì)算機(jī)系統(tǒng)的所有硬件部件。
本實(shí)施例描述的方法可用于保護(hù)上述計(jì)算設(shè)備的數(shù)據(jù)安全,運(yùn)用于硬件映射層與硬件層間的信息交互,如圖1所示,該方法包括:
s110、從初始指令中提取至少一條有效指令。
其中,初始指令為運(yùn)行程序中的指令流,可以包括多條指令,有效指令可以是初始指令中的任意一條指令,有效指令用于等效變換生成等效指令片段,進(jìn)而對(duì)抗破解者對(duì)軟件程序的反匯編操作。
本方法可以由mips處理器或基于arm架構(gòu)的處理器上執(zhí)行。所述方法可以是運(yùn)行軟件程序過程中調(diào)度每一條有效指令前,對(duì)每一條有效指令執(zhí)行獲取和后續(xù)操作。
s120、對(duì)所述有效指令進(jìn)行等效變形得到第一等效指令。
其中,所述等效變形操作用于對(duì)有效指令。經(jīng)過變換后得到的第一有效指令的運(yùn)行結(jié)果效指令的運(yùn)行結(jié)果相同。
進(jìn)一步的,第一有效指令中的數(shù)量越多,對(duì)軟件程序的保護(hù)度越強(qiáng),但是成花指令的數(shù)量增加也會(huì)導(dǎo)致軟件程序的運(yùn)行數(shù)據(jù)量增大,運(yùn)行效率減弱,因此,有效指令的獲取數(shù)量應(yīng)根據(jù)軟件程序的保護(hù)程度和運(yùn)行效率綜合考慮。
具體的,等效變形操作包括指令交換操作、取地址操作、取反操作和指令壓縮操作等。
指令交換操作用于有效指令中全部字節(jié)或者半字節(jié)的交換。取地址操作用于獲取有效指令的存儲(chǔ)地址。取反操作用于對(duì)有效指令所對(duì)應(yīng)二進(jìn)制數(shù)的取反運(yùn)算。
示例性的,當(dāng)有效指令為:pushebp,表示將ebp壓入棧堆空間。
經(jīng)過指令等效變換操作后得到的第一有效指令為:
xchgreg_x1,ebp
leaesp,[esp-4]
mov[esp],reg_x1
s130、將所述第一等效指令替換所述有效指令得到第一重組指令。
第一等效指令獲取完成后,可以使用第一等效指令對(duì)初始指令中的有效指令進(jìn)行替換,進(jìn)而與初始指令中除有效指令外的其他指令組合形成第一重組指令。
s140、向所述第一重組指令中添加至少一條花指令得到第二重組指令。
花指令由設(shè)計(jì)者特別構(gòu)思,希望使反匯編的時(shí)候出錯(cuò),讓破解者無法清楚正確地反匯編程序的內(nèi)容,迷失方向。
本實(shí)施例中,花指令的數(shù)量可以是一條,也可以是多條。相應(yīng)的,花指令的數(shù)量越多,對(duì)軟件程序的保護(hù)度越強(qiáng),但是成花指令的數(shù)量增加也會(huì)導(dǎo)致軟件程序的運(yùn)行數(shù)據(jù)量增大,運(yùn)行效率減弱,因此,有效指令的獲取數(shù)量應(yīng)根據(jù)軟件程序的保護(hù)程度和運(yùn)行效率綜合考慮。
第二重組指令即本方法得到的結(jié)果,其運(yùn)行結(jié)果與初始指令的運(yùn)行結(jié)果完全一致,但在指令的數(shù)量多余初始指令的數(shù)量,破解難度也明顯高于初始指令的破解難度。
本發(fā)明實(shí)施例通過對(duì)軟件程序中的有效指令進(jìn)行等效變形操作,并添加花指令進(jìn)而完成指令重組操作,以解決傳統(tǒng)方法因容易被抹去而造成沒有對(duì)程序起到較好的保護(hù)作用的問題,進(jìn)而生成比較復(fù)雜的指令片段,在不影響程序正常運(yùn)行效率的前提下增加了破解難度,對(duì)程序起到更好的保護(hù)作用。
實(shí)施例二
圖2是本發(fā)明實(shí)施例二中的一種指令重組方法流程圖,本實(shí)施例在實(shí)施例一的基礎(chǔ)上,對(duì)第二重組指令進(jìn)行了二次等效變形操作,如圖2所示,該方法包括:
s210、從初始指令中提取至少一條有效指令;
其中,有效指令也可以保存在指令鏈表中,因此在獲取有效指令的前,需要確定有效指令所在的指令鏈表的頭結(jié)點(diǎn),進(jìn)而根據(jù)所述指令鏈表的頭結(jié)點(diǎn)獲取有效指令。
s220、對(duì)所述有效指令進(jìn)行等效變形得到第一等效指令;
s230、將所述第一等效指令替換所述有效指令得到第一重組指令;
s240、將所述花指令拆分為至少兩個(gè)花指令片段;
所述花指令包括至少一個(gè)花指令片段?;ㄖ噶钇螢榛ㄖ噶钪械牟糠种噶?,花指令可以由一個(gè)或多個(gè)花指令片段組成,示例性的,nop表示不執(zhí)行任何操作,則nop則可以單獨(dú)作為一條花指令,此時(shí)該花指令僅由nop這一個(gè)花指令片段組成。
再示例性的,movreg_x1,ebp,為一個(gè)完整的花指令;movereg_x1就是一個(gè)花指令片段??蛇x的,可以從以下常用的指令中選擇至少一條指令進(jìn)行組合作為無效指令。pushebp表示把基址指針寄存器壓入堆棧;popebp表述把基址指針寄存器彈出堆棧;則pushebp,popebp就是可以作為花指令;pusheax表示把數(shù)據(jù)寄存器壓入堆棧,popeax表示把數(shù)據(jù)寄存器彈出堆棧,同理的,pusheax和popeax也可以作為一條花指令。同理的常用的花指令還有addesp,1,subesp,-1;addesp,-1,subesp,1;incecx,dececx;subesp,1,subesp,-1;jmp入口地址,push入口地址等。
進(jìn)一步的,當(dāng)花指令只包括一個(gè)花指令片段時(shí),可以對(duì)該花指令進(jìn)行等效變形形成多個(gè)花指令片段,進(jìn)而對(duì)多個(gè)花指令片段執(zhí)行操作。
s250、確定所述第一重組指令中的指令數(shù)量,根據(jù)所述指令數(shù)量確定所述花指令片段的添加位置;
其中,花指令片段的添加位置可以是第一重組指令的開始位置、中間位置和結(jié)束位置。指令數(shù)量即第一重組指令中指令片段的數(shù)量。
示例性的,獲取完第一重組指令的指令數(shù)量后,可以根據(jù)指令數(shù)量將花指令整體插入到第一重組指令的中間位置。
再示例性的,當(dāng)花指令包括多個(gè)花指令片段時(shí),可以獲取花指令片段的數(shù)量,然后將第一重組指令的等分為與花指令片段相同數(shù)量的片段,將相鄰兩個(gè)片段間的分離位置確定為花指令片段的添加位置。然后將多個(gè)花指令片段逐個(gè)插入到對(duì)應(yīng)的添加位置。
所述等效變形操作的次數(shù)可以根據(jù)具體需求花指令對(duì)軟件程序的保護(hù)程度增加或著減少,等效變形操作的次數(shù)越多,花指令對(duì)軟件程序的保護(hù)程度越強(qiáng),等效變形操作的次數(shù)越少,花指令對(duì)軟件程序的保護(hù)程度越弱。
可選的,花指令進(jìn)行等效變形操作生成至少三條花指令片段之后,可以檢測所述至少三條花指令的復(fù)雜度,進(jìn)而控制花指令對(duì)軟件程序的保護(hù)程度。
具體的,可以根據(jù)花指令數(shù)量的多少判斷花指令的復(fù)雜程度,示例性的,當(dāng)花指令數(shù)量小于3000條時(shí),則認(rèn)為花指令的復(fù)雜程度未達(dá)到預(yù)設(shè)值,則需對(duì)花指令繼續(xù)進(jìn)行等效變換。
還可以根據(jù)花指令中關(guān)鍵指令的數(shù)量的多少來判斷指令的復(fù)雜程度。在判斷之前,需根據(jù)具體需求設(shè)定關(guān)鍵指令,進(jìn)而對(duì)關(guān)鍵指令的數(shù)量統(tǒng)計(jì),并根據(jù)統(tǒng)計(jì)結(jié)果判斷是否繼續(xù)等效變換操作。
更進(jìn)一步的,當(dāng)所述至少三條花指令的復(fù)雜度未達(dá)到預(yù)設(shè)值時(shí),還可以將從所述至少三條花指令選取指令當(dāng)作有效指令,并重復(fù)上述操作。
例如,選取[esp-4]作為有效指令,對(duì)[esp-4]進(jìn)行等效變換操作,并在得到的結(jié)果指令添加垃圾指令,直到最終的花指令的復(fù)雜度未達(dá)到預(yù)設(shè)值后,將所述花指令以鏈表的數(shù)據(jù)結(jié)構(gòu)保存。
s260、根據(jù)所述添加位置將所述花指令片段添加到所述第一重組指令中得到第二重組指令。
s270、從所述第二重組指令中提取一條指令作為待處理指令;
其中,待處理指令可以是第二重組指令中任意指令,可以是有效指令,也可以是花指令片段,可以是一條指令,也可以是多條指令。
s280、對(duì)待處理指令進(jìn)行等效變換得到第二等效指令;
其中,第二有效指令由有效指令進(jìn)行等效變形操作生成,因此,可將本實(shí)施例中的初始花指令理解為實(shí)施例一中所述的第一有效指令。需要說明的是,該二次等效變換表示可以多有效指令多次等效變換,進(jìn)一步的提高指令的破解難度。
所述等效變形操作作用于對(duì)有效指令做等效變形操作。經(jīng)過變換后得到的花指令的運(yùn)行結(jié)果與有效指令的運(yùn)行結(jié)果相同。
具體的,等效變形操作包括指令交換操作、取地址操作、取反操作和指令壓縮操作等。
指令交換操作用于有效指令中全部字節(jié)或者半字節(jié)的交換。取地址操作用于獲取有效指令的存儲(chǔ)地址。取反操作用于對(duì)有效指令所對(duì)應(yīng)二進(jìn)制數(shù)的取反運(yùn)算。
本實(shí)施例中可以對(duì)所述初始指令進(jìn)行二次等效指令變換,進(jìn)而生成更加復(fù)雜的指令片段,進(jìn)一步增加了破解難度,增大了對(duì)程序的保護(hù)力度。
s290、將所述第二等效指令替換所述第二重組指令中提取的有效指令得到第三重組指令。
花指令可以是對(duì)中間花指令進(jìn)行第二次等效變形操作生成。
本實(shí)施例的技術(shù)方案,通過在已生成第二重組指令的基礎(chǔ)上進(jìn)行二次等效替換操作,生成了復(fù)雜度更高的最終的花指令,提高了花指令對(duì)軟件程序的保護(hù)強(qiáng)度。
實(shí)施例三
圖3是本發(fā)明實(shí)施例三中的一種指令重組方法的優(yōu)選實(shí)施方式的流程圖,本實(shí)施例是在上述各實(shí)施例的基礎(chǔ)上的一個(gè)優(yōu)選實(shí)例。
具體方法包括:
從指令流中讀取一條有效指令;
對(duì)有效指令進(jìn)行等效變換得到至少一條等效指令;
判斷等效變換操作是否結(jié)束;
若否,則隨機(jī)從指令流中讀取一條有效指令并進(jìn)行等效變換操作;
若是,則遍歷花指令鏈表,并從花指令鏈表中獲取一條花指令;
從等效指令中隨機(jī)讀取一條待處理指令,并向該指令中添加花指令,該待處理指令可以是有效指令,也可以是花指令;進(jìn)一步優(yōu)選的,當(dāng)花指令中僅包括一個(gè)花指令片段時(shí),則將花指令添加到該待處理指令之前或之后。當(dāng)花指令中包括多個(gè)花指令片段時(shí),可以將花指令片段分別插入到該待處理指令的任意位置。
判斷花指令添加操作是否結(jié)束;
若否,則繼續(xù)從花指令鏈表中讀取花指令,并向等效指令中添加花指令;
若是,則遍歷指令鏈表,并從等效指令中獲取一條有效指令;并對(duì)該有效指令進(jìn)行等效變換操作。
實(shí)施例四
圖4所示為本發(fā)明實(shí)施例4提供的一種指令重組裝置結(jié)構(gòu)示意圖,如圖4所示,該指令重組裝置包括:有效指令提取模塊410、等效變形模塊420、指令替換模塊430和花指令添加模塊440。
其中,有效指令提取模塊410,用于從初始指令中提取至少一條有效指令;
等效變形模塊420,對(duì)所述有效指令進(jìn)行等效變形得到第一等效指令;
指令替換模塊430,用于將所述第一等效指令替換所述有效指令得到第一重組指令;
花指令添加模塊440,用于向所述第一重組指令中添加至少一條花指令得到第二重組指令。
本發(fā)明實(shí)施例通過對(duì)軟件程序中的有效指令進(jìn)行等效變形操作,并添加花指令進(jìn)而完成指令重組操作,以解決傳統(tǒng)方法因容易被抹去而造成沒有對(duì)程序起到較好的保護(hù)作用的問題,進(jìn)而生成比較復(fù)雜的指令片段,在不影響程序正常運(yùn)行效率的前提下增加了破解難度,對(duì)程序起到更好的保護(hù)作用。
在上述實(shí)施例的基礎(chǔ)上,指令重組裝置還包括:
指令二次提取模塊,用于從所述第二重組指令中提取一條指令作為有效指令;
二次等效變換模塊,用于對(duì)所述第二重組指令中提取的有效指令進(jìn)行等效變換得到第二等效指令;
二次替換模塊,用于將所述第二等效指令替換所述第二重組指令中提取的有效指令得到第三重組指令。
在上述實(shí)施例的基礎(chǔ)上,花指令添加模塊440包括:
花指令拆分單元,用于將所述花指令拆分為至少兩個(gè)花指令片段;
指令添加位置確定單元,用于確定所述第一重組指令中的指令數(shù)量,根據(jù)所述指令數(shù)量確定所述花指令片段的添加位置;
指令添加單元,用于根據(jù)所述添加位置將所述花指令片段添加到所述第一重組指令中得到第二重組指令。
在上述實(shí)施例的基礎(chǔ)上,所述等效變形操作包括指令交換操作、取地址操作、取反操作和指令壓縮操作。
本發(fā)明實(shí)施例所提供的指令重組裝置可以用于執(zhí)行本發(fā)明實(shí)施例所提供的指令重組方法,具備相應(yīng)的功能和有益效果。未在本實(shí)施例中詳盡描述的技術(shù)細(xì)節(jié),可參見本發(fā)明任意實(shí)施例提供的指令重組方法。
注意,上述僅為本發(fā)明的較佳實(shí)施例及所運(yùn)用技術(shù)原理。本領(lǐng)域技術(shù)人員會(huì)理解,本發(fā)明不限于這里所述的特定實(shí)施例,對(duì)本領(lǐng)域技術(shù)人員來說能夠進(jìn)行各種明顯的變化、重新調(diào)整和替代而不會(huì)脫離本發(fā)明的保護(hù)范圍。因此,雖然通過以上實(shí)施例對(duì)本發(fā)明進(jìn)行了較為詳細(xì)的說明,但是本發(fā)明不僅僅限于以上實(shí)施例,在不脫離本發(fā)明構(gòu)思的情況下,還可以包括更多其他等效實(shí)施例,而本發(fā)明的范圍由所附的權(quán)利要求范圍決定。