基于編譯器的混淆的制作方法
【專利說明】
【背景技術】
[0001]與開發(fā)應用程序及其它代碼相關聯(lián)的一個挑戰(zhàn)是保護代碼的敏感部分不被修改、禁用或逆向工程。例如,可執(zhí)行被設計成實現(xiàn)用于應用程序模塊的電子許可和/或數(shù)字權限管理的代碼部分的保護,以防止第三方圍繞代碼進行工作而非法地使用和/或分發(fā)該應用程序模塊。開發(fā)者可直接地在對應用程序進行源編碼的同時添加一些保護措施,然而,這對于開發(fā)者而言可能是相當麻煩且耗費時間的。另一方法涉及到在由編譯器輸出文件之后向已編譯的二進制文件施加保護。然而,使已編譯二進制碼混淆可以使得一些二進制碼變得不穩(wěn)定,限制可用的混淆和代碼優(yōu)化的類型,并且增加開發(fā)過程的復雜性和時間。此外,被用于傳統(tǒng)混淆的一些技術在運行時間或者通過磁盤上的二進制碼的靜態(tài)分析來檢測是相當簡單的,特別是由老練的黑客。傳統(tǒng)混淆技術的這些及其它復雜性充當使得其低效且抑制開發(fā)者向其代碼添加有效保護的障礙。
【發(fā)明內容】
[0002]描述了基于編譯器的混淆。為了用混淆來保護代碼項目的各部分,作為編譯過程的一部分在編譯器內修改該代碼以產(chǎn)生使代碼混淆的一個或多個修改。生成代碼的已編譯版本,其具有在編譯器內產(chǎn)生的修改。在一個方法中,將編譯器配置成消耗混淆描述,該混淆描述指示要保護的代碼部分并指定要對所指示部分進行的修改。可在編譯過程期間執(zhí)行代碼的各種不同修改以實現(xiàn)相應的混淆特征。例如,在編譯器內進行的修改可包括但不限于被設計成使得能夠實現(xiàn)代碼的篡改檢測、反調試和/或加密的修改。
[0003]本
【發(fā)明內容】
被提供用來以簡化形式介紹下面在【具體實施方式】中進一步描述的概念的選擇。本
【發(fā)明內容】
并不意圖標識要求保護的主題的關鍵特征或必要特征,其也不意圖用作確定要求保護的主題的范圍的輔助。
【附圖說明】
[0004]參考附圖來描述【具體實施方式】。在圖中,附圖標記的(多個)最左數(shù)字標識該附圖標記第一次在其中出現(xiàn)的圖。相同附圖標記在本描述和圖中的不同實例中的使用可指示類似或相同的項目。
[0005]圖1是可操作用于采用基于編譯器的混淆技術的示例實施方式中的環(huán)境的圖示。
[0006]圖2是描述表示可發(fā)生以產(chǎn)生用混淆保護的已編譯代碼的操作的基于編譯器的示例混淆的圖。
[0007]圖3是描繪其中作為針對開發(fā)項目的編譯代碼的一部分產(chǎn)生用混淆保護的已編譯代碼的示例實施方式中的工序的流程圖。
[0008]圖4是描繪其中作為編譯過程的一部分對中間語言代碼進行修改以產(chǎn)生已混淆代碼的示例實施方式中的工序的流程圖。
[0009]圖5是描繪其中經(jīng)由集成開發(fā)環(huán)境來執(zhí)行基于編譯器的混淆的示例實施方式中的工序的流程圖。
[0010]圖6圖示出可以用來實現(xiàn)本文所述的技術的實施例的示例系統(tǒng)和系統(tǒng)的部件。
【具體實施方式】
[0011]概沭
開發(fā)者使用傳統(tǒng)混淆技術向其代碼添加有效的保護以防止第三方非法地使用或分發(fā)代碼可能是困難或不可能的。在源編碼期間或者對由編譯器輸出的已編譯二進制碼應用的傳統(tǒng)混淆技術可提供有限的保護選項,使用在運行時間檢測起來相當簡單的技術,和/或增加開發(fā)過程的時間/復雜性/成本。
[0012]在本文中描述了基于編譯器的混淆。為了用混淆來保護代碼項目的各部分,作為編譯過程的一部分在編譯器內修改該代碼以產(chǎn)生使代碼混淆的一個或多個修改。生成代碼的已編譯版本,其具有在編譯器內產(chǎn)生的修改。在一個方法中,將編譯器配置成消耗混淆描述,該混淆描述指示要保護的代碼部分并指定要對所指示部分進行的修改??稍诰幾g過程期間執(zhí)行代碼的各種不同修改以實現(xiàn)相應的混淆特征。例如,在編譯器內進行的修改可包括但不限于被設計成使得能夠實現(xiàn)代碼的加密、反調試和/或篡改檢測的修改。
[0013]在以下討論中,首先描述可采用本文所述的基于編譯器的混淆技術的示例環(huán)境。接下來,描述圖示出基于編譯器的混淆的示例細節(jié)的示例過程流程情形。然后描述可在該示例環(huán)境以及其它環(huán)境中執(zhí)行的示例工序。因此,示例工序的執(zhí)行不限于該示例環(huán)境,并且該示例環(huán)境不限于示例工序的執(zhí)行。最后,描述可以在基于編譯器的混淆的一個或多個實施方式中采用的示例系統(tǒng)和該系統(tǒng)的部件。
[0014]示例操作環(huán)境
圖1是可操作用于采用本文所述的技術的示例實施方式中的環(huán)境100的圖示。所圖示的環(huán)境100包括經(jīng)由網(wǎng)絡106被通信耦合的計算設備102和web服務104??蓪⒂嬎阍O備102配置成訪問通過網(wǎng)絡106經(jīng)由web服務104使得可用的多種資源105 (例如,內容和服務)并與之相交互。計算設備102和web服務104每個可由范圍廣泛的計算設備實現(xiàn)。
[0015]例如,可將計算設備102配置為能夠通過網(wǎng)絡106進行通信的計算機,諸如臺式計算機、移動站、娛樂裝置、平板電腦或平板型設備、表面計算設備、被通信耦合到顯示設備的機頂盒、移動通信設備(例如,無線電話)、游戲控制臺等??蓪⒂嬎阍O備102配置為采用各種處理系統(tǒng)的任何適當?shù)挠嬎阆到y(tǒng)和/或設備,相對于圖6的示例系統(tǒng)來討論其一些附加示例。
[0016]計算設備102被進一步圖示為包括操作系統(tǒng)108。一般而言,操作系統(tǒng)108被配置成將計算設備102的底層功能抽象化成可在計算設備102上執(zhí)行的應用程序110。例如,操作系統(tǒng)108可將計算設備102的處理、存儲器、網(wǎng)絡和/或顯示功能進行抽象,使得可在不知道“如何”實現(xiàn)此底層功能的情況下編寫應用程序110。應用程序110例如可向操作系統(tǒng)108提供數(shù)據(jù)以由顯示設備再現(xiàn)和顯示而不知道此再現(xiàn)將如何執(zhí)行。操作系統(tǒng)108可提供應用程序I1可調用以利用系統(tǒng)特征的各種服務、接口以及功能。設想向計算設備102提供范圍廣泛的功能的多種應用程序110,包括但不限于瀏覽器、辦公室生產(chǎn)率應用程序、電子郵件客戶端、多媒體管理程序、設備管理軟件、軟件開發(fā)環(huán)境和聯(lián)網(wǎng)應用程序,僅舉幾個示例。
[0017]計算設備102還包括開發(fā)模塊112,其表示可操作用于提供用于開發(fā)應用程序110的集成開發(fā)環(huán)境(IDE)的功能。開發(fā)模塊112—般地提供應用程序生命周期管理,包括對于應用程序的設計、開發(fā)、測試和/或部署的支持。開發(fā)模塊112可支持不同的編程語言并將不同的部件集成以簡化應用程序開發(fā),諸如代碼編輯器、一個或多個編譯器、構建自動化工具、調試器等。因此,開發(fā)模塊112提供用于開發(fā)者創(chuàng)建/編輯用于項目的源內容/代碼并編譯該源內容/代碼以構建應用程序110的功能。
[0018]根據(jù)本文所述的技術,開發(fā)模塊112還可包括或者另外利用如本文所述地操作的編譯器模塊114和混淆模塊116。編譯器模塊114表示可操作用于實現(xiàn)編譯過程以將用于開發(fā)項目的源代碼文件變換成機器語言代碼和可執(zhí)行指令(例如,目標代碼、二進制文件、可執(zhí)行文件等)的功能。編譯器模塊114可包括多個不同的子模塊、處理步驟和/或編譯階段。例如,編譯器模塊可包括前端編譯器和后端編譯器兩者。雖然被圖示為單獨的模塊,但還可將混淆模塊116提供為編譯器模塊114的集成部件。此外,在一些實施方式中,可將開發(fā)模塊112、編譯器模塊114和/或混淆模塊116中的一個或多個配置為使得可通過網(wǎng)絡106被客戶端訪問的web服務(例如,作為“在云中”的開發(fā)服務或混淆服務)。在本示例中,開發(fā)者可能能夠通過與web服務104的交互來開發(fā)應用程序,所述web服務104提供包括代碼混淆工具/接口作為在線可用的資源105的應用程序開發(fā)工具。
[0019]混淆模塊116表示可操作使得代碼混淆技術能夠作為編譯過程的一部分由編譯器模塊114執(zhí)行的功能。一般而言,如本文所使用的混淆指代以不同的方式修改代碼以使得其難以理解??刹捎没煜齺黼[藏代碼的意義和目的,即使代碼被以明文攔截和查看。這創(chuàng)建針對可嘗試對代碼進行篡改或逆向工程的“黑客”的一定水平的保護。與傳統(tǒng)技術相反,混淆在編譯過程期間發(fā)生。因此可將編譯器模塊114配置成在編譯期間調用混淆模塊116、與之相交互或者另外利用混淆模塊116以施加修改來使源代碼的至少一些部分混淆。在至少一些實施方式中,開發(fā)者可與開發(fā)模塊112和/或混淆模塊116相交互以產(chǎn)生混淆描述以指定要用混淆來保護的源代碼的特定部分以及定義用于該部分的修改??捎弥噶顏砼渲迷摶煜枋觯鲋噶钸m合于命令編譯器模塊114在編譯期間實現(xiàn)對源代碼的指定部分的修改。設想用以使代碼混淆的各種不同種類的修改和技術,相對于以下各圖來描述其示例。
[0020]已考慮了示例操作環(huán)境,現(xiàn)在考慮根據(jù)一個或多個實施例的用于基于編譯器的混淆的一些示例細節(jié)。
[0021]基于編譯器的混淆細節(jié)
以下討論描述可利用先前所述的系統(tǒng)和設備來實現(xiàn)的基于編譯器的混淆技術的實施方式細節(jié)。參考圖2中描繪的示例情形來描述基于編譯器的混淆的各方面。特別地,圖2一般地在200處描繪了關于開發(fā)模塊112的部件和操作的細節(jié),根據(jù)一些實施方式,開發(fā)模塊112可被用來通過在編譯期間對代碼進行混淆來產(chǎn)生受保護的已編譯代碼。
[0022]在操作中,開發(fā)者可使用開發(fā)模塊112在用于應用程序的項目中設計、定義、創(chuàng)建和編輯源代碼202 (例如,代碼模塊、內容、腳本、圖像、式樣、注釋等)。開發(fā)模塊112可支持用一個或多個不同編程語言進行的軟件編程。一般地,可以各種不同的編程語言、IDE、編譯器等來采用本文所述的基于編譯器的混淆技術。
[0023]作為開發(fā)項目的一部分,可調用混淆模塊116以產(chǎn)生與源代碼202相關聯(lián)的混淆描述204。在一個方法中,可使接口暴露,其使得開發(fā)者能夠進行選擇以產(chǎn)生用于源代碼202的各部分的混淆描述204。如