基于最近執(zhí)行的程序代碼的程序代碼模糊處理的制作方法
【技術(shù)領(lǐng)域】
[0001]這里公開的各種示例性實(shí)施例一般地涉及基于最近執(zhí)行的程序代碼的程序代碼模糊處理。
【背景技術(shù)】
[0002]如今,軟件應(yīng)用廣泛地用來向用戶提供多種服務(wù)。這些軟件應(yīng)用可以寄宿在各種不同的設(shè)備上,比如移動電話、個人計(jì)算機(jī)、膝上型計(jì)算機(jī)、平板電腦、機(jī)頂盒等??稍谠S多由消費(fèi)者使用的系統(tǒng)中或工業(yè)系統(tǒng)中找到軟件應(yīng)用。還可在智能卡和信用卡中找到軟件應(yīng)用。此外,軟件應(yīng)用還可實(shí)現(xiàn)在網(wǎng)絡(luò)上,比如互聯(lián)網(wǎng),其中軟件應(yīng)用運(yùn)行于服務(wù)器上,并且使用多種用戶設(shè)備訪問軟件應(yīng)用。許多這種軟件應(yīng)用需要使用安全協(xié)議來保護(hù)內(nèi)容、信息、交易和隱私。許多軟件應(yīng)用運(yùn)行于這樣的環(huán)境中,即,攻擊者具有對軟件應(yīng)用的操作的完全或一些控制,并且攻擊者可以嘗試對軟件應(yīng)用的代碼進(jìn)行反向工程以便獲得對安全信息的訪問,或者嘗試甚至理解軟件的操作以便重現(xiàn)或修改軟件應(yīng)用的功能。攻擊者可使用多種反向工程工具,比如代碼分析器和調(diào)試器,以獲得與軟件應(yīng)用有關(guān)的信息。因此,已經(jīng)開發(fā)了技術(shù)來使得攻擊者難以對軟件進(jìn)行反向工程。一種用來使得對代碼進(jìn)行反向工程更加困難的方式是代碼模糊處理。代碼模糊處理試圖創(chuàng)建經(jīng)模糊處理的代碼,該經(jīng)模糊處理的代碼是人類難以理解的。代碼模糊處理可用來隱匿軟件應(yīng)用的目的或其邏輯,以防止對軟件應(yīng)用進(jìn)行篡改或反向工程。
【發(fā)明內(nèi)容】
[0003]以下給出對多種示例性實(shí)施例的簡要概述。可在以下概述中進(jìn)行一些簡化和省略,這是為了強(qiáng)調(diào)和介紹多個示例性實(shí)施例的某些方面,而不是為了限制本發(fā)明的范圍。在隨后的部分中將對足以使得本領(lǐng)域普通技術(shù)人員作出和使用創(chuàng)造性構(gòu)思的示例性實(shí)施例進(jìn)行具體描述。
[0004]多種示例性實(shí)施例涉及一種對包括多個指令的軟件代碼進(jìn)行掩蓋的方法,包括:由處理器確定針對當(dāng)前指令的N個先前指令;基于第一函數(shù)、第二函數(shù)和所述N個先前指令對當(dāng)前指令進(jìn)行編碼,其中所述第二函數(shù)基于所述N個先前指令,并且其中所述第一函數(shù)基于當(dāng)前指令和所述第二函數(shù)的輸出。
[0005]描述了多種實(shí)施例,還包括:確定在所述N個先前指令或當(dāng)前指令中存在連接點(diǎn);當(dāng)存在連接點(diǎn)時,針對所述連接點(diǎn)之前的每個先前指令產(chǎn)生掩碼值,其中所述掩碼是基于所述連接點(diǎn)之前的并行指令中的公共比特設(shè)置的;以及將所述掩碼與當(dāng)前指令相關(guān)聯(lián)。
[0006]描述了多種實(shí)施例,還包括:確定在所述N個先前指令或當(dāng)前指令中存在連接點(diǎn);當(dāng)存在連接點(diǎn)時,在所述連接點(diǎn)之前插入I個NOOP指令,其中I是所述連接點(diǎn)之前的先前指令的數(shù)量。
[0007]描述了多種實(shí)施例,還包括:確定在所述N個先前指令或當(dāng)前指令中存在連接點(diǎn);當(dāng)存在連接點(diǎn)時,將所述連接點(diǎn)下移I個指令,其中I是所述連接點(diǎn)之前的先前指令的數(shù)量。
[0008]描述了多種實(shí)施例,還包括:接收采用更高級語言的軟件代碼;以及將所接收的軟件代碼編譯成機(jī)器可執(zhí)行指令。
[0009]描述了多種實(shí)施例,還包括:接收采用更高級語言的軟件代碼;以及將所接收的軟件代碼解譯成機(jī)器可執(zhí)行指令。
[0010]描述了多種實(shí)施例,還包括:產(chǎn)生密鑰,其中所述密鑰與針對第一當(dāng)前指令的N個先前指令相對應(yīng)。
[0011]描述了多種實(shí)施例,其中所述N個先前指令是N個先前經(jīng)編碼的指令。
[0012]描述了多種實(shí)施例,還包括:由處理器確定與在當(dāng)前指令之前的所述N個先前指令相關(guān)聯(lián)的M個先前數(shù)據(jù)值;以及其中對當(dāng)前指令進(jìn)行編碼還基于所述M個數(shù)據(jù)值,其中所述第二函數(shù)還基于所述M個先前數(shù)據(jù)值。
[0013]描述了多種實(shí)施例,還包括:產(chǎn)生密鑰,其中所述密鑰與針對第一當(dāng)前指令的N個先前指令和M個先前數(shù)據(jù)值相對應(yīng)。
[0014]此外,多種示例性實(shí)施例涉及一種對包括多個經(jīng)編碼的指令的經(jīng)掩蓋的軟件代碼進(jìn)行解碼的方法,包括:由處理器確定針對當(dāng)前經(jīng)編碼的指令的N個先前經(jīng)編碼的指令;基于第一函數(shù)、第二函數(shù)和所述N個先前經(jīng)解碼的指令對當(dāng)前經(jīng)編碼的指令進(jìn)行解碼,其中所述第二函數(shù)基于所述N個先前經(jīng)解碼的指令,并且其中所述第一函數(shù)基于當(dāng)前經(jīng)編碼的指令和所述第二函數(shù)的輸出。
[0015]描述了多種實(shí)施例,還包括:接收密鑰,其中所述密鑰與針對第一經(jīng)編碼的當(dāng)前指令的N個先前指令相對應(yīng)。
[0016]此外,多種示例性實(shí)施例涉及編碼有用于由處理器執(zhí)行的指令的非瞬時機(jī)器可讀存儲介質(zhì),所述指令用于對包括多個指令的軟件代碼進(jìn)行掩蓋,所述非瞬時機(jī)器可讀存儲介質(zhì)包括:用于確定針對當(dāng)前指令的N個先前指令的指令;用于基于第一函數(shù)、第二函數(shù)和所述N個先前指令對當(dāng)前指令進(jìn)行編碼的指令,其中所述第二函數(shù)基于所述N個先前指令,并且其中所述第一函數(shù)基于當(dāng)前指令和所述第二函數(shù)的輸出。
[0017]描述了多種實(shí)施例,還包括:用于確定在所述N個先前指令或當(dāng)前指令中存在連接點(diǎn)的指令;用于當(dāng)存在連接點(diǎn)時針對所述連接點(diǎn)之前的每個先前指令產(chǎn)生掩碼值的指令,其中所述掩碼是基于所述連接點(diǎn)之前的并行指令中的公共比特設(shè)置的;以及用于將所述掩碼與當(dāng)前指令相關(guān)聯(lián)的指令。
[0018]描述了多種實(shí)施例,還包括:用于確定在所述N個先前指令或當(dāng)前指令中存在連接點(diǎn)的指令;用于當(dāng)存在連接點(diǎn)時在所述連接點(diǎn)之前插入I個NOOP指令的指令,其中I是所述連接點(diǎn)之前的先前指令的數(shù)量。
[0019]描述了多種實(shí)施例,還包括:用于確定在所述N個先前指令或當(dāng)前指令中存在連接點(diǎn)的指令;用于當(dāng)存在連接點(diǎn)時將所述連接點(diǎn)下移I個指令的指令,其中I是所述連接點(diǎn)之前的先前指令的數(shù)量。
[0020]描述了多種實(shí)施例,還包括:用于接收采用更高級語言的軟件代碼的指令;以及用于將所接收的軟件代碼編譯成機(jī)器可執(zhí)行指令的指令。
[0021]描述了多種實(shí)施例,還包括:用于接收采用更高級語言的軟件代碼的指令;以及用于將所接收的軟件代碼解譯成機(jī)器可執(zhí)行指令的指令。
[0022]描述了多種實(shí)施例,還包括:用于產(chǎn)生密鑰的指令,其中所述密鑰與針對第一當(dāng)前指令的N個先前指令相對應(yīng)。
[0023]描述了多種實(shí)施例,其中所述N個先前指令是N個先前經(jīng)編碼的指令。
[0024]描述了多種實(shí)施例,還包括:用于由處理器確定與當(dāng)前指令之前的所述N個先前指令相關(guān)聯(lián)的M個先前數(shù)據(jù)值的指令;以及其中對當(dāng)前指令進(jìn)行編碼還基于所述M個數(shù)據(jù)值,其中所述第二函數(shù)還基于所述M個先前數(shù)據(jù)值。
[0025]描述了多種實(shí)施例,還包括:用于產(chǎn)生密鑰的指令,其中所述密鑰與針對第一當(dāng)前指令的N個先前指令和M個先前數(shù)據(jù)值相對應(yīng)。
[0026]此外,多種示例性實(shí)施例涉及編碼有用于由處理器執(zhí)行的指令的非瞬時機(jī)器可讀存儲介質(zhì),所述指令用于對包括多個經(jīng)編碼的指令的經(jīng)掩蓋的軟件代碼進(jìn)行解碼,所述非瞬時機(jī)器可讀存儲介質(zhì)包括:用于確定針對當(dāng)前經(jīng)編碼的指令的N個先前經(jīng)編碼的指令的指令;用于基于第一函數(shù)、第二函數(shù)和所述N個先前經(jīng)解碼的指令對當(dāng)前經(jīng)編碼的指令進(jìn)行解碼的指令,其中所述第二函數(shù)基于所述N個先前經(jīng)解碼的指令,并且其中所述第二函數(shù)基于當(dāng)前經(jīng)編碼的指令和所述第二函數(shù)的輸出。
[0027]描述了多種實(shí)施例,還包括:用于接收密鑰的指令,其中所述密鑰與針對第一經(jīng)編碼的當(dāng)前指令的N個先前指令相對應(yīng)。
【附圖說明】
[0028]為了更好地理解各種示例性實(shí)施例,參考附圖,其中:
[0029]圖1示出了對軟件代碼進(jìn)行掩蓋的方法。
[0030]為了便于理解,使用相同的附圖標(biāo)記來指代具有實(shí)質(zhì)上相同或相似的結(jié)構(gòu)和/或?qū)嵸|(zhì)上相同或相似的功能的元素。
【具體實(shí)施方式】
[0031]說明書和附圖示出了本發(fā)明的原理。因此,將理解的是,本領(lǐng)域技術(shù)人員將能夠設(shè)想出實(shí)現(xiàn)本發(fā)明的原理并且包括在其范圍內(nèi)的各種布置(盡管這里并未明確地描述或示出)。此外,這里記載的所有示例主要特別旨在用于教導(dǎo)目的,以便輔助讀者理解本發(fā)明的原理和發(fā)明人促進(jìn)現(xiàn)有技術(shù)所貢獻(xiàn)的構(gòu)思,并且應(yīng)被理解為不限于所特別描述的示例和條件。此外,除非另作指出(例如“或其它”或者“或在備選方式中”),本文中的術(shù)語“或”指代非排他性的“或”(即,和/或)。此外,本文描述的各個實(shí)施例并不必是互斥的,這是一些實(shí)施例可與一個或多個其它實(shí)施例組合,以形成新的實(shí)施例。
[0032]可使用程序代碼來實(shí)現(xiàn)軟件應(yīng)用??刹捎酶呒壵Z言來寫程序代碼