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