通過根據校驗和計算目標地址的代碼完整性保護的制作方法
【專利說明】通過根據校驗和計算目標地址的代碼完整性保護
[0001]相關申請的交叉引用
[0002]本申請涉及發明人是“Hoogerbrugge等”、題為“CONTROLFLOW FLATTENING FORCODE OBFUSCAT1N WHERE THE NEXT BLOCK CALCULAT1N NEEDS RUN-TIME INFORMAT1N”的美國專利申請N0.14/259,395 (以下稱為“Hoogerbrugge” ),通過引用將其并入本文并且完全等同于在本文中闡述。
技術領域
[0003]本文公開的各示例性實施例一般地涉及針對下一個塊計算需要運行時間信息的代碼混淆的控制流平展。
【背景技術】
[0004]如今,軟件應用廣泛用于向用戶提供各種服務。這些軟件應用可以容宿在各種不同的設備上,例如,移動電話、個人計算機、膝上型計算機、平板、機頂盒等。消費者或工業系統使用的很多系統中都能見到軟件應用。軟件應用還出現于智能卡和信用卡中。此外,軟件應用可以在諸如互聯網的網絡(其中軟件應用在服務器上運行)上實現并且可以通過使用各種用戶設備來訪問。其中很多軟件應用需要使用安全協議來保護內容、信息、交易以及隱私。很多軟件應用運行在如下環境中:攻擊者可以完全控制軟件應用的操作,并且攻擊者可以試圖對軟件應用的代碼進行反向工程以獲得對安全信息的訪問權,甚至理解軟件的操作以再現或修改軟件應用的功能。攻擊者可以使用各種反向工程工具,例如代碼分析器和調試器,以獲得與軟件應用相關的信息。因此,已開發使攻擊者難以對軟件進行反向工程的技術。一種增加代碼反向工程的難度的方法是代碼混淆。代碼混淆力圖創建人類難以理解的混淆式代碼。代碼混淆可用于隱藏軟件應用的目的或者其邏輯,從而保護軟件應用不被篡改或反向工程。
【發明內容】
[0005]以下將提出各示例性實施例的概述。以下概述有一些簡化和省略,其旨在突出和介紹各示例性實施例的一些方面,但不限制本發明。之后的部分對示例性實施例的進行描述,其足以使本領域技術人員能夠制造和使用本發明構思。
[0006]各示例性實施例涉及一種混淆包括多個基本塊的軟件代碼的方法,包括:由處理器計算當前基本塊的校驗和值以及指向當前基本塊的結尾的指針;確定當前基本塊的在先基本塊;將當前基本塊的校驗和值插入到在先基本塊中;以及基于當前基本塊的校驗和值,將指令插入到在先基本塊中以確定指向當前基本塊的開始的指針。
[0007]描述各實施例,其中一種非瞬態機器可讀存儲介質,其編碼有用于由處理器執行的軟件代碼的當前基本塊的指令,所述非瞬態機器可讀存儲介質包括:用于初始化下一個基本塊的校驗和值的指令;用于設置指向下一個基本塊的結尾的指針的指令;以及用于確定下一個基本塊的開始的指令。
[0008]描述各實施例,還包括一種校驗用于由處理器執行的軟件代碼的完整性的方法,包括:初始化下一個基本塊的校驗和值;設置指向下一個基本塊的結尾的指針;確定下一個基本塊的開始。
【附圖說明】
[0009]為更好地理解各示例性實施例,參考以下附圖,其中:
[0010]圖1示出了混淆軟件代碼的方法;以及
[0011]圖2示出了用于向用戶設備提供安全內容和對該安全內容進行處理的軟件應用的系統。
[0012]為幫助理解,使用相同的附圖標記來表示具有實質相同或相似結構和/或實質相同或相似功能的元件。
【具體實施方式】
[0013]說明書和附圖示出了本發明的原理。因此,可以理解,本領域技術人員將能夠設計本文中未明確描述或示出、但體現本發明的原理并包括在本發明范圍內的各種裝置。此外,本文所述的全部示例主要旨在明確地用于示范目的,以幫助讀者來理解發明人為推進技術所貢獻的本發明的原理和構思,并且應被理解為不對具體陳述的示例和條件進行限制。此外,除非另有指示(例如,“否則”或“備選地”),本文使用的術語“或”指代非排除性的或(即,和/或)。此外,本文描述的各實施例不必相互排斥,因為一些實施例可以與一個或多個其他實施例相組合以形成新的實施例。
[0014]軟件應用可以使用多個基本塊來實現。多個基本塊采用如下方式互連:一些塊構建在一個或多個在先塊的已處理數據之上。例如,基本塊可以使用包括算術指令的多個計算機指令,多個計算機指令一同來實現基本塊的功能。基本塊是軟件應用內只有一個入口點且只有一個出口點的的部分代碼。基本塊具有第一指令,并且當第一指令被執行時,基本塊中的其余指令必須按順序執行恰好一次。代碼混淆可用于實現軟件應用。在達到基本塊的結尾處后控制可轉移至的基本塊稱為該基本塊的在后塊。當進入基本塊時控制所來自的基本塊稱為該基本塊的在先塊。此外,代碼混淆可以與實現軟件應用(例如,查找表或有限狀態機)的其他方法一起使用,以防止對軟件應用的攻擊。
[0015]基本塊網絡被布置為執行軟件應用的功能。軟件應用可以接收由軟件應用操作的輸入信息。軟件應用將使得第一個基本塊啟動軟件應用,然后前進到下一個基本塊。接下來,還可以執行多個基本塊。基本塊的執行可以包括將數據從一個基本塊傳到另一個基本塊。通過這種方式,展現出基本塊網絡,其共同執行軟件應用的功能。
[0016]在很多情形中,例如在上述示例中,必須保護軟件應用不受攻擊者對其嘗試代碼反向工程。攻擊者可能使用精密工具來分析二進制形式的軟件,以理解軟件做什么以及軟件是如何工作的。一種進行這種分析的已知有效技術是控制流平展,其中功能控制流圖中的所有結構都被移除。每個基本塊在結尾時進行少量計算,以確定要執行的下一個基本塊。
該技術記載于 “Surreptit1us Software---Obfuscat1n, Water marking, and
Tamperproofing for Software Protect1n” ?Christian Collberg,Jasvir Nagra?Addison-Wesley Software Security Series?Editor:Gary McGraw,,第792頁,ISBN:0_321-54925-2,2009年8月。因此,希望進行這一計算,使得反向工程工具無法根據基本塊中的代碼來確定該基本塊可能具有的在后基本塊。已知其他技術,其中對在后基本塊的計算需要當前基本塊中不可用的信息。該技術記載于以下文獻中:“An overview of controlflow graph flattening”,Jan Cappaert and Bart Preneel,K.U.Leuven/ESAT/SCD-COSIC, re-trust.dit.unitn.1t/f iles/20081015Doc/sess1n2-lCappaert.pdf.
[0017]另一種公知的防止篡改的方法是在應用執行期間計算應用的二進制代碼的校驗和。如果代碼已被改變,則所計算的校驗和值將不同,并且應用可以基于不正確的校驗和來停止或改變其行為。校驗和方法所存在的問題是可以在代碼中檢測到校驗和計算,并且可以移除隨后對結果的校驗。其可以自動進行,從而從應用中移除數以千計的校驗和的校驗是可行的。
[0018]為解決這一問題,描述了將代碼完整性保護和控制流平展相組合的實施例。在控制流平展后,每個基本塊結束時進行少量計算,以確定將要執行的下一個基本塊的起始地址。下文描述的實施例包括對代碼執行校驗和計算以校驗下一個基本塊的完整性。如果由于代碼篡改導致校驗和計算錯誤,則下一個基本塊的計