本發(fā)明涉及java代碼保護(hù)的,尤其是涉及一種基于java?agent啟動的字節(jié)碼加密方法及系統(tǒng)。
背景技術(shù):
1、目前,在java應(yīng)用程序的開發(fā)和分發(fā)過程中,代碼安全性以及保持java天然的跨平臺特性是兩個重要的考量因素。
2、現(xiàn)有技術(shù)方案中,一種常見的做法是將java代碼編譯為本地機(jī)器碼,以此來提高安全性,然而,這種方法會導(dǎo)致java程序失去其跨平臺的優(yōu)勢,因為編譯后的機(jī)器碼只能在特定的操作系統(tǒng)和硬件架構(gòu)上運行。此外,這種編譯過程往往不會保留方法的命名,這對于希望將代碼作為第三方依賴庫供其他程序調(diào)用的開發(fā)者來說,是一個明顯的局限性;
3、舉例而言,通過編譯器將java源代碼或字節(jié)碼編譯成特定操作系統(tǒng)的本地機(jī)器碼,這一過程通常包括以下步驟:
4、1.?源代碼分析:編譯器解析源代碼,構(gòu)建一個抽象語法樹(ast);
5、2.?代碼優(yōu)化:編譯器對ast進(jìn)行優(yōu)化,刪除冗余代碼,提高執(zhí)行效率;
6、3.?目標(biāo)代碼生成:編譯器將優(yōu)化后的ast轉(zhuǎn)換為目標(biāo)平臺的機(jī)器碼;
7、該技術(shù)的局限性在于,生成的機(jī)器碼喪失了java的跨平臺特性,只能在特定的操作系統(tǒng)或硬件上運行。在java平臺上,這個方法的一個例子是通過使用gnu?compiler?forjava?(gcj)編譯器,但由于缺乏跨平臺支持,它已不再是一個推薦的解決方案。
8、另一種現(xiàn)有技術(shù)是開發(fā)者使用其他編程語言來編寫java的啟動器,該啟動器在程序啟動時對編碼后的java類進(jìn)行解碼。盡管這種方法能夠維持某種程度的跨平臺特性,但它通常面臨效率問題,由于java虛擬機(jī)外部的解碼過程涉及與操作系統(tǒng)底層交互,這種跨語言的解決方案在操作內(nèi)存時的效率可能不如純java解決方案。此外,引入非java語言也可能引發(fā)新的跨平臺兼容性問題,因為不同操作系統(tǒng)對非java語言的支持程度可能有所不同;
9、舉例而言,使用其他編程語言編寫的啟動器技術(shù):使用c/c++或其他語言編寫java應(yīng)用程序的啟動器,該啟動器在應(yīng)用程序啟動時負(fù)責(zé)對加密的類文件進(jìn)行解碼,這個過程通常涉及以下步驟:
10、1.?類文件加密:java類文件在打包前通過特定算法進(jìn)行加密處理;
11、2.?啟動器編寫:用c/c++或其他語言編寫一個程序,該程序在啟動時將加密的類文件加載到內(nèi)存;
12、3.?解碼執(zhí)行:啟動器對內(nèi)存中的類文件進(jìn)行解碼,并將解碼后的類文件傳遞給java虛擬機(jī)執(zhí)行;
13、雖然這種技術(shù)保持了一定程度的跨平臺性,但在內(nèi)存操作和代碼解碼方面效率較低,且引入了額外的跨平臺兼容性問題。
技術(shù)實現(xiàn)思路
1、為了解決java代碼保護(hù)過程中跨平臺特性損失和效率下降的問題,本技術(shù)提供一種基于java?agent啟動的字節(jié)碼加密方法及系統(tǒng)。
2、第一方面,本技術(shù)的上述發(fā)明目的是通過以下技術(shù)方案得以實現(xiàn)的:
3、一種基于java?agent啟動的字節(jié)碼加密方法,所述基于java?agent啟動的字節(jié)碼加密方法包括:
4、在用戶指定的java項目文件中,配置加密參數(shù);
5、解壓所述java項目文件中的原始jar包,在解壓后的jar包中依據(jù)所述加密參數(shù)對指定類文件根據(jù)預(yù)設(shè)的加密算法進(jìn)行加密,并根據(jù)預(yù)設(shè)的參數(shù)類型保留對應(yīng)的數(shù)據(jù);
6、通過修改所述原始jar包的manifest.mf文件,加入java?agent信息,所述javaagent信息用于對應(yīng)所述加密參數(shù)驗證密碼并解碼;
7、將加密后的類文件重新打包成jar包。
8、通過采用上述技術(shù)方案,允許用戶在java項目文件中靈活配置加密參數(shù),包括選擇需要加密的類文件、設(shè)置加密算法及其參數(shù)等,使得能夠適用于不同安全需求的項目,為用戶提供了高度的自定義能力;通過預(yù)設(shè)的加密算法對指定類文件進(jìn)行加密,有效防止了源代碼的直接泄露和未經(jīng)授權(quán)的訪問,確保了核心邏輯的安全性,即使jar包被非法獲取,攻擊者也難以直接理解或修改加密后的字節(jié)碼,從而大幅提升了軟件系統(tǒng)的整體安全性;通過修改jar包的manifest.mf文件,嵌入java?agent信息,實現(xiàn)了加密與解密過程的無縫集成,在java虛擬機(jī)啟動時,java?agent能夠自動加載并執(zhí)行,保證了高效的執(zhí)行性能,同時簡化了代碼保護(hù)的工作流程,根據(jù)加密參數(shù)驗證密碼并解碼加密的類文件,使得加密后的jar包在運行時能夠像未加密前一樣正常工作,對用戶和應(yīng)用程序來說幾乎是完全透明的,使用代理機(jī)制進(jìn)行解碼,保持了跨平臺特性的同時,有效避免了性能和兼容性問題,且在加密過程中,根據(jù)預(yù)設(shè)的參數(shù)類型保留對應(yīng)的數(shù)據(jù),確保了加密操作不會影響到類文件中必要的元數(shù)據(jù)和執(zhí)行環(huán)境信息,如類名、方法簽名、字段信息等,保證了加密后的類文件仍然能夠被java虛擬機(jī)正確加載和執(zhí)行。
9、本技術(shù)在一較佳示例中可以進(jìn)一步配置為:所述加密參數(shù)包括加密密碼、時間限制、硬件綁定和遠(yuǎn)程控制參數(shù)。
10、通過采用上述技術(shù)方案,加密密碼作為基本的訪問控制手段,確保了只有持有正確密碼的用戶或系統(tǒng)能夠解密并執(zhí)行加密后的代碼,而時間限制參數(shù)的引入,則實現(xiàn)了對軟件使用時間的精確控制,有效防止了軟件超時使用或非法延長使用期限的情況,此外,硬件綁定參數(shù)通過將軟件運行與特定硬件設(shè)備相關(guān)聯(lián),進(jìn)一步限制了軟件的使用范圍,增強(qiáng)了軟件的安全性和防復(fù)制能力,通過遠(yuǎn)程控制參數(shù)的配置,管理員可以遠(yuǎn)程監(jiān)控、更新或撤銷加密軟件的授權(quán)狀態(tài),實現(xiàn)了對軟件授權(quán)的靈活管理,不僅提高了軟件維護(hù)的效率,還使得軟件供應(yīng)商能夠迅速響應(yīng)市場變化,調(diào)整授權(quán)策略,以滿足不同用戶的需求。
11、本技術(shù)在一較佳示例中可以進(jìn)一步配置為:所述解壓所述java項目文件中的原始jar包,包括:
12、解壓所述java項目文件中的原始jar包并建立臨時目錄。
13、所述在解壓后的jar包中依據(jù)所述加密參數(shù)對指定類文件進(jìn)行加密,包括:
14、依據(jù)所述加密參數(shù)中的指定包路徑,查詢所述臨時目錄,根據(jù)查詢結(jié)果遍歷對應(yīng)的臨時目錄,查找所述指定包路徑下的所有類文件。
15、通過采用上述技術(shù)方案,指定包路徑作為加密參數(shù)的一部分,能夠精確地定位到需要加密的類文件所在位置,避免無差別加密帶來的性能損耗和不必要的復(fù)雜性,確保了加密操作的針對性和高效性,在解壓后的jar包中,通過建立臨時目錄并依據(jù)指定包路徑遍歷查找類文件,實現(xiàn)了對目標(biāo)類文件的快速定位和處理,相比全盤掃描更為高效,能夠顯著縮短加密處理的時間,提升整體處理效率,且指定包路徑作為加密參數(shù),使得用戶或開發(fā)者能夠根據(jù)需要靈活選擇需要加密的類文件范圍,不僅滿足了不同項目對加密需求的差異,還使得加密策略能夠隨著項目的發(fā)展而靈活調(diào)整,在復(fù)雜的java項目中,可能存在大量非核心或無需加密的類文件,通過指定包路徑進(jìn)行加密,可以確保只有關(guān)鍵或敏感的類文件被加密,避免了不必要的加密操作和對程序性能的潛在影響。
16、本技術(shù)在一較佳示例中可以進(jìn)一步配置為:所述在解壓后的jar包中依據(jù)所述加密參數(shù)對指定類文件根據(jù)預(yù)設(shè)的加密算法進(jìn)行加密,包括:
17、依據(jù)所述加密參數(shù)中的指定包路徑,查詢解壓后的jar包,遍歷對應(yīng)所述指定包路徑下的所有類文件;
18、根據(jù)預(yù)設(shè)的加密算法對所述指定包路徑下的所有類文件進(jìn)行加密,并根據(jù)預(yù)設(shè)的參數(shù)類型保留對應(yīng)的數(shù)據(jù)。
19、通過采用上述技術(shù)方案,指定包路徑能夠深入java項目的內(nèi)部結(jié)構(gòu),精確鎖定需要加密的類文件集合,隨后,采用預(yù)設(shè)的加密算法對這些類文件進(jìn)行加密處理,確保了加密操作的針對性和深度,有效防止了敏感信息的泄露,在加密過程中,不僅關(guān)注類文件內(nèi)容的加密,還根據(jù)預(yù)設(shè)的參數(shù)類型保留對應(yīng)的數(shù)據(jù),確保加密后的類文件在保持原有功能邏輯的同時,能夠兼容原有數(shù)據(jù)類型和接口,減少了因加密而引入的兼容性問題,保障了數(shù)據(jù)的完整性和系統(tǒng)的穩(wěn)定性,且通過先查詢指定包路徑下的類文件再進(jìn)行加密處理,避免了對整個jar包進(jìn)行無差別加密所帶來的性能損耗,同時,預(yù)設(shè)的加密算法經(jīng)過優(yōu)化選擇,能夠在保證加密強(qiáng)度的同時,提升加密處理的效率,減少了對系統(tǒng)資源的占用。
20、本技術(shù)在一較佳示例中可以進(jìn)一步配置為:所述在解壓后的jar包中依據(jù)所述加密參數(shù)對指定類文件根據(jù)預(yù)設(shè)的加密算法進(jìn)行加密,并根據(jù)預(yù)設(shè)的參數(shù)類型保留對應(yīng)的數(shù)據(jù),包括:
21、使用預(yù)設(shè)的asm庫修改原始類文件,保留方法名稱、入?yún)⒑头祷刂担?/p>
22、在解壓后的jar包中依據(jù)所述加密參數(shù)對指定類文件根據(jù)預(yù)設(shè)的加密算法進(jìn)行加密,加密后存儲到另一個文件。
23、通過采用上述技術(shù)方案,asm庫具有高效的字節(jié)碼處理的能力,通過asm庫,在保留必要信息的同時對指定類文件進(jìn)行快速加密,減少了中間轉(zhuǎn)換步驟,提高了加密效率,并減少了系統(tǒng)資源的占用,利用asm庫修改原始類文件時,注重保留方法名稱、入?yún)⒑头祷刂档汝P(guān)鍵信息,確保加密后的類文件在接口層面與原始類文件保持一致,從而維護(hù)了api的兼容性,使得加密后的java項目能夠無縫集成到現(xiàn)有系統(tǒng)中,同時降低了后續(xù)維護(hù)的復(fù)雜度;通過asm庫直接操作字節(jié)碼,開發(fā)者可以清晰地看到哪些部分被修改、哪些數(shù)據(jù)被保留,從而提高了加密過程的透明性,此外,由于asm庫提供了豐富的api,開發(fā)者可以根據(jù)需要靈活調(diào)整加密策略,增強(qiáng)了加密過程的可控性;通過預(yù)設(shè)的加密算法對指定類文件進(jìn)行加密,并將加密后的文件存儲到另一個位置,有效隱藏了原始類文件的真實內(nèi)容,增加了攻擊者破解的難度,同時,由于加密算法的多樣性和復(fù)雜性,即使攻擊者獲取了加密后的文件,也難以輕易還原出原始代碼,從而增強(qiáng)了加密的安全性和隱蔽性。
24、本技術(shù)在一較佳示例中可以進(jìn)一步配置為:所述預(yù)設(shè)的加密算法包括:
25、提取所述加密參數(shù)中的自定義加密信息;
26、針對依據(jù)所述加密參數(shù)的指定類文件,根據(jù)所述自定義加密信息進(jìn)行加密,獲得目標(biāo)加密文件;
27、針對在解壓后的jar包中除依據(jù)所述加密參數(shù)的指定類文件外的文件,通過混淆加密方式進(jìn)行加密,獲得第一混淆加密文件和第二混淆加密文件;
28、對所述目標(biāo)加密文件和所述第一混淆加密文件,或所述目標(biāo)加密文件和所述第二混淆加密文件進(jìn)行邏輯加密,獲得混合加密文件;
29、對所述混合加密文件進(jìn)行字符串常量寫入。
30、通過采用上述技術(shù)方案,提取加密參數(shù)中的自定義加密信息,自定義加密信息允許用戶或開發(fā)者根據(jù)實際需求定制,可以包括特定的加密算法、密鑰、加密強(qiáng)度等,從而實現(xiàn)了加密過程的靈活性和個性化,增強(qiáng)了加密的安全性,還使得加密策略能夠隨著項目需求的變化而靈活調(diào)整,針對依據(jù)加密參數(shù)的指定類文件,采用自定義加密信息進(jìn)行精確加密,確保了關(guān)鍵代碼和數(shù)據(jù)的安全性,同時,對于非指定類文件,則采用混淆加密方式進(jìn)行處理,以進(jìn)一步增加攻擊者分析和理解代碼的難度,結(jié)合精確加密與混淆加密的混合策略,既保證了關(guān)鍵信息的安全,又提升了整個jar包的安全防護(hù)水平;通過引入邏輯加密步驟,對目標(biāo)加密文件和混淆加密文件進(jìn)行進(jìn)一步的處理,生成混合加密文件,邏輯加密可能涉及對文件結(jié)構(gòu)、數(shù)據(jù)組織或執(zhí)行流程的重新編排,使得加密后的文件在邏輯上更加復(fù)雜,難以被直接解析或逆向工程,此外,對混合加密文件進(jìn)行字符串常量寫入,進(jìn)一步增加了文件內(nèi)容的隨機(jī)性和不可預(yù)測性,從而提高了加密的復(fù)雜性和破解難度;另外,盡管采用了多種加密手段,但在保留關(guān)鍵信息(如方法名稱、入?yún)⒑头祷刂档龋┑耐瑫r,也確保了加密后的代碼在一定程度上的可讀性和可維護(hù)性,對于后續(xù)的代碼調(diào)試、升級和維護(hù)具有重要意義。
31、第二方面,本技術(shù)的上述發(fā)明目的是通過以下技術(shù)方案得以實現(xiàn)的:
32、一種基于java?agent啟動的字節(jié)碼加密系統(tǒng),所述基于java?agent啟動的字節(jié)碼加密系統(tǒng)包括:
33、加密參數(shù)配置模塊,用于在用戶指定的java項目文件中,配置加密參數(shù);
34、加密模塊,用于解壓所述java項目文件中的原始jar包,在解壓后的jar包中依據(jù)所述加密參數(shù)對指定類文件根據(jù)預(yù)設(shè)的加密算法進(jìn)行加密,并根據(jù)預(yù)設(shè)的參數(shù)類型保留對應(yīng)的數(shù)據(jù);
35、agent加入模塊,用于通過修改所述原始jar包的manifest.mf文件,加入javaagent信息,所述java?agent信息用于對應(yīng)所述加密參數(shù)驗證密碼并解碼;
36、打包模塊,用于將加密后的類文件重新打包成jar包。
37、可選的,所述加密參數(shù)包括加密密碼、時間限制、硬件綁定和遠(yuǎn)程控制參數(shù)。
38、第三方面,本技術(shù)的上述發(fā)明目的是通過以下技術(shù)方案得以實現(xiàn)的:
39、一種計算機(jī)設(shè)備,包括存儲器、處理器以及存儲在所述存儲器中并可在所述處理器上運行的計算機(jī)程序,所述處理器執(zhí)行所述計算機(jī)程序時實現(xiàn)上述基于java?agent啟動的字節(jié)碼加密方法的步驟。
40、第四方面,本技術(shù)的上述發(fā)明目的是通過以下技術(shù)方案得以實現(xiàn)的:
41、一種計算機(jī)可讀存儲介質(zhì),所述計算機(jī)可讀存儲介質(zhì)存儲有計算機(jī)程序,所述計算機(jī)程序被處理器執(zhí)行時實現(xiàn)上述基于java?agent啟動的字節(jié)碼加密方法的步驟。
42、綜上所述,本技術(shù)包括以下至少一種有益技術(shù)效果:
43、1、允許用戶在java項目文件中靈活配置加密參數(shù),包括選擇需要加密的類文件、設(shè)置加密算法及其參數(shù)等,使得能夠適用于不同安全需求的項目,為用戶提供了高度的自定義能力;通過預(yù)設(shè)的加密算法對指定類文件進(jìn)行加密,有效防止了源代碼的直接泄露和未經(jīng)授權(quán)的訪問,確保了核心邏輯的安全性,即使jar包被非法獲取,攻擊者也難以直接理解或修改加密后的字節(jié)碼,從而大幅提升了軟件系統(tǒng)的整體安全性;通過修改jar包的manifest.mf文件,嵌入java?agent信息,實現(xiàn)了加密與解密過程的無縫集成,在java虛擬機(jī)啟動時,java?agent能夠自動加載并執(zhí)行,保證了高效的執(zhí)行性能,同時簡化了代碼保護(hù)的工作流程,根據(jù)加密參數(shù)驗證密碼并解碼加密的類文件,使得加密后的jar包在運行時能夠像未加密前一樣正常工作,對用戶和應(yīng)用程序來說幾乎是完全透明的,使用代理機(jī)制進(jìn)行解碼,保持了跨平臺特性的同時,有效避免了性能和兼容性問題,且在加密過程中,根據(jù)預(yù)設(shè)的參數(shù)類型保留對應(yīng)的數(shù)據(jù),確保了加密操作不會影響到類文件中必要的元數(shù)據(jù)和執(zhí)行環(huán)境信息,如類名、方法簽名、字段信息等,保證了加密后的類文件仍然能夠被java虛擬機(jī)正確加載和執(zhí)行;
44、2、加密密碼作為基本的訪問控制手段,確保了只有持有正確密碼的用戶或系統(tǒng)能夠解密并執(zhí)行加密后的代碼,而時間限制參數(shù)的引入,則實現(xiàn)了對軟件使用時間的精確控制,有效防止了軟件超時使用或非法延長使用期限的情況,此外,硬件綁定參數(shù)通過將軟件運行與特定硬件設(shè)備相關(guān)聯(lián),進(jìn)一步限制了軟件的使用范圍,增強(qiáng)了軟件的安全性和防復(fù)制能力,通過遠(yuǎn)程控制參數(shù)的配置,管理員可以遠(yuǎn)程監(jiān)控、更新或撤銷加密軟件的授權(quán)狀態(tài),實現(xiàn)了對軟件授權(quán)的靈活管理,不僅提高了軟件維護(hù)的效率,還使得軟件供應(yīng)商能夠迅速響應(yīng)市場變化,調(diào)整授權(quán)策略,以滿足不同用戶的需求;
45、3、指定包路徑作為加密參數(shù)的一部分,能夠精確地定位到需要加密的類文件所在位置,避免無差別加密帶來的性能損耗和不必要的復(fù)雜性,確保了加密操作的針對性和高效性,在解壓后的jar包中,通過建立臨時目錄并依據(jù)指定包路徑遍歷查找類文件,實現(xiàn)了對目標(biāo)類文件的快速定位和處理,相比全盤掃描更為高效,能夠顯著縮短加密處理的時間,提升整體處理效率,且指定包路徑作為加密參數(shù),使得用戶或開發(fā)者能夠根據(jù)需要靈活選擇需要加密的類文件范圍,不僅滿足了不同項目對加密需求的差異,還使得加密策略能夠隨著項目的發(fā)展而靈活調(diào)整,在復(fù)雜的java項目中,可能存在大量非核心或無需加密的類文件,通過指定包路徑進(jìn)行加密,可以確保只有關(guān)鍵或敏感的類文件被加密,避免了不必要的加密操作和對程序性能的潛在影響。