利用高級(jí)抽象解譯技術(shù),攻擊者可以嘗試L1..Ln的值,并且當(dāng)攻擊者確信他們已經(jīng)找到正確值時(shí),攻擊者借助抽象解譯通過(guò)代碼傳播該信息以便對(duì)其進(jìn)行解碼。通過(guò)為η選擇一個(gè)較大的值,可使得該任務(wù)更難,但是這將增加解譯開(kāi)銷并增加處理代碼中的連接點(diǎn)的技術(shù)的成本。另一種方法是生成將L1..1^在代碼中的特定位置處設(shè)置為計(jì)算恒定值的字節(jié)代碼。例如,字節(jié)代碼可將&拷貝到L1..Ln,其中,R。是虛擬機(jī)的寄存器(register)。在執(zhí)行該指令之前,寄存器Re已被計(jì)算例如gcd(12341,3131)(最大公分母)的一段代碼賦值。因此,抽象解譯工具不能計(jì)算出所產(chǎn)生的恒定值。這可防止使用抽象解譯在代碼中的這些地方進(jìn)行攻擊。
[0093]雖然本文所描述的實(shí)施例的目標(biāo)是對(duì)程序代碼進(jìn)行模糊處理,但這些實(shí)施例還可用于使代碼免遭篡改。如果攻擊者嘗試計(jì)算出代碼中關(guān)鍵字節(jié)代碼的位置并嘗試用另一字節(jié)代碼來(lái)替代該字節(jié)代碼以便實(shí)現(xiàn)改變代碼的操作的目標(biāo),則攻擊者還將改變對(duì)跟隨經(jīng)修改的字節(jié)代碼的字節(jié)代碼的解譯。因此,跟隨的代碼將成為“垃圾”代碼。
[0094]如上所述,本文所述的用于對(duì)字節(jié)代碼進(jìn)行模糊處理的實(shí)施例可應(yīng)用到其它類型的軟件程序。這些實(shí)施例還可應(yīng)用到例如使用(硬件)解碼功能進(jìn)行擴(kuò)展的ARM處理器內(nèi)核,其中在針對(duì)ARM處理器的編譯器中實(shí)現(xiàn)編碼。
[0095]本文描述的實(shí)施例可實(shí)現(xiàn)在編譯器中,該編譯器將更高級(jí)語(yǔ)言編譯成用于在處理器上執(zhí)行的機(jī)器代碼。此外,本文所述的實(shí)施例可以實(shí)現(xiàn)在解譯器中,該解譯器將程序指令解譯成用于在處理器上執(zhí)行的機(jī)器代碼。此外,可將實(shí)施例應(yīng)用于現(xiàn)有機(jī)器或其它可執(zhí)行代碼,以掩蓋對(duì)該機(jī)器代碼的操作。
[0096]圖1示出了一種掩蓋軟件代碼的方法。方法100開(kāi)始于105。接下來(lái),方法可以接收高級(jí)語(yǔ)言源代碼(110)。然后,方法100可編譯或解譯高級(jí)語(yǔ)言源代碼(115)。接下來(lái),方法100可定義第一函數(shù)和第二函數(shù)(比如上述f和g)以及將在對(duì)每個(gè)字節(jié)代碼進(jìn)行編碼時(shí)使用的先前字節(jié)代碼的數(shù)量(120)。然后,方法100可以針對(duì)每個(gè)字節(jié)代碼確定是否需要掩碼值(125)。備選地,在該步驟處,可在作為跳指令的目的地的任意字節(jié)代碼之前添加η個(gè)NOOP字節(jié)代碼。此外,取而代之地,可按上文所述下移任意跳目的地。然后,選擇下一個(gè)要處理的字節(jié)代碼(130)。接下來(lái),方法100可以確定η個(gè)先前字節(jié)代碼(135)。然后,可按上文所述使用前η個(gè)字節(jié)代碼和第一和第二函數(shù)對(duì)當(dāng)前字節(jié)代碼進(jìn)行編碼(140)。接下來(lái),方法100可以確定是否存在更多字節(jié)代碼要編碼(145)。如果是的話,則方法選擇下一個(gè)用于處理的字節(jié)代碼(130)并重復(fù)步驟135和140。如果不是的話,則方法100在150處結(jié)束。
[0097]所述方法還可以包括按照上文所述使用中間數(shù)據(jù)值來(lái)對(duì)任意給定的字節(jié)代碼進(jìn)行編碼。當(dāng)編譯代碼時(shí),該方法可全部在編譯器中執(zhí)行。此外,在已經(jīng)編譯了代碼之后,可以獨(dú)立于編譯器來(lái)應(yīng)用其中的許多步驟。在上文所述的實(shí)施例中對(duì)方法100中的步驟的多個(gè)方面進(jìn)行了討論。此外,該方法可運(yùn)行于機(jī)器代碼或其它類型的計(jì)算機(jī)指令,以便對(duì)其操作進(jìn)行模糊處理。
[0098]一種根據(jù)本發(fā)明的實(shí)施例的方法可作為計(jì)算機(jī)實(shí)現(xiàn)方法實(shí)現(xiàn)在計(jì)算機(jī)系統(tǒng)上。針對(duì)根據(jù)本發(fā)明的方法的可執(zhí)行代碼可存儲(chǔ)在計(jì)算機(jī)程序介質(zhì)上。計(jì)算機(jī)程序介質(zhì)的示例包括存儲(chǔ)器設(shè)備、光存儲(chǔ)設(shè)備、集成電路、服務(wù)器、在線軟件等。這種計(jì)算機(jī)系統(tǒng)還可包括其他硬件元件,包括存儲(chǔ)器、用于與外部系統(tǒng)以及在計(jì)算機(jī)系統(tǒng)的元件之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)接
□ O
[0099]在本發(fā)明的實(shí)施例中,計(jì)算機(jī)程序可包括適于在計(jì)算機(jī)程序運(yùn)行于計(jì)算機(jī)上時(shí)執(zhí)行根據(jù)本發(fā)明的方法的所有步驟的計(jì)算機(jī)程序代碼。優(yōu)選地,計(jì)算機(jī)程序?qū)崿F(xiàn)在非瞬時(shí)計(jì)算機(jī)可讀介質(zhì)上。
[0100]一種根據(jù)本發(fā)明創(chuàng)建經(jīng)掩蓋的代碼的方法可作為計(jì)算機(jī)實(shí)現(xiàn)方法實(shí)現(xiàn)在計(jì)算機(jī)上。針對(duì)根據(jù)本實(shí)施例的方法的可執(zhí)行代碼可存儲(chǔ)在計(jì)算機(jī)程序介質(zhì)上。在這種方法中,計(jì)算機(jī)程序可包括適于在計(jì)算機(jī)程序運(yùn)行于計(jì)算機(jī)上時(shí)執(zhí)行方法的所有步驟的計(jì)算機(jī)程序代碼。計(jì)算機(jī)程序?qū)崿F(xiàn)在非瞬時(shí)計(jì)算機(jī)可讀介質(zhì)上。
[0101]運(yùn)行于處理器上的用來(lái)實(shí)現(xiàn)本發(fā)明的實(shí)施例的特定軟件的任意組合構(gòu)成特定專用機(jī)器。
[0102]本文使用的術(shù)語(yǔ)“非瞬時(shí)機(jī)器可讀存儲(chǔ)介質(zhì)”將被理解為排除瞬時(shí)傳播信號(hào),但包括所有形式的易失性和非易失性存儲(chǔ)器。此外,本文使用的術(shù)語(yǔ)“處理器”將被理解為涵蓋多種類型的設(shè)備,比如微處理器、現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)、專用集成電路(ASIC)和其它類似的處理設(shè)備。當(dāng)在處理器上實(shí)現(xiàn)軟件時(shí),組合變成單個(gè)特定機(jī)器。
[0103]雖然特別地參照多種示例性實(shí)施例的某些示例性方面對(duì)多種示例性實(shí)施例進(jìn)行了具體描述,但應(yīng)該理解的是,本發(fā)明能夠具有其它實(shí)施例并且能夠在多個(gè)明顯的方面對(duì)其細(xì)節(jié)進(jìn)行修改。對(duì)于本領(lǐng)域技術(shù)人員顯而易見(jiàn)的是,在保持在本發(fā)明的精神和范圍內(nèi)的同時(shí),可以進(jìn)行各種變形和修改。從而,前述公開(kāi)、說(shuō)明書(shū)和附圖只是為了說(shuō)明,而不以任何方式限制本發(fā)明,本發(fā)明僅由權(quán)利要求限定。
【主權(quán)項(xiàng)】
1.一種對(duì)包括多個(gè)指令的軟件代碼進(jìn)行掩蓋的方法,包括: 由處理器確定針對(duì)當(dāng)前指令的N個(gè)先前指令; 基于第一函數(shù)、第二函數(shù)和所述N個(gè)先前指令對(duì)所述當(dāng)前指令進(jìn)行編碼, 其中所述第二函數(shù)基于所述N個(gè)先前指令,以及 所述第一函數(shù)基于所述當(dāng)前指令和所述第二函數(shù)的輸出。2.根據(jù)權(quán)利要求1所述的方法,還包括: 確定在所述N個(gè)先前指令或所述當(dāng)前指令中存在連接點(diǎn); 當(dāng)存在連接點(diǎn)時(shí),針對(duì)所述連接點(diǎn)之前的每個(gè)先前指令產(chǎn)生掩碼值,其中所述掩碼是基于所述連接點(diǎn)之前的并行指令中的公共比特設(shè)置的;以及將所述掩碼與所述當(dāng)前指令相關(guān)聯(lián)。3.根據(jù)權(quán)利要求1所述的方法,還包括: 確定在所述N個(gè)先前指令或所述當(dāng)前指令中存在連接點(diǎn); 當(dāng)存在連接點(diǎn)時(shí),在所述連接點(diǎn)之前插入I個(gè)NOOP指令,其中I是所述連接點(diǎn)之前的先前指令的數(shù)量。4.根據(jù)權(quán)利要求1所述的方法,還包括: 確定在所述N個(gè)先前指令或所述當(dāng)前指令中存在連接點(diǎn); 當(dāng)存在連接點(diǎn)時(shí),將所述連接點(diǎn)下移I個(gè)指令,其中I是所述連接點(diǎn)之前的先前指令的數(shù)量。5.根據(jù)權(quán)利要求1所述的方法,還包括: 接收采用更高級(jí)語(yǔ)言的軟件代碼;以及 將所接收的軟件代碼編譯成機(jī)器可執(zhí)行指令。6.根據(jù)權(quán)利要求1所述的方法,還包括: 接收采用更高級(jí)語(yǔ)言的軟件代碼;以及 將所接收的軟件代碼解譯成機(jī)器可執(zhí)行指令。7.根據(jù)權(quán)利要求1所述的方法,還包括:產(chǎn)生密鑰,其中所述密鑰與針對(duì)第一當(dāng)前指令的N個(gè)先前指令相對(duì)應(yīng)。8.根據(jù)權(quán)利要求1所述的方法,其中,所述N個(gè)先前指令是N個(gè)先前經(jīng)編碼的指令。9.根據(jù)權(quán)利要求1所述的方法,還包括: 由處理器確定與當(dāng)前指令之前的所述N個(gè)先前指令相關(guān)聯(lián)的M個(gè)先前數(shù)據(jù)值;以及其中對(duì)所述當(dāng)前指令進(jìn)行編碼還基于所述M個(gè)數(shù)據(jù)值,其中所述第二函數(shù)還基于所述M個(gè)先前數(shù)據(jù)值。10.根據(jù)權(quán)利要求9所述的方法,還包括:產(chǎn)生密鑰,其中所述密鑰與針對(duì)第一當(dāng)前指令的N個(gè)先前指令和M個(gè)先前數(shù)據(jù)值相對(duì)應(yīng)。11.一種對(duì)包括多個(gè)經(jīng)編碼的指令的經(jīng)掩蓋的軟件代碼進(jìn)行解碼的方法,包括: 由處理器確定針對(duì)當(dāng)前經(jīng)編碼的指令的N個(gè)先前經(jīng)編碼的指令; 基于第一函數(shù)、第二函數(shù)和所述N個(gè)先前經(jīng)解碼的指令對(duì)所述當(dāng)前經(jīng)編碼的指令進(jìn)行解碼, 其中所述第二函數(shù)基于所述N個(gè)先前經(jīng)解碼的指令,以及 所述第一函數(shù)基于所述當(dāng)前經(jīng)編碼的指令和所述第二函數(shù)的輸出。12.根據(jù)權(quán)利要求11所述的方法,還包括:接收密鑰,其中所述密鑰與針對(duì)第一經(jīng)編碼的當(dāng)前指令的N個(gè)先前指令相對(duì)應(yīng)。
【專利摘要】一種對(duì)包括多個(gè)指令的軟件代碼進(jìn)行掩蓋的方法,包括:由處理器確定針對(duì)當(dāng)前指令的N個(gè)先前指令;基于第一函數(shù)、第二函數(shù)和所述N個(gè)先前指令對(duì)當(dāng)前指令進(jìn)行編碼,其中所述第二函數(shù)基于所述N個(gè)先前指令,并且其中所述第一函數(shù)基于當(dāng)前指令和所述第二函數(shù)的輸出。
【IPC分類】G06F21/14
【公開(kāi)號(hào)】CN105095698
【申請(qǐng)?zhí)枴緾N201510245908
【發(fā)明人】簡(jiǎn)·胡格布魯格, W·P·A·J·米歇爾斯
【申請(qǐng)人】恩智浦有限公司
【公開(kāi)日】2015年11月25日
【申請(qǐng)日】2015年5月14日
【公告號(hào)】EP2947590A1, US20150332027