耿 普 祝躍飛
(戰(zhàn)略支援部隊(duì)信息工程大學(xué) 鄭州 450002)
代碼加密[1-7]和代碼混淆都是重要的代碼保護(hù)技術(shù),傳統(tǒng)的代碼加密技術(shù)在加密代碼的粒度上越來越細(xì),從文件、程序節(jié)區(qū)粒度到函數(shù)[7-8]、基本塊粒度,甚至到單個機(jī)器指令[5]的粒度;另外在解密函數(shù)上也引入了多態(tài)[4]的方法,加密代碼每次解密執(zhí)行后的再次加密會通過秘鑰變化和解密函數(shù)變化來增加逆向分析的難度;但是在隱藏解密秘鑰方面還缺少相關(guān)研究.分支條件混淆[9-13]是代碼混淆[14]研究的一個新方向,通過混淆分支條件,能夠隱藏程序執(zhí)行邏輯、對抗符號執(zhí)行[11,15-16],特別是在對觸發(fā)條件的保護(hù)上具有較好的效果,能夠阻礙生成滿足觸發(fā)條件的程序輸入.
雖然分支條件混淆能夠保護(hù)程序的觸發(fā)條件,但是無法保護(hù)基于觸發(fā)條件的程序代碼.于是Sharif等人[9]結(jié)合分支條件混淆和代碼加密,提出了一種基于分支條件混淆的條件代碼加密技術(shù),使用滿足分支條件的輸入作為代碼加解密秘鑰對條件代碼進(jìn)行加密,因此在程序內(nèi)存中不需要存儲秘鑰,而是在運(yùn)行時直接獲取分支條件的輸入作為秘鑰;另外由于混淆使得逆向分析者難以獲取滿足分支條件的輸入,也就無法獲取加解密秘鑰,因此結(jié)合分支條件混淆的代碼加密實(shí)現(xiàn)了解密秘鑰的隱藏.然而該分支混淆方法均只能應(yīng)用于等于條件;另外,受限于解密秘鑰唯一性要求,基于分支條件混淆的代碼加密技術(shù)只能應(yīng)用于單個等于條件的分支;這些限制極大阻礙了基于分支條件混淆的代碼加密技術(shù)的應(yīng)用.
王志等人[11]在Sharif[9]分支條件混淆方法的基礎(chǔ)上,提出了一種基于保留前綴加密的分支混淆技術(shù),把分支條件混淆從等于判斷的條件擴(kuò)展到大小判斷的條件.然而在非等條件下,分支條件為真的輸入不具備唯一性要求,因此不能使用分支輸入作為秘鑰對條件代碼進(jìn)行加密.在分支條件取值為真的輸入不唯一的條件下,為解決使用分支輸入產(chǎn)生唯一性秘鑰的要求,在多輸入分支條件下,結(jié)合分支條件混淆,本文提出了一種基于拉格朗日插值法的秘鑰生成技術(shù),實(shí)現(xiàn)了解密秘鑰和分支條件混淆的結(jié)合,隱藏了代碼解密秘鑰.
本文的主要貢獻(xiàn)有4個方面:
1) 基于拉格朗日插值法,在分支條件取值為真的輸入不唯一的條件下,提出了一種使用分支條件輸入生成代碼加解密秘鑰的方法;
2) 通過對多個等于條件取或形成的復(fù)合條件的分支輸入進(jìn)行處理,完成了多輸入條件下的秘鑰生成,實(shí)現(xiàn)條件代碼加密,避免了代碼復(fù)制和復(fù)合條件拆分帶來的空間損耗;
3) 完成了基于分支混淆的條件代碼加密方法從等于條件分支到區(qū)間條件分支的擴(kuò)展;
4) 針對等于條件和區(qū)間條件通過邏輯運(yùn)行形成的復(fù)雜條件,實(shí)現(xiàn)了分支混淆和復(fù)雜條件代碼加密的結(jié)合,實(shí)現(xiàn)了復(fù)雜條件分支下的基于分支混淆的代碼加密.
前綴算法是一種把一個整數(shù)區(qū)間轉(zhuǎn)變?yōu)橐粋€前綴集合的算法,并且保證區(qū)間中的每一個整數(shù)均在前綴集合能找到一個與之匹配的前綴,反之在集合中沒有匹配到前綴的整數(shù)一定不屬于該區(qū)間.并且前綴算法得到的前綴集合元素個數(shù)有2個特點(diǎn),其中n表示整數(shù)的二進(jìn)制位數(shù):
1) 區(qū)間前綴集合元素個數(shù)最大值為2n-2;
2) 區(qū)間前綴集合元素個數(shù)平均值為((n-2)×22n-1+(n+1)2n+1)(22n-1+2n-1),在32 b或者64 b程序中,該值都接近為n-2.
前綴算法偽代碼如算法1所示:
算法1.一個整數(shù)區(qū)間到前綴集合的轉(zhuǎn)換算法.
輸入:區(qū)間起始值的二進(jìn)制表示a1a2…an;區(qū)間結(jié)束值的二進(jìn)制表示b1b2…bn;
輸出:區(qū)間的前綴集合Prefix.
PrefixSearch_Prefix(a1a2…an,b1b2…bn)
{
for (intk=1;(k≤n) && (ak=bk);
k++)
if (k=n+1)
return {a1a2…an};
endif
endfor
if((akak+1…an=00…0) && (bkbk+1…bn=11…1))
if (k=1)
return {*};
else
return{a1a2…ak-1};
endif
endif
PrefixA=Search_Prefix(ak+1ak+2…an,11…1);
PrefixB=Search_Prefix(00…0,bk+1bk+2…bn)
return{a1a2…ak-10+PrefixA,a1a2…ak-11+PrefixB};
}
保留前綴加密[17].假設(shè)a=a1a2…an,b=b1b2…bn為2個n位整數(shù),如果a1a2…ak=b1b2…bk,其中k 標(biāo)準(zhǔn)形式定理(canonical form theorem)[17].假設(shè)fi是一個從{0,1}i到{0,1}上的函數(shù),其中i=1,2,…,n-1,并且f0是一個常量函數(shù),F(xiàn)是一個{0,1}n上的函數(shù),其定義對任意給定的整數(shù)a=a1a2…an,令: (1) 其中,⊕表示異或運(yùn)算,i=1,2,…,n,f0為常數(shù),可以得出結(jié)論:1)F是一個保留前綴加密函數(shù);2)任意保留前綴加密函數(shù)必定有F的表示形式.定理的證明參見文獻(xiàn)[6],此處省略. 保留前綴Hash加密[11]是一種把Hash函數(shù)引入到保留前綴加密計算的加密算法,表示為Fh(a)其中fi-1(a1a2…ai-1)=T(Hash(a1a2…ai-1)),其中T為取位函數(shù),即選擇Hash結(jié)果的某一位. Sharif提出的基于分支條件混淆的條件代碼加密如圖1所示,主要是通過分支輸入生成條件代碼的加解密秘鑰,從而保證程序中不需要存儲秘鑰,實(shí)現(xiàn)了解密秘鑰隱藏和分支條件混淆的結(jié)合.逆向攻擊者解密代碼的難度等同于找到使得分支條件取值為真的輸入的難度,而分支條件混淆的目的正是阻礙攻擊者獲取使得分支條件取值為真的輸入. Fig. 1 Example of conditional code encryption圖1 條件代碼加密示意圖 Fig. 2 The process of duplicate condition and compound condition圖2 重復(fù)條件代碼和復(fù)合條件代碼的復(fù)制處理 Fig. 3 The example of branch obfuscation based on prefix-preserving algorithm圖3 基于保留前綴Hash加密的分支條件混淆示意圖 另外,本文把形如a≤x≤b的條件稱為區(qū)間條件,把單個的等于比較條件、單個的區(qū)間條件成為基本條件.多個基本條件通過邏輯運(yùn)算組合成的條件成為復(fù)合條件. 在Sharif提出的基于分支條件混淆的代碼加密方法中,對重復(fù)條件和多個等于條件取或的復(fù)合條件,需要使用條件代碼復(fù)制的方法,把復(fù)合條件拆分為多個簡單條件,然后再對各個簡單條件的代碼進(jìn)行加解密,增加了混淆的損耗,同時降低了混淆的隱蔽性.如圖3所示: Sharif等人[9]提出的分支條件混淆僅針對等于條件,通過使用Hash值比較代替明文比較,使得攻擊者難以從Hash值比較中恢復(fù)出明文比較關(guān)系,達(dá)到分支條件混淆的目的.如對分支條件if(x=a),其中x是任意類型的值,實(shí)質(zhì)就是一片內(nèi)存的內(nèi)容,通過分支條件混淆后變?yōu)閕f(Hash(x)=Hash(a)). 王志等人[11]提出了基于保留前綴加密和Hash函數(shù)的路徑分支混淆技術(shù),使用加密前綴匹配替代分支條件,實(shí)現(xiàn)分支條件混淆.例如分支條件if(9≤x≤15),首先把條件轉(zhuǎn)換為整數(shù)區(qū)間[9,15];然后使用前綴算法獲取區(qū)間的前綴集合S={1001,101*,11*};接下來使用保留前綴Hash加密算法對S進(jìn)行加密得到ES;最后使用加密前綴匹配函數(shù)替換分支條件,即if(9≤x≤15)變?yōu)閕f(isMatch(x,ES)),其中isMatch(x,ES)如算法2所示. 算法2.isMatch算法. 輸入:整數(shù)x、加密前綴集合ES; 輸出:true或者false,true表示x滿足分支條件,false表示x不滿足分支條件. boolisMatch(x,HS) {intencPrefixofInput=encInput(x); inttmpFlag[32]={0};tmpFlag[0]=1?31; for(inti=1;i<32;i++){tmpFlag[i]=tmpFlag[i-1]|(1?(31-i));} for(intj=0;j {tmpLen=ES[j].prefixLen; tmpPrefix=encPrefixofinput&tmpFlag[tmpLen]; if(tmpPrefix=ES[j].prefix){return true;} } return fasle; } 基于分支條件混淆的條件代碼加密,由于使用分支條件的輸入作為加解密秘鑰,導(dǎo)致該加密方法僅能用于單個等于條件的分支.對于具有多個輸入值使得分支條件取值為真的分支,由于輸入不具有唯一性,導(dǎo)致秘鑰不能直接使用分支輸入.因此需要對輸入進(jìn)行處理,使得多個輸入x1,x2,x3,…輸入經(jīng)過處理后得到相同的輸出y,使用y作為解密秘鑰,從而保證秘鑰的唯一性. 拉格朗日插值法是18世紀(jì)法國數(shù)學(xué)家約瑟夫·拉格朗日發(fā)明的一種多項(xiàng)式插值方法.用于尋找二維平面上經(jīng)過n+1個點(diǎn)的n次多項(xiàng)式,使得多項(xiàng)式在給定的n+1個觀測點(diǎn)能取到給定的值.經(jīng)過n+1個點(diǎn)的次數(shù)不超過n的多項(xiàng)式只有一個,即拉格朗日多項(xiàng)式.本文使用拉格朗日插值保證多輸入條件下的輸出唯一性. 對給定的n+1個點(diǎn)(x0,y0),(x1,y1),(x2,y2),…,(xn,yn),首先根據(jù)每個點(diǎn)得出n+1個拉格朗日基本多項(xiàng)式,其中第i個點(diǎn)(xi,yi) 的拉格朗日基本多項(xiàng)式為 一方面,拉格朗日多項(xiàng)式的系數(shù)不是整數(shù),即存在除法,因此在使用計算機(jī)計算的過程中可能會出現(xiàn)實(shí)際值與計算值有出入的問題;另外一方面,拉格朗日多項(xiàng)式具備鮮明的特征,給攻擊者從拉格朗日多項(xiàng)式中獲取分支輸入提供了便利;最后,如果多項(xiàng)式的次數(shù)過低,則在某個分支輸入已知的情況下會導(dǎo)致其他分支輸入泄露,從而會導(dǎo)致分支條件混淆被還原.因此需要對拉格朗日多項(xiàng)式進(jìn)行變換,以實(shí)現(xiàn)多項(xiàng)式系數(shù)的整數(shù)化、消除拉格朗日多項(xiàng)式的特征和提高多項(xiàng)式次數(shù). 首先,通過對插值多項(xiàng)式L(x)進(jìn)行去分母和模運(yùn)算變化,使得多項(xiàng)式的系數(shù)整數(shù)化,同時消除拉格朗日多項(xiàng)式的特征.即取 使用拉格朗日多項(xiàng)式進(jìn)行多輸入分支的條件代碼加密密鑰生成,解決了大小比較分支的輸入不唯一問題,使得條件代碼加密和分支混淆緊密結(jié)合在一起,對條件代碼進(jìn)行更好的混淆保護(hù).同時通過密鑰構(gòu)造解決Sharif條件代碼加密方法中的代碼復(fù)制問題,提升混淆的效率和隱蔽性. 重復(fù)條件和復(fù)合條件需要使用代碼復(fù)制變轉(zhuǎn)換為多個簡單條件,根本原因在于能夠執(zhí)行到條件代碼的分支輸入不唯一,因此不能直接使用分支輸入作為秘鑰.通過對輸入進(jìn)行處理,使得多個輸入生成相同的輸出,則不需要使用代碼復(fù)制的手段,減少了加密導(dǎo)致的空間占用.在Sharif分支條件混淆的基礎(chǔ)上,對多輸入進(jìn)行處理的步驟如圖4所示. 1) 判斷等于條件的輸入x,y是否為整數(shù),若不是整數(shù),則對輸入進(jìn)行加鹽的Hash計算,然后取Hash值的前4個字節(jié)作為拉格朗日插值法的插值點(diǎn)的橫坐標(biāo);若x,y為整數(shù),則直接取x,y作為插值點(diǎn)橫坐標(biāo);然后取一個隨機(jī)整數(shù)作為多項(xiàng)式在插值點(diǎn)x和y處的取值,生成拉格朗日多項(xiàng)式. 2) 使用拉格朗日多項(xiàng)式變換,得到輸入預(yù)處理函數(shù)inputProcess. 3) 在使用Hash值比較替代整數(shù)比較的過程中,依次判斷輸入x,y是否使得分支條件取值為真,使用第一個使分支條件取值為真的輸入作為inputProcess函數(shù)的參數(shù)計算該分支的輸出值keysource,使用keysource生成解密秘鑰,最后進(jìn)行條件代碼的解密和再次加密. Fig. 4 The process of compound condition and duplicate condition圖4 復(fù)合條件和重復(fù)條件處理示意圖 對分支條件if(a≤x≤b),應(yīng)用基于保留前綴加密Hash算法的分支條件混淆技術(shù)混淆后,分支條件為if(isMatch(x,ES)),其中ES={es1,es2,…,esm}為區(qū)間[a,b]對應(yīng)前綴集合應(yīng)用保留前綴Hash加密算法Fh計算后得到加密前綴數(shù)據(jù).對區(qū)間條件在基于保留前綴Hash加密的分支混淆后,條件代碼加密過程如圖5所示,加密步驟如下: Fig. 5 Example of interval condition process圖5 區(qū)間條件分支處理示意圖 1) 對n位整數(shù)區(qū)間[a,b],計算其前綴集合S={s1,s2,…,sk},對j位前綴元素si,取隨機(jī)數(shù)ri的尾部n-j比特與si一起組合成n位整數(shù)ti,使用t1,t2,…,tk作為拉格朗日插值點(diǎn)的橫坐標(biāo),取隨機(jī)數(shù)tmp作為所有插值點(diǎn)的縱坐標(biāo),計算輸入預(yù)處理函數(shù)inputProcess.保存隨機(jī)數(shù)數(shù)組R={r1,r2,…,rk}. 2) 在算法2中,若x使得isMatch返回true,則在isMatch中記錄與x相匹配的加密前綴esi的下標(biāo)i,獲取esi對應(yīng)前綴的位長,假設(shè)為m;然后取x的前m位和ri的后n-m位組合成inputProcess函數(shù)的輸入inputNum,計算得到分支的輸出keysource,然后使用keysource生成解密秘鑰key,使用key進(jìn)行條件代碼的解密和再次加密. 由等于條件和區(qū)間條件通過邏輯運(yùn)算形成的復(fù)雜條件中,復(fù)雜條件的混淆是通過對構(gòu)成復(fù)雜條件的每個基本條件進(jìn)行混淆而完成;秘鑰生成則是通過對每個基本條件進(jìn)行單獨(dú)的輸入處理,但是需要保證每個基本條件在其輸入使得條件取值為真時的輸出都是相等的.為統(tǒng)一表示,令等于條件if(x=a)混淆后為if(isMatch(x,ES)),但是在等于條件下,isMatch算法變?yōu)閧returnmemcmp(Hash(x),ES,hashLen);},其中ES為a的Hash值;令等于條件if(x=a)的輸入處理函數(shù)為inputProcess(x),等于條件下的inputProcess函數(shù)偽代碼如下: inputProcess(x) { if (xis interger){returnx;} else {inttmp=Hash(x); returnfirstFourBytes(tmp);} } 下面介紹復(fù)雜分支條件下的代碼加密過程,加密示意圖如圖6所示. 1) 根據(jù)與運(yùn)算和或運(yùn)算的結(jié)合律:(c11)&&(c12‖c13)=(c11&&c12)‖(c11&&c13),把復(fù)雜條件轉(zhuǎn)換為基本條件與運(yùn)算結(jié)合成的復(fù)合條件的或運(yùn)算式,即形如(c11&&c12)‖(c21&&c22)‖(c31&&c32),其中cij表示基本條件;記無或運(yùn)算相隔的與運(yùn)算條件為一組,即group[0]={c11,c12},group[1]={c21,c22},group[2]={c31,c32}共3組. 2) 對分支條件if((c11&&c12)‖(c21&&c22)‖(c31&&c32))的每個基本條件進(jìn)行混淆,混淆后的分支條件為if(isMatch(x11,ES11) &&isMatch(x12,ES12))‖(isMatch(x21,ES21) &&isMatch(x22,ES22))‖(isMatch(x31,ES31) &&isMatch(x32,ES32))). 3) 對每個基本條件cij分別計算輸入其輸入處理函數(shù),并記為inputPrecess[i][j];設(shè)函數(shù)inputPrecess[i][j]的分支輸出為為Yij,randA為一隨機(jī)整數(shù)數(shù),并令Rij=randA-Yij,修改inputPrecess[i][j]=inputPrecess[i][j]+Rij,則修改后所有基本條件的預(yù)處理函數(shù)inputProcess[i][j],在其輸入為使得條件Cij取值為真的分支輸入值時,預(yù)處理函數(shù)的取值均為randA. 4) 在混淆后復(fù)雜條件執(zhí)行時,按照順序計算每組條件與運(yùn)算的取值,找到第1組取值為true的條件.假設(shè)第i組條件與運(yùn)算的取值為true,則隨機(jī)選擇第i組條件中的任意一個條件代表該復(fù)雜分支條件進(jìn)行分支輸出計算,假設(shè)選中條件為Cij,則選取inputProcess[i][j]為復(fù)雜分支條件的輸出計算函數(shù),選取x[i][j]為inputProcess[i][j]的計算參數(shù),計算結(jié)果則為randA,使用randA計算秘鑰,然后對條件代碼進(jìn)行解密和2次加密. Fig. 6 Example of complicated condition process圖6 復(fù)雜條件分支處理示意圖 Fig. 7 The encipher and decipher example of multi-thread code圖7 多線程代碼加解密示意圖 如果需要加密的代碼是一段多個線程共用的代碼,則在解密和2次加密的過程中需要進(jìn)行加解密的操作同步,否則會導(dǎo)致加解密錯亂,程序執(zhí)行出現(xiàn)不可控錯誤.本文采用臨界區(qū)對加加解密操作進(jìn)行同步,解密操作在進(jìn)入臨界區(qū)后首先判斷加密代碼是否在使用中.如果否,則解密;如果是,則不需要解密、直接返回,退出臨界區(qū). 同樣,在2次加密的過程中,進(jìn)入臨界區(qū)后首先判斷需要加密的代碼是否在使用中.如果否,則對代碼進(jìn)行2次加密;如果是,則加密函數(shù)直接返回,退出臨界區(qū).處理過程如圖7所示. 由于本文提出的代碼加密是基于分支條件混淆,因此時間和空間的消耗都是基于分支條件已經(jīng)被混淆的程序來計算的. 首先是加密算法消耗的存儲空間,本文采用AES-128加密算法對條件代碼進(jìn)行加密,AES算法源代碼通過編譯得到的obj文件占用空間為58 807 B;其次inputProcess函數(shù)通過把系數(shù)和最高次數(shù)記為參數(shù)后,該函數(shù)的算法占用416 B.上述算法是所有的分支條件代碼加密所共用的代碼,因此隨著被選擇加密的分支條件越多,每個分支占用的共用空間就越少.另外由于每個分支條件需要存儲自己的多項(xiàng)式系數(shù),需要增加加密和解密的外包函數(shù),因此每個分支條件單獨(dú)占用的空間平均是30×4+83+83=283 B.即對單個區(qū)間條件構(gòu)成的分支,對m個分支條件的代碼進(jìn)行加密,平均每個分支條件的代碼加密需要消耗283+(416+58 807)m字節(jié)的空間.如果是m個復(fù)雜條件,且每個復(fù)雜條件由k個基本條件構(gòu)成,則每個復(fù)雜分支平均消耗120×k+(416+58 807)m字節(jié)的空間用于代碼加密. 其次是時間消耗,時間消耗主要在于AES128一次加密和解密的時間,即平均每個分支多消耗0.003 3 ms(由10 000次AES加密和解密消耗32.8 ms時間計算得到單次加解密時間). Table 1 Consumption Data of Time and Space表1 加密消耗的時間和空間數(shù)據(jù) Sharif第1次提出了基于分支條件混淆的代碼解密方法,通過分支條件混淆實(shí)現(xiàn)了秘鑰隱藏;通過逆向分析獲取加解密秘鑰的的難度,等同于找到使得被混淆分支條件取值為真的程序輸入的難度.即相比其他的加密方法,基于分支條件混淆的代碼加密方法能更好的對抗解密秘鑰獲取攻擊. 在基于分支條件混淆的代碼加密研究方面,除了Sharif在基于等于條件混淆的代碼加密研究外,還沒有相關(guān)的研究.與Sharif的加密方法相比,本文提出的方法在2個方面具有優(yōu)勢: 1) 把Sharif的方法從等于條件擴(kuò)展到了區(qū)間條件和復(fù)雜條件,具有更好的通用性; 2) 對多個等于條件取或的分支,本文提出的方法不需要代碼復(fù)制,從而節(jié)省了代碼占用的空間. 綜上所述,本文提出的代碼加密方法在時間和空間消耗上是可接受的;由于解密秘鑰通過分支混淆隱藏,使得加密后代碼能較好對抗逆向分析,因此該加密方法能夠?qū)嶋H使用,且具有比較好的代碼保護(hù)功能. Table 2 Comparison of Different Methods表2 加密方法優(yōu)勢對比 基于分支條件混淆的條件代碼加密,通過滿足分支條件的輸入產(chǎn)生秘鑰,同時利用分支混淆隱藏分支條件,從而隔離秘鑰和程序,極大地提高了解密難度.由于秘鑰生成和分支條件緊密聯(lián)系在一起,只有在加密的條件代碼所在分支因正確的輸入而得到執(zhí)行時,通過分支輸入可以計算出秘鑰,實(shí)現(xiàn)解密,否則就會導(dǎo)致解密錯誤,產(chǎn)生不可預(yù)測的錯誤導(dǎo)致程序運(yùn)行終止.雖然基于分支條件混淆的條件代碼解密具有較好的抗程序分析效果,但是當(dāng)前研究僅能在等于條件分支上實(shí)現(xiàn)該類加密方式,極大地限制了該方法的使用.本文通過構(gòu)建輸入預(yù)處理函數(shù),對具有多個正確輸入的分支進(jìn)行處理,完成了多輸入分支下利用分支輸入產(chǎn)生具有唯一性秘鑰的方法.利用該方法,對多個等于條件取或的分支和重復(fù)條件代碼分支的條件代碼加密進(jìn)行了優(yōu)化,減少了加密對空間的消耗;區(qū)間條件分支使用基于保留前綴加密和Hash函數(shù)的分支混淆方法進(jìn)行分支條件混淆,本文使用整數(shù)區(qū)間對應(yīng)的前綴集合生成輸入預(yù)處理函數(shù),實(shí)現(xiàn)了區(qū)間條件分支下基于分支輸入產(chǎn)生唯一性秘鑰的方法,從而對區(qū)間條件分支的條件代碼進(jìn)行加密.最后對等于和區(qū)間條件復(fù)合而成的復(fù)雜條件分支進(jìn)行處理,對該分支同樣實(shí)現(xiàn)了基于分支輸入產(chǎn)生唯一性秘鑰的方法,進(jìn)而對條件代碼進(jìn)行加密.通過以上處理完成了基于分支條件混淆的條件代碼加密從等于條件分支到區(qū)間條件分支和復(fù)雜條件分支的擴(kuò)展,提高了代碼保護(hù)的范圍,增強(qiáng)了代碼安全性.1.3 Sharif提出的條件代碼加密方法介紹
1.4 基于保留前綴加密的分支混淆方法介紹
2 多輸入條件下的秘鑰生成
2.1 拉格朗日插值法
2.2 輸入處理多項(xiàng)式生成
3 基于分支條件混淆的條件代碼加密
3.1 Sharif條件代碼加密方法的改進(jìn)
3.2 大小比較分支的條件代碼加密
3.3 復(fù)雜條件分支的條件代碼加密
3.4 多線程處理
4 分析與評估
4.1 條件代碼加密的時間和空間消耗
4.2 與其他加密方法的比較
5 結(jié) 論