[發(fā)明專利]一種保護(hù)java程序的方法有效
| 申請?zhí)枺?/td> | 201310159747.7 | 申請日: | 2013-05-03 |
| 公開(公告)號: | CN103218551A | 公開(公告)日: | 2013-07-24 |
| 發(fā)明(設(shè)計(jì))人: | 陸舟;于華章 | 申請(專利權(quán))人: | 飛天誠信科技股份有限公司 |
| 主分類號: | G06F21/14 | 分類號: | G06F21/14 |
| 代理公司: | 暫無信息 | 代理人: | 暫無信息 |
| 地址: | 100085 北京市*** | 國省代碼: | 北京;11 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 保護(hù) java 程序 方法 | ||
技術(shù)領(lǐng)域
本發(fā)明涉及軟件保護(hù)領(lǐng)域,尤其涉及一種保護(hù)java程序的方法。?
背景技術(shù)
Java?語言是一種解釋型語言。Java?源代碼經(jīng)過編譯,生成java指令文件,所生成的java指令文件在Java?虛擬機(jī)(JVM)?中解釋執(zhí)行。這種解釋執(zhí)行的運(yùn)行機(jī)制導(dǎo)致Java?源代碼很容易被反編譯。目前這種反編譯工具很多,并且反編譯的效果也很好,使得任何使用Java軟件的用戶都可以很容易地反編譯和重構(gòu)產(chǎn)品的源代碼,從而使所有基于Java?語言的授權(quán)認(rèn)證許可變得毫無意義。?
因此,保證Java?軟件程序不被反編譯和重構(gòu)或者提高反編譯和重構(gòu)的難度,是基于Java?語言的軟件保護(hù)領(lǐng)域需要解決的一個(gè)重要問題。?
發(fā)明內(nèi)容
本發(fā)明的目的是為了克服現(xiàn)有技術(shù)的不足,提供了一種保護(hù)java程序的方法。?
本發(fā)明采用的技術(shù)方案是:一種保護(hù)java程序的方法,包括:?
步驟A:java虛擬機(jī)裝載class文件,并判斷所述class文件是否是合法的文件,如果是,則執(zhí)行步驟B,否則返回錯(cuò)誤信息,結(jié)束;?
步驟B:所述java虛擬機(jī)獲取所述class文件中java類方法的總個(gè)數(shù)和java類方法的起始位置,根據(jù)所述起始位置找到當(dāng)前java類方法;?
步驟C:所述java虛擬機(jī)解析當(dāng)前java類方法對應(yīng)的java指令,并判斷是否解析成功,如果是,則執(zhí)行步驟D,否則返回錯(cuò)誤信息,結(jié)束;?
步驟D:所述java虛擬機(jī)判斷所述當(dāng)前java類方法對應(yīng)的java指令是否符合預(yù)設(shè)可移植指令條件,如果是,則將所述當(dāng)前java類方法對應(yīng)的java指令移植并保存到預(yù)設(shè)緩沖區(qū)中,執(zhí)行步驟E,否則執(zhí)行步驟G;?
步驟E:所述java虛擬機(jī)獲取當(dāng)前java類方法的最大java虛擬機(jī)棧深度和最大局部變量個(gè)數(shù);?
步驟F:所述java虛擬機(jī)根據(jù)所述最大java虛擬機(jī)棧深度和最大局部變量個(gè)數(shù),用獲取棧和局部變量的java類方法、執(zhí)行加密鎖內(nèi)虛擬機(jī)的java類方法與修改棧和局部變量的java類方法填充所述class文件中被移植的java指令的位置,執(zhí)行步驟G;?
步驟G:所述java虛擬機(jī)判斷已解析的java類方法的個(gè)數(shù)是否達(dá)到所述class文件中java類方法的總個(gè)數(shù),如果是,則將所述預(yù)設(shè)緩沖區(qū)中的當(dāng)前java類方法對應(yīng)的java指令移植到加密鎖內(nèi),結(jié)束,否則繼續(xù)獲取下一java類方法作為當(dāng)前java類方法,返回執(zhí)行步驟C;?
所述步驟A中,所述判斷所述class文件是否是合法的文件,具體為:獲取并判斷class文件的文件頭是否為預(yù)設(shè)字符串,如果是,則表示所述class文件是合法的文件,否則表示所述class文件是不合法的文件;?
所述步驟C中,所述解析當(dāng)前java類方法對應(yīng)的java指令,具體為:?
步驟C-1:所述java虛擬機(jī)獲取所述class文件中常量池的個(gè)數(shù)和常量池的起始位置;?
步驟C-2:所述java虛擬機(jī)根據(jù)當(dāng)前java類方法的第一成員變量和第二成員變量,從所述常量池中獲取java類方法名稱和java類方法描述符,并判斷是否獲取成功,如果是,則執(zhí)行步驟C-3,否則返回錯(cuò)誤信息,結(jié)束;?
步驟C-3:所述java虛擬機(jī)根據(jù)當(dāng)前java類方法的第三成員變量和第四成員變量,獲取當(dāng)前java類方法的附加屬性,并判斷是否獲取成功,如果是,則?執(zhí)行步驟D,否則返回錯(cuò)誤信息,結(jié)束;?
所述當(dāng)前java類方法的第一成員變量是對所述常量池中的java類方法名稱的索引;所述當(dāng)前java類方法的第二成員變量是對所述常量池中java類方法描述符的索引;所述當(dāng)前java類方法的第三成員變量為當(dāng)前java類方法的附加屬性的個(gè)數(shù);所述當(dāng)前java類方法的第四成員變量為當(dāng)前java類方法的附加屬性的起始位置;?
所述附加屬性包括code屬性,code屬性中包括當(dāng)前java類方法的java指令和當(dāng)前java類方法的java指令的長度;?
所述步驟C與所述步驟D之間包括:?
步驟A-1:所述java虛擬機(jī)顯示class文件的當(dāng)前java類方法和當(dāng)前java類方法對應(yīng)的java指令;?
步驟B-1:所述java虛擬機(jī)判斷已解析的java類方法的個(gè)數(shù)是否超過所述class文件中java類方法的總個(gè)數(shù),如果是,則執(zhí)行步驟C-1,否則將下一java類方法作為當(dāng)前java類方法,返回執(zhí)行步驟C;?
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于飛天誠信科技股份有限公司,未經(jīng)飛天誠信科技股份有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.17sss.com.cn/pat/books/201310159747.7/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 同類專利
- 專利分類
G06F 電數(shù)字?jǐn)?shù)據(jù)處理
G06F21-00 防止未授權(quán)行為的保護(hù)計(jì)算機(jī)或計(jì)算機(jī)系統(tǒng)的安全裝置
G06F21-02 .通過保護(hù)計(jì)算機(jī)的特定內(nèi)部部件
G06F21-04 .通過保護(hù)特定的外圍設(shè)備,如鍵盤或顯示器
G06F21-06 .通過感知越權(quán)操作或外圍侵?jǐn)_
G06F21-20 .通過限制訪問計(jì)算機(jī)系統(tǒng)或計(jì)算機(jī)網(wǎng)絡(luò)中的節(jié)點(diǎn)
G06F21-22 .通過限制訪問或處理程序或過程
- 基于支持類的標(biāo)識來下載Java應(yīng)用的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品
- 啟動JAVA應(yīng)用的方法及裝置
- Java虛擬機(jī)的管理方法、監(jiān)控系統(tǒng)和監(jiān)控代理模塊
- 一種運(yùn)行Java程序的方法和裝置
- 一種保護(hù)java程序的方法
- Java卡的Java代碼補(bǔ)丁方法
- 一種基于中間件架構(gòu)下java棧的多線程實(shí)現(xiàn)方法
- 一種支持JAVA卡補(bǔ)丁函數(shù)的智能卡
- 一種改進(jìn)的Java卡初始化方法和Java卡
- JavaEE平臺構(gòu)建方法、JavaEE平臺及云端系統(tǒng)





