一種數(shù)據(jù)保護(hù)方法
【專利摘要】本申請公開了一種數(shù)據(jù)保護(hù)方法,包括:對待保護(hù)的應(yīng)用程序進(jìn)行編譯,得到相應(yīng)的編譯程序;對所述編譯程序中中間寄存器對應(yīng)的運(yùn)算邏輯,采用寄存器加密的方式進(jìn)行加密處理;所述中間寄存器為用于保存中間運(yùn)算結(jié)果的寄存器;按照預(yù)設(shè)的切割密度N,對加密處理后的所述編譯程序進(jìn)行運(yùn)算切割,所述N≥2;為所述編譯程序中經(jīng)過運(yùn)算切割后得到的每個寄存器對應(yīng)的運(yùn)算邏輯代碼,分別生成相應(yīng)的查找表,利用所述查找表替換相應(yīng)的運(yùn)算邏輯,其中,所述查找表的下標(biāo)為被替換的運(yùn)算邏輯中運(yùn)算參數(shù)對應(yīng)的中間寄存器。采用本發(fā)明可以有效提高計算機(jī)應(yīng)用程序的安全性。
【專利說明】一種數(shù)據(jù)保護(hù)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)安全技術(shù),特別是涉及一種計算機(jī)應(yīng)用程序的數(shù)據(jù)保護(hù)方法。
【背景技術(shù)】
[0002]目前,為了確保計算機(jī)應(yīng)用程序的安全性,需要對應(yīng)用程序進(jìn)行虛擬化處理,利用程序的運(yùn)算邏輯復(fù)雜化或隱藏運(yùn)算邏輯,來提高程序代碼被非法獲取的難度。常用的虛擬化手段有:邏輯運(yùn)算的拆分、等效變換以及查表等方式。
[0003]其中,邏輯運(yùn)算的拆分和等效變換是通過使運(yùn)算邏輯復(fù)雜化,來達(dá)到隱藏程序運(yùn)算邏輯的目的。邏輯運(yùn)算的拆分是將運(yùn)算邏輯拆分成更基本的運(yùn)算,來提高運(yùn)算邏輯表達(dá)的復(fù)雜性。例如,對于異或運(yùn)算X0R,可以拆分成6個與非運(yùn)算NAND。邏輯運(yùn)算的等效變換是在邏輯運(yùn)算中加入可以獲得等效結(jié)果的混淆參數(shù)。例如,對于A+2,可以等效變換為A+5-3。
[0004]查表,是通過預(yù)先根據(jù)程序的運(yùn)算邏輯建立運(yùn)算參數(shù)與運(yùn)算結(jié)果的映射表,在對應(yīng)用程序進(jìn)行虛擬化處理時,引入該映射表,利用映射表替代真實(shí)的運(yùn)算邏輯,根據(jù)具體的運(yùn)算參數(shù)查詢該映射表,即可得到相應(yīng)的運(yùn)算結(jié)果,從而達(dá)到隱藏運(yùn)算邏輯的目的。
[0005]上述邏輯運(yùn)算的拆分和等效變換方案,雖然可以使運(yùn)算邏輯復(fù)雜化,但是由于僅是基本的運(yùn)算邏輯的替代或增加,而這些基本的運(yùn)算邏輯是容易被識別的(如add、NAND),在識別出基本運(yùn)算后,通過一些機(jī)械化的流程可以反推出原來的運(yùn)算邏輯,從而導(dǎo)致經(jīng)過寄存器加密處理的程序仍然可以在較短的時間內(nèi)被非法獲取。
[0006]上述查表方案,雖然運(yùn)算邏輯被隱藏了,但是,具體的運(yùn)算參數(shù)是存在的,基于多組運(yùn)算參數(shù)與運(yùn)算結(jié)果的對應(yīng)關(guān)系,容易推知相應(yīng)的運(yùn)算邏輯。另外,查表方案還存在占用存儲空間過大的問題。每張表格所占用的存儲空間等于運(yùn)算參數(shù)的取值范圍與運(yùn)算結(jié)果的取值范圍乘積,例如當(dāng)運(yùn)算參數(shù)和運(yùn)算結(jié)果均為32位整數(shù)時,表的大小為234字節(jié),這在現(xiàn)實(shí)上是不能接受的。
[0007]由此可見,現(xiàn)有的虛擬化手段存在無法有效確保應(yīng)用程序的安全性的問題。
【發(fā)明內(nèi)容】
[0008]有鑒于此,本發(fā)明的主要目的在于提供一種數(shù)據(jù)保護(hù)方法,該方法可以有效提高計算機(jī)應(yīng)用程序的安全性。
[0009]為了達(dá)到上述目的,本發(fā)明提出的技術(shù)方案為:
[0010]一種數(shù)據(jù)保護(hù)方法包括:
[0011]a、對待保護(hù)的應(yīng)用程序進(jìn)行編譯,得到相應(yīng)的編譯程序;
[0012]b、對所述編譯程序中中間寄存器對應(yīng)的運(yùn)算邏輯,采用寄存器加密的方式進(jìn)行加密處理;所述中間寄存器為用于保存中間運(yùn)算結(jié)果的寄存器;
[0013]C、按照預(yù)設(shè)的切割密度N,對加密處理后的所述編譯程序進(jìn)行運(yùn)算切割,所述N ^ 2 ;
[0014]d、為所述編譯程序中經(jīng)過運(yùn)算切割后得到的每個寄存器對應(yīng)的運(yùn)算邏輯代碼,分別生成相應(yīng)的查找表,利用所述查找表替換相應(yīng)的運(yùn)算邏輯,其中,所述查找表的下標(biāo)為被替換的運(yùn)算邏輯中運(yùn)算參數(shù)對應(yīng)的中間寄存器。
[0015]綜上所述,本發(fā)明提出的數(shù)據(jù)保護(hù)方法,通過整合寄存器加密方法、運(yùn)算切割和查找表生成等方法對程序代碼進(jìn)行加密處理,使得運(yùn)算中間結(jié)果采用密文的方式進(jìn)行存儲,可以有效提高計算機(jī)應(yīng)用程序的安全性。
【專利附圖】
【附圖說明】
[0016]圖1為本發(fā)明實(shí)施例一的流程示意圖。
【具體實(shí)施方式】
[0017]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例對本發(fā)明作進(jìn)一步地詳細(xì)描述。
[0018]本發(fā)明的核心思想是:基于查表的虛擬化方法,在將運(yùn)算邏輯轉(zhuǎn)化為表格之前,先進(jìn)行寄存器加密處理,使得表中運(yùn)算結(jié)果所對應(yīng)的參數(shù)是經(jīng)過加密處理后的參數(shù),從而可以提高映射表格隱藏運(yùn)算邏輯的有效性。另外,為了避免每張表格占用大量存儲空間,在生成表格前,先對運(yùn)算邏輯進(jìn)行切割,得到若干子運(yùn)算邏輯,然后再對各子運(yùn)算邏輯生成相應(yīng)的表格,從而可以避免存儲空間需求過大所致的無法應(yīng)用的問題。
[0019]圖1為本發(fā)明實(shí)施例一的流程示意圖,如圖1所示,該實(shí)施例主要包括:
[0020]步驟101、對待保護(hù)的應(yīng)用程序進(jìn)行編譯,得到相應(yīng)的編譯程序。
[0021]本步驟,可以采用現(xiàn)有的可被虛擬化平臺所識別的編譯工具實(shí)現(xiàn),較佳地,可以采用Virbox編譯器進(jìn)行編譯。
[0022]步驟102、對所述編譯程序中中間寄存器對應(yīng)的運(yùn)算邏輯,采用寄存器加密的方式進(jìn)行加密處理。
[0023]所述中間寄存器為用于保存中間運(yùn)算結(jié)果的寄存器。
[0024]本步驟中,需要對中間寄存器對應(yīng)的運(yùn)算邏輯進(jìn)行加密處理,如此,可以使應(yīng)用程序的中間運(yùn)算結(jié)果采用密文的方式進(jìn)行保存,從而可以提高應(yīng)用程序的安全強(qiáng)度。
[0025]本步驟中可以采用現(xiàn)有的寄存器加密方法對一運(yùn)算邏輯進(jìn)行加密。
[0026]較佳地,為了提高加密的可靠性,可以采用在讀寄存器的指令后面插入解密運(yùn)算指令、在寫寄存器的指令前面插入加密運(yùn)算指令的方式,進(jìn)行所述加密處理。
[0027]例如,對于原始代碼:R1 = i+7,是向寄存器Rl中寫入內(nèi)容i+7,相應(yīng)的加密處理為:R1 = enc(i+7);其中,enc O是一個加密變換指令。
[0028]對于原始代碼i =R1_5,是將寄存器Rl內(nèi)容讀出與5做減法,相應(yīng)的加密處理為:i = dec (Rl)-5 ;其中,dec O是一個解密變換指令。
[0029]對于原始代碼Rl+ = 7,是將寄存器Rl內(nèi)容讀出與7做加法后再寫入Rl中,相應(yīng)的加密處理為Rl = enc (dec (Rl) +7)。
[0030]較佳地,可以利用多種寄存器加密算法進(jìn)行加密處理,即上述enc O、dec O可以采用多種加密算法確定,具體地可以為:所述編譯程序中每個中間寄存器對應(yīng)的運(yùn)算邏輯,采用從預(yù)設(shè)的寄存器加密算法中隨機(jī)選擇一種加密方法的方式,對該運(yùn)算邏輯進(jìn)行加密處理。這樣,不同寄存器對應(yīng)的運(yùn)算邏輯采用的加密方法將可能不同,即使破解了一種的加解密也不可能類似推到其他代碼,從而可以為了進(jìn)一步提高加密處理后程序代碼的逆向難度。
[0031]步驟103、按照預(yù)設(shè)的切割密度N,對加密處理后的所述編譯程序進(jìn)行運(yùn)算切割。
[0032]具體的,上述運(yùn)算切割包括:
[0033]對于加密處理后的所述編譯程序中每個寄存器對應(yīng)的運(yùn)算邏輯代碼,按照預(yù)設(shè)的切割密度N,將該運(yùn)算邏輯代碼切割為等效的N個子運(yùn)算邏輯代碼。
[0034]這里,所述N個子運(yùn)算邏輯代碼所實(shí)現(xiàn)的運(yùn)算邏輯將與原運(yùn)算邏輯代碼等效。具體地,如何將一運(yùn)算邏輯代碼切割為等效的N個子運(yùn)算邏輯代碼的方法,為本領(lǐng)域技術(shù)人員所掌握,在此不再贅述。
[0035]本步驟中,需要對加密處理后的編譯程序進(jìn)行運(yùn)算切割,如此,一方面,可以使運(yùn)算邏輯表達(dá)形式更加復(fù)雜,提高程序代碼被逆向獲取的難度,另一方面通過運(yùn)算邏輯的拆分,減少運(yùn)算參數(shù)的長度,即將一個“寬”運(yùn)算邏輯轉(zhuǎn)化為多個“窄”的運(yùn)算邏輯,從而可以避免后續(xù)步驟中進(jìn)一步生成相應(yīng)的查找表時對存儲空間需求過大的問題,使得此后可以結(jié)合查找表進(jìn)一步提高程序代碼被逆向獲取的難度,確保程序代碼的安全性。
[0036]例如:當(dāng)N = 2 時,對于(ushort) result = (ushort) a+(ushort) imm 可以轉(zhuǎn)化為下述兩個子運(yùn)算邏輯代碼:
[0037](LoByte) result = (LoByte) a+(LoByte) imm ;(保存加法進(jìn)位標(biāo)志 CF)
[0038]和(HiByte)result = (HiByte) a+(HiByte)imm+CF。
[0039]可見,每個子運(yùn)算邏輯代碼所涉及的運(yùn)算參數(shù)的長度為切割前的1/2,這樣,此后進(jìn)一步對每個子運(yùn)算邏輯代碼生成查找表時,所需要的存儲空間將不再龐大到無法具體應(yīng)用,從而可以進(jìn)一步與查找表方案相結(jié)合,提高代碼的安全性。
[0040]所述N的具體取值,可由本領(lǐng)域技術(shù)人員根據(jù)實(shí)際運(yùn)算需要進(jìn)行設(shè)置,只要能滿足后續(xù)步驟中查找表生成的存儲空間需要即可。
[0041]步驟104、為所述編譯程序中經(jīng)過運(yùn)算切割后得到的每個寄存器對應(yīng)的運(yùn)算邏輯代碼,生成相應(yīng)的查找表,利用所述查找表替換相應(yīng)的運(yùn)算邏輯,其中,所述查找表的下標(biāo)為被替換的運(yùn)算邏輯中運(yùn)算參數(shù)對應(yīng)的中間寄存器。
[0042]這里,查找表的下標(biāo)即為查找表的索引項(xiàng)。
[0043]本步驟,用于將運(yùn)算切割后得到的各寄存器中保存的運(yùn)算邏輯代碼替換為等效的查找表,這樣,通過查找表隱藏實(shí)際的運(yùn)算邏輯,可以進(jìn)一步提高程序代碼的安全性。
[0044]這里,查找表的生成方法同現(xiàn)有系統(tǒng),所不同的是,本步驟是在對中間寄存器進(jìn)行了加密的基礎(chǔ)上進(jìn)行的運(yùn)算邏輯的替代,這樣,由于中間運(yùn)算結(jié)果一直是密文,再以密文作為查找表的下標(biāo),將很難再對查找表進(jìn)行逆向,得出程序代碼的運(yùn)算邏輯,從而使得最終處理得到的程序代碼具有很高的安全強(qiáng)度。
[0045]從上述技術(shù)方案可以看出本發(fā)明通過整合寄存器加密方法、查找表生成、運(yùn)算切割等方法對程序代碼的中間參數(shù)進(jìn)行加密處理,可以有效確保程序代碼的數(shù)據(jù)安全性。下面結(jié)合一具體程序代碼的處理過程,對本發(fā)明做進(jìn)一步的詳細(xì)闡述。
[0046]假設(shè),采用Virbox編譯工具,需要處理的原始代碼為:int result =((input~0x3B6217D9) ?1) +0xF834 ;
[0047]首先,采用Virbox編譯工具,對原始代碼進(jìn)行編譯,得到下述結(jié)果:
[0048]RO = input
[0049]Rl = R0~0x3B6217D9
[0050]R2 = Rl?l
[0051]R3 = R2+0xF834
[0052]result = R3
[0053]然后,對編譯結(jié)果寄存器加密處理,下述加密處理后的代碼:
[0054]RO = input
[0055]EO = enc(R0~0x3B6217D9)
[0056]El = enc (dec (EO) >>1)
[0057]R3 = dec (El)+0xF834
[0058]result = R3
[0059]第三,對上述加密處理后的代碼進(jìn)行運(yùn)算切割,
[0060]RO = input
[0061]e00 = enc(r00'0xD9)
[0062]e01 = enc (r01'0xl7)
[0063]e02 = enc(r02'0x62)
[0064]e03 = enc (r03~0x3B) //I個32位操作拆分為上面4個8位操作,其中eOO, eOl,e02, e03分別是上述EO對應(yīng)的4個8位部分,而rOO, rOl, r02, r03是RO對應(yīng)的4個8位部分。
[0065]el3 = enc (dec (e03) ?1)//1個32位移位操作拆分為4個8位操作。每個8位操作會設(shè)定一個“進(jìn)位標(biāo)志”,代表移出的位是否為I。
[0066]el2 = enc (RCR1 (dec (e02))) //RCRl是右移I位,并將最高位用“進(jìn)位標(biāo)志”填充。
[0067]ell = enc (RCR1 (dec (eOl)))
[0068]elO = enc (RCR1 (dec (e00)))
[0069]r30 = dec (elO) +0x34 ;//32位加法切割為4個8位加法,每個運(yùn)算后設(shè)置進(jìn)位標(biāo)志
[0070]r31 = ADC(dec (ell), 0xF8) ;// 帶進(jìn)位標(biāo)志的加法。
[0071]r32 = ADC (dec (el2), 0);
[0072]r33 = ADC (dec (el3), 0);
[0073]result = R3 ;
[0074]最后,對于運(yùn)算切割后的每個子運(yùn)算邏輯代碼,根據(jù)每個8位操作的類型和參數(shù),生成各個查找表,并生成第4階段目標(biāo)代碼。
[0075]BYTE TableXorD9_Enc[256] = {...}
[0076]BYTE TableDec_Shrl_Enc [256] = {...}
[0077]...
[0078]BYTE TableDec_Adc00[512] = {...}
[0079]RO = input ;
[0080]eOO = TableXorD9_Enc [rOO] // 這個表就是 r = >enc (r'0xD9)的映射
[0081]eOl = TableXorl7_Enc [rOl]
[0082]e02 = TableXor62_Enc[r02]
[0083]e03 = TableXor3B_Enc [r03]
[0084]el3 = TableDec—Shrl—Enc[e03]// 這個表是 r = >enc (dec (r) >>1)的映射
[0085]el2 = TableDec—Rcr I—Enc [e02]
[0086]ell = TableDec—Rcr I—Enc [eOl]
[0087]elO = TableDec—Rcr I—Enc [eOO]
[0088]r30 = TableDec—Add34 [elO]
[0089]r31 = TableDec—AdcF8 [ell]
[0090]r32 = TableDec—AdcOO [el2]
[0091]r33 = TableDec—AdcOO[el3]
[0092]result = R3
[0093]綜上所述,以上僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種數(shù)據(jù)保護(hù)方法,其特征在于,包括: a、對待保護(hù)的應(yīng)用程序進(jìn)行編譯,得到相應(yīng)的編譯程序; b、對所述編譯程序中中間寄存器對應(yīng)的運(yùn)算邏輯,采用寄存器加密的方式進(jìn)行加密處理;所述中間寄存器為用于保存中間運(yùn)算結(jié)果的寄存器; C、按照預(yù)設(shè)的切割密度N,對加密處理后的所述編譯程序進(jìn)行運(yùn)算切割,所述N > 2 ;d、為所述編譯程序中經(jīng)過運(yùn)算切割后得到的每個寄存器對應(yīng)的運(yùn)算邏輯代碼,分別生成相應(yīng)的查找表,利用所述查找表替換相應(yīng)的運(yùn)算邏輯,其中,所述查找表的下標(biāo)為被替換的運(yùn)算邏輯中運(yùn)算參數(shù)對應(yīng)的中間寄存器。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟c包括: 對于加密處理后的所述編譯程序中每個寄存器對應(yīng)的運(yùn)算邏輯代碼,該運(yùn)算邏輯代碼切割為等效的N個子運(yùn)算邏輯代碼。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟a中采用Virbox編譯器進(jìn)行所述編譯。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟b中采用在讀寄存器的指令后面插入解密運(yùn)算指令、在寫寄存器的指令前面插入加密運(yùn)算指令的方式,進(jìn)行所述加密處理。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟b中對于所述編譯程序中每個中間寄存器對應(yīng)的運(yùn)算邏輯,采用從預(yù)設(shè)的寄存器加密算法中隨機(jī)選擇一種加密方法的方式,對該運(yùn)算邏輯進(jìn)行加密處理。
【文檔編號】G06F21/12GK104318134SQ201410617318
【公開日】2015年1月28日 申請日期:2014年11月5日 優(yōu)先權(quán)日:2014年11月5日
【發(fā)明者】孫吉平, 韓勇 申請人:北京深思數(shù)盾科技有限公司