[發明專利]一種保護JAVA可執行程序的方法及設備有效
| 申請號: | 201310284248.0 | 申請日: | 2013-07-09 |
| 公開(公告)號: | CN103413073A | 公開(公告)日: | 2013-11-27 |
| 發明(設計)人: | 不公告發明人 | 申請(專利權)人: | 北京深思數盾科技有限公司 |
| 主分類號: | G06F21/14 | 分類號: | G06F21/14 |
| 代理公司: | 暫無信息 | 代理人: | 暫無信息 |
| 地址: | 100872 北京市海淀*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 保護 java 可執行 程序 方法 設備 | ||
技術領域
本發明涉及軟件保護領域,特別涉及一種保護JAVA可執行程序的方法及設備。
背景技術
JAVA軟件一般由一些資源文件和JAVA可執行文件(單獨的.class文件或者包裝在.jar或.war包中的.class文件)組成。JAVA可執行文件是能被JAVA虛擬機執行的二進制文件,其代碼是與平臺無關的,格式遵循JAVA虛擬機規范,很容易被一些反編譯分析工具還原為JAVA源代碼,導致軟件的邏輯和流程被泄露和竊取。
在JAVA語言中,類對象的方法函數有兩種類型:普通方法和本地方法。普通方法是由JAVA語言編寫編譯成JAVA指令代碼,運行時由JAVA虛擬機(JAVA?Virtual?Machine,JVM)執行;另一類本地方法(Native?Method),它是通過JNI(JAVA?Native?Interface,JAVA本地調用)的接口訪問外部的運行在本地操作系統的庫。JNI實現了JAVA程序和外部庫之間的相互調用,通常用來為JAVA程序提供非JAVA語言實現的功能。
軟件由一個或多個JAVA可執行文件(如.jar、.war或者.class)和一個或者多個本地動態鏈接庫文件(如.dll或者.so等格式)組成。JAVA中的可執行文件中的代碼會調用動態鏈接庫中導出接口(interface),實現特定的功能。類(class)是JAVA的基本概念,.jar文件中包括多個.class文件(jar包和war包等都是由若干.class文件和資源文件組成),對其不再進行詳細描述。
目前常見的JAVA軟件保護手段是對.class文件中的JVM(JAVA?Virtual?Machine?JAVA,虛擬機)代碼進行混淆處理,或借助于自定義的Class?Loader,將.class文件加密存儲,加載到JVM時才解密。前者是在JVM指令的層面進行處理,受到JVM規范的限制,且自動化算法的效果還不夠理想(常見的自動化算法包括名稱和符號混淆,但是不易自動實現復雜的流程和類關系);而后者在JVM加載.class文件后,內存中就有原始的.class代碼,容易受到內存DUMP(即,將JVM運行時進程內存中的內容進行“快照”并保存到文件)的攻擊。
發明內容
為了防止JAVA軟件的代碼和邏輯被逆向和破解,本發明提供了一種保護JAVA可執行程序的方法及設備。首先創建一個本地動態鏈接庫文件,枚舉受保護JAVA軟件中的.class文件,分析該.class文件中的JVM代碼,隨機抽取JVM代碼中的部分代碼片段,在所抽取的部分代碼片段的原位置處替換為對native方法(即,本地方法)的調用,在本地動態鏈接庫中生成導出函數,實現所述被抽取出的部分代碼片段的功能。通過本發明提供的方法,可以提高軟件的安全強度。
本發明不僅適用于windows平臺,也適用于其他使用動態庫機制的操作系統。
一種保護JAVA可執行程序的方法,具體步驟包括:
1.?創建一個本地動態連接庫文件;
2.?枚舉受保護的JAVA軟件中的.class文件;
3.?分析該.class文件中的JVM代碼,隨機選取代碼片段;
4.?將選中的代碼片段從.class文件中抽去,原位置替換為對native方法的調用;
5.?在步驟1中的本地動態鏈接庫中,生成一個導出函數,函數名稱與步驟4中的native方法對應,逐條模擬代碼片段中的指令,實現步驟4中抽取出的代碼片段的功能。
6.?回到步驟2,繼續枚舉,直至結束。
根據本發明的一個方面,所述步驟1中的本地動態鏈接庫文件名稱是隨機的。
根據本發明的一個方面,所述步驟3中為便于自動化實現,抽取代碼片段遵循單入單出和堆棧平衡原則。所述單入單出和堆棧平衡原則,是指執行流程只能從所述代碼片段開頭處進入這段代碼,無法從所述代碼片段外跳轉到所述代碼片段中間,并且只能從所述代碼片段結尾處離開這段代碼,無法從所述代碼片段中跳轉到代碼片段外;所述代碼片段中的基本運算是完整的,進出所述代碼片段時不涉及JVM堆棧中的臨時變量。這兩個原則都可以通過靜態分析JVM指令實現。
根據本發明的一個方面,步驟4中native方法名稱是隨機的。
根據本發明的一個方面,步驟5中逐條模擬代碼片段中的指令包括對訪問類、對象等指令使用JNI(JAVA?Native?Interface?JAVA本地調用)模擬;算術和控制轉移使用本地代碼模擬。
一種保護JAVA可執行程序的裝置,具體包括:
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京深思數盾科技有限公司,未經北京深思數盾科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201310284248.0/2.html,轉載請聲明來源鉆瓜專利網。





