麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

一種在安全環(huán)境中生成代碼提高軟件保護強度的方法

文檔序號:6398992閱讀:152來源:國知局
專利名稱:一種在安全環(huán)境中生成代碼提高軟件保護強度的方法
技術領域
本發(fā)明涉及軟件版權保護技術,特別涉及到基于即時編譯的軟件保護方法。
背景技術
計算機軟件由于具有數(shù)字化的特征,因此很容易被復制和非法使用,軟件保護技術就是用來保護軟件版權、避免軟件被非法使用的技術。針對計算機軟件進行破解的主要方法就是調試,通過調試了解軟件運行的流程和邏輯,然后加以篡改,實現(xiàn)對軟件破解,由于運行計算機軟件的計算機硬件和操作系統(tǒng)平臺信息是公開的,并且都提供了對調試器的支持以便進行正常的軟件調試,因此,在這種環(huán)境下很難避免軟件被調試,所以,軟件保護的一個重要發(fā)展方向就是構造安全的運行環(huán)境,在安全環(huán)境中運行軟件的部分代碼,這樣,針對軟件進行分析就必須先分析出安全環(huán)境,提高了破解的難度。例如常見的虛擬機保護技術,使用未公開架構的虛擬機來運行軟件的部分代碼,破解者要調試這部分軟件代碼就必須分析出虛擬機的指令集。安全環(huán)境顯著提高了軟件調試的難度,特別是對于將安全環(huán)境置于智能卡硬件或者遠程服務器的情況,幾乎不可能對受保護的部分進行調試,從而可以實現(xiàn)非常高的保護強度。然而,由于構造安全環(huán)境要比構造普通的環(huán)境考慮的情況更加復雜,在安全環(huán)境中運行代碼的速度會大幅度降低,例如某些虛擬機保護方法甚至會使軟件的運行速度下降1000倍以上,且如果軟件本體和在安全環(huán)境中運行的代碼之間相互訪問頻繁的情況下,軟件的運行效率還會降低,從而降低安全環(huán)境這種軟件保護方式的可用性。

發(fā)明內容
本發(fā)明提供一種在安全環(huán)境中生成代碼提高受保護軟件保護強度的方法,所述安全運行環(huán)境是可運行代碼、具有安全防范功能、難以進行調試的計算機運行環(huán)境,
其中所述安全環(huán)境中運行代碼生成模塊,所述代碼生成模塊根據(jù)源輸入邏輯描述生成對應邏輯的可執(zhí)行代碼;其中,所述受保護軟件中具有調用模塊;
所述方法包括如下步驟:
抽取受保護軟件中的部分代碼;
將所述部分代碼轉換為源輸入邏輯描述;
在所述受保護軟件中被抽取代碼的位置插入調用模塊;
當所述受保護軟件運行到被抽取代碼的位置時,所述調用模塊將調用安全環(huán)境,報告運行環(huán)境信息;
所述安全環(huán)境中的所述代碼生成模塊根據(jù)所述運行環(huán)境信息生成與所述運行環(huán)境相關的執(zhí)行代碼;
將生成的與運行環(huán)境相關的所述執(zhí)行代碼填充到所述被抽取代碼的位置;
所述受保護軟件執(zhí)行所述執(zhí)行代碼。
根據(jù)本發(fā)明的一個方面,所述安全環(huán)境包括但不限于虛擬機、智能卡、遠程服務器。根據(jù)本發(fā)明的一個方面,每次生成的執(zhí)行代碼不完全相同。根據(jù)本發(fā)明的一個方面,所述生成的執(zhí)行代碼是完成相同的功能的等效代碼。根據(jù)本發(fā)明的一個方面,在執(zhí)行完所述執(zhí)行代碼之后,將受保護軟件中的這部分生成的執(zhí)行代碼清除。


附圖1為按照本發(fā)明的在安全環(huán)境中生存代碼的軟件保護方法的一優(yōu)選實施例的流程示意圖。
具體實施例方式為使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明進一步詳細說明。有鑒于此,本發(fā)明提供了一種利用安全環(huán)境動態(tài)生成軟件代碼的軟件保護方法和系統(tǒng),可以在基本不影響軟件運行效率的情況下獲得相對較高的安全性。本發(fā)明包括安全運行環(huán)境,運行在安全環(huán)境中的代碼生成模塊,受保護軟件中加入的調用模塊。所述安全運行環(huán)境是可運行代碼,但是具有安全防范功能、難以進行調試的計算機運行環(huán)境,例如運行在受保護軟件所在進程中的虛擬機、智能卡、遠程服務器等。所述代碼生成模塊可以根據(jù)源輸入邏輯描述生成對應邏輯的可執(zhí)行代碼。所述受保護軟件中的調用模塊用于替代被抽取的代碼,當運行到被抽取代碼的位置時,調用模塊調用安全環(huán)境,提交運行環(huán)境信息。步驟A,將受保護軟件中的部分代碼抽取出來,并轉換為代碼生成模塊的源輸入邏輯描述,而且在被抽取代碼的位置插入調用模塊。步驟B,當受保護軟件運行到被抽取代碼的位置時,調用模塊將調用安全環(huán)境,報告運行環(huán)境信息,安全環(huán)境中的代碼生成模塊根據(jù)運行環(huán)境信息生成與運行環(huán)境相關的執(zhí)行代碼。步驟C,將生成的代碼填充到被抽取的位置,軟件執(zhí)行此代碼。其中,根據(jù)本發(fā)明的一種實施方式,在上述步驟B中,每次生成的代碼可以不完全相同,例如用等效的指令完成相同的功能,使用不同的優(yōu)化方式,這可以增加調試和分析的難度。其中,根據(jù)本發(fā)明的一種實施方式,在步驟C之后,還存在步驟D,執(zhí)行完生成的代碼之后,將受保護軟件中的這部分生成的代碼清除,降低被調試和分析的風險。其中,根據(jù)本發(fā)明的一種實施方式,受保護軟件中的調用模塊可通過其他方式替代,比如通過加載器的方式來加載執(zhí)行。運行環(huán)境相關的代碼指的是所述代碼運行依賴當前運行環(huán)境,一旦環(huán)境變化,代碼就不能運行,例如代碼中可以有當前CPU的特有指令(比如CPU型號等與當前計算機相關信息),或者使用絕對文件存儲位置(比如文件在硬盤盤符下的絕對路徑),通過多種此類方法的組合使用之后,其他計算機運行這些代碼幾乎是不可能的,甚至同一臺機器重新運行都可能存在問題。本實施例中安全環(huán)境是遠程服務器。本實施例中在服務器內部生成執(zhí)行代碼,服務器外部不知道具體代碼信息,也不知道相關代碼生成規(guī)則,并且每次都是由服務器根據(jù)環(huán)境相關信息生成的代碼,而且服務器端處于遠程,無法對服務器進行調試,因此遠程服務器是安全的運行環(huán)境。代碼生成模塊使用開源的GCC,(S卩,GNU Compiler Collection,中文術語為GNU編譯器套裝,是一套由GNU開發(fā)的編程語言編譯器),相對應的,從受保護軟件中抽取的代碼用GCC的源文件方式保存在遠程服務器上。根據(jù)本發(fā)明的一個實施方式,所述抽取操作可以根據(jù)指定的方式進行自動抽取或者進行人工抽取。根據(jù)本發(fā)明的一個實施方式,可按照C語言原始程序.c格式保存。根據(jù)本發(fā)明的一個實施方式,另外也可以根據(jù)需求或規(guī)劃自行定制保存位置。根據(jù)本發(fā)明的一個實施方式,假設要保護的軟件中存在如下函數(shù)代碼: int foo(int a)
{
b = a + I;return b;
}
此時需要保護“b = a + 1;”,同時將% = a + I;”在該函數(shù)代碼中原來的位置處替換為對安全環(huán)境的調用secureCallO。一旦替換之后,則該函數(shù)代碼變?yōu)?int foo(int a)
{
secureCall () ; /* 調用安全環(huán)境*/ return b;
}
其中,secureCall ()函數(shù)內部功能如下:
發(fā)送環(huán)境信息 接收字節(jié)碼 執(zhí)行字節(jié)碼
當軟件運行到secureCall ()的時候,secureCall ()負責和安全環(huán)境通信。根據(jù)本發(fā)明的一個實施方式,首先secureCall ()調用安全環(huán)境,向安全環(huán)境報告原受保護軟件的運行環(huán)境信息(如操作系統(tǒng)信息、地址、CPU型號等特有指令信息),安全環(huán)境中代碼生成模塊根據(jù)接收到的運行環(huán)境信息生成與運行環(huán)境相關的執(zhí)行代碼,然后seacureCall ()內部接收該執(zhí)行代碼并將代碼填充到被抽取的位置,繼而軟件順序執(zhí)行此代碼。此時,代碼生成器GCC將“b = a + I ; ”編譯成合適的目標平臺代碼,比如,根據(jù)本發(fā)明的一個實施方式,代碼生成器GCC編譯成的代碼與原受保護軟件的運行環(huán)境一致,比如在x86機器上將代碼編譯生成對應的可執(zhí)行的x86指令。secureCall ()通過調用安全環(huán)境取得由安全環(huán)境生成并返回的與運行環(huán)境相關的執(zhí)行代碼,然后將這些執(zhí)行代碼放在本地的內存中執(zhí)行。由于生成的代碼和軟件的運行環(huán)境完全一致,因此效率的下降不多。根據(jù)本發(fā)明的一個實施方式,關于代碼動態(tài)變化,對于“b = a + I;”可以生成多條等價指令,包括但不限于:
1.ADD EAX, I ;//寄存器EAX的值加I
2.1NC EAX;//寄存器EAX等于寄存器EAX加I
3.SUB EAX, OxFFFFFFFF//寄存器EAX等于寄存器EAX減去-1,即為寄存器EAX等于寄存器EAX加I。顯然,每次運行的指令都不一樣,因此更加難以分析。上述代碼動態(tài)變化部分已有說明,比如:對于上述b=a+l,第一次運行時生成“ADD EAX, I”指令,第二次運行時生成“INCEAX”指令,這些指令是等價的,每次運行動態(tài)生成不同的等價指令,代碼動態(tài)變化增加了分析的難度。關于環(huán)境相關指令(如CPU特有指令,系統(tǒng)信息等),當CPU具有浮點協(xié)處理器的時候,可以生成浮點協(xié)處理器指令完成計算(浮點協(xié)處理器也稱為數(shù)字或算術協(xié)處理器,具有一個旨在大量數(shù)字操作的特殊指令集,專門用來進行浮點數(shù)運算),或者使用特定的內存地址作為變量a和b的臨時存儲區(qū)域,這都可以使指令和當前的運行環(huán)境相關。本發(fā)明的核心思想是將軟件一部分代碼抽取到一個安全環(huán)境中,運行至該部分代碼時,安全環(huán)境根據(jù)軟件運行環(huán)境相關信息動態(tài)生成執(zhí)行代碼并填補回軟件中,軟件繼續(xù)正常運行。安全環(huán)境中依賴當前軟件運行環(huán)境相關信息(如cpu型號,地址等指令信息)動態(tài)生成代碼。一旦運行環(huán)境變化,軟件無法運行。安全環(huán)境能夠保證外部人員無法調試、破解,保證外部人員不知道安全環(huán)境中抽取的代碼信息,也不知道相關代碼的生成規(guī)則,每次動態(tài)生成都依賴運行環(huán)境相關信息。智能卡、虛擬機等運行環(huán)境也可以作為安全環(huán)境,對于本領域的技術人員而言,根據(jù)本發(fā)明的內容,在智能卡、虛擬機上完全能夠實現(xiàn)類似的軟件保護方法,其具體實現(xiàn)內容根據(jù)具體的智能卡、虛擬機不同而略有不同,但其核心的保護思想與上述內容相同,因此不再贅述。以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換以及改進等,均應包含在本發(fā)明的保護范圍之內。
權利要求
1.一種在安全環(huán)境中生成代碼提高受保護軟件保護強度的方法,所述安全運行環(huán)境是可運行代碼、具有安全防范功能、難以進行調試的計算機運行環(huán)境, 其中所述安全環(huán)境中運行代碼生成模塊,所述代碼生成模塊根據(jù)源輸入邏輯描述生成對應邏輯的可執(zhí)行代碼;其中,所述受保護軟件中具有調用模塊; 所述方法包括如下步驟: 抽取受保護軟件中的部分代碼; 將所述部分代碼轉換為源輸入邏輯描述; 在所述受保護軟件中被抽取代碼的位置插入調用模塊; 當所述受保護軟件運行到被抽取代碼的位置時,所述調用模塊將調用安全環(huán)境,報告運行環(huán)境信息; 所述安全環(huán)境中的所述代碼生成模塊根據(jù)所述運行環(huán)境信息生成與所述運行環(huán)境相關的執(zhí)行代碼; 將生成的與運行環(huán)境相關的所述執(zhí)行代碼填充到所述被抽取代碼的位置; 所述受保護軟件執(zhí)行所述執(zhí)行代碼。
2.根據(jù)權利要求1所述的方法,其特征在于,所述安全環(huán)境是虛擬機。
3.根據(jù)權利要求1所述的方法,其特征在于,所述安全環(huán)境是智能卡。
4.根據(jù)權利要求1所述的方法,其特征在于,所述安全環(huán)境是遠程服務器。
5.根據(jù)權利要求1所述的方法,其特征在于,每次生成的執(zhí)行代碼不完全相同。
6.根據(jù)權利要求5所述的方法,其特征在于,所述生成的執(zhí)行代碼是完成相同的功能的等效代碼。
7.根據(jù)權利要求1所述的方法,其特征在于,在執(zhí)行完所述執(zhí)行代碼之后,將受保護軟件中的這部分生成的執(zhí)行代碼清除。
全文摘要
本發(fā)明公開了一種基于運行時在安全環(huán)境中生成動態(tài)代碼的軟件保護方法,通過在安全環(huán)境中即時生成與非安全運行環(huán)境相關的代碼,在非安全運行環(huán)境中運行生成的代碼,從而提高軟件調試和分析的難度,還可以避免使用安全環(huán)境運行代碼引起的性能損失,本方法基本沒有性能損失,且能夠提供較好的安全性,具有非常大的實用價值。
文檔編號G06F21/12GK103106356SQ201310040228
公開日2013年5月15日 申請日期2013年2月1日 優(yōu)先權日2013年2月1日
發(fā)明者不公告發(fā)明人 申請人:北京深思洛克軟件技術股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
主站蜘蛛池模板: 洱源县| 天全县| 阿合奇县| 大港区| 祥云县| 辽宁省| 江安县| 隆德县| 常德市| 太保市| 来凤县| 昌黎县| 施秉县| 大连市| 徐州市| 北宁市| 安乡县| 陕西省| 永吉县| 岗巴县| 大宁县| 东至县| 宜春市| 芮城县| 永泰县| 莱阳市| 四川省| 宜川县| 河东区| 瓦房店市| 邵东县| 弥渡县| 日喀则市| 绥江县| 米林县| 龙里县| 特克斯县| 云龙县| 巧家县| 万源市| 仁化县|