本發(fā)明屬于代碼保護,具體涉及一種基于多層加密與密鑰隱匿技術(shù)的探針代碼保護方法、系統(tǒng)、設(shè)備及介質(zhì)。
背景技術(shù):
1、隨著api接口防護需求迅猛發(fā)展,企業(yè)對接口層安全性日益提高。為實現(xiàn)對api調(diào)用行為的有效監(jiān)控,java?agent技術(shù)在服務(wù)端系統(tǒng)中得到廣泛應(yīng)用。通過在運行時插樁、增強方法邏輯或監(jiān)控調(diào)用棧,java探針為api層提供了靈活且強大的動態(tài)分析能力。java字節(jié)碼是jvm執(zhí)行的中間表示,兼具可讀性與跨平臺性。其一次編寫,到處運行的特性賦予了java卓越的跨平臺能力。然而,字節(jié)碼結(jié)構(gòu)清晰、語義規(guī)范的特點雖提升了可讀性,卻也使其容易被反編譯,這使得java源碼保護成為近年來行業(yè)焦點。為滿足知識產(chǎn)權(quán)保護需求,業(yè)界逐步發(fā)展出代碼混淆、字節(jié)碼加密和核心代碼native保護等主流保護方案。
2、首先,代碼混淆是保護方案之一,通過混淆工具對java類、方法、字段名稱進行無意義重命名,從而降低代碼的可讀性。部分混淆工具還集成了控制流擾亂、字符串加密、去除調(diào)試信息等功能,在一定程度上提升了源碼還原的復(fù)雜度。
3、其次,字節(jié)碼加密方案,在構(gòu)建過程中將.class文件加密保存,再通過自定義類加載器在運行時解密,從而在磁盤層面提供一定的安全保障。
4、最后,將關(guān)鍵模塊用c/c++等語言重寫為native代碼,通過jni技術(shù)保護核心代碼邏輯。native代碼難以被直接反編譯,且具備較強的不可讀性,因此廣泛應(yīng)用于對安全性要求較高的場景,如加解密邏輯、授權(quán)驗證與核心算法模塊等。
5、盡管現(xiàn)有技術(shù)在一定程度上提升了java字節(jié)碼的安全性,但從代碼混淆方案來看,未對字節(jié)碼進行加密處理,只是通過語義模糊和控制流擾亂增加源碼閱讀難度。反編譯工具與ide插件已具備一定的反混淆能力,混淆后的代碼仍可借助工具快速還原出關(guān)鍵邏輯。導(dǎo)致探針程序的業(yè)務(wù)邏輯、數(shù)據(jù)采集規(guī)則等關(guān)鍵內(nèi)容暴露,嚴(yán)重威脅程序安全和數(shù)據(jù)隱私。
6、對于加密后的數(shù)據(jù),現(xiàn)有方案缺乏進一步的防護措施。攻擊者在獲取加密數(shù)據(jù)后,通過分析數(shù)據(jù)結(jié)構(gòu)和特征,可以找到規(guī)律并破解數(shù)據(jù)。在密鑰管理方面,現(xiàn)有技術(shù)存在密鑰明文存儲或硬編碼的問題。這種方式一旦程序被破解或代碼泄露,密鑰也隨之暴露,使得整個加密體系失去作用。例如,將密鑰直接寫在配置文件中或代碼內(nèi)部,攻擊者獲取程序文件后,可輕松獲取密鑰,進而解密所有加密數(shù)據(jù),導(dǎo)致數(shù)據(jù)安全無法保障。在類加載和解密階段,若沒有對加密元信息、密鑰等進行有效驗證,可能導(dǎo)致惡意代碼被加載或解密錯誤。
技術(shù)實現(xiàn)思路
1、本發(fā)明提供一種探針代碼保護方法,方法具備密鑰不可見、類加載即時性強、加密不可逆性高等優(yōu)勢,能夠有效提升探針代碼的安全性能力。
2、方法包括:
3、步驟s101:對探針程序的類字節(jié)碼進行加密處理,生成加密字節(jié)數(shù)據(jù);
4、步驟s102:對加密字節(jié)數(shù)據(jù)按照預(yù)設(shè)規(guī)則進行亂序處理,生成洗牌后的加密數(shù)據(jù);
5、步驟s103:在加密類文件中嵌入加密元信息,所述加密元信息包含洗牌規(guī)則標(biāo)識和版本標(biāo)識;
6、步驟s104:對加密過程中使用的密鑰進行結(jié)構(gòu)變換和隱寫處理,生成隱匿密鑰表示;
7、步驟s105:將加密類文件、加密元信息及隱匿密鑰表示打包為發(fā)布包,形成具備多層加密保護的探針程序。
8、進一步需要說明的是,方法的解密步驟包括:
9、s401:在探針程序運行過程中,通過java?agent技術(shù)加載加密類加載器模塊,啟動對加密類文件的解密流程;
10、s402:對嵌入在加密類文件中的隱匿密鑰表示進行解析,還原出與加密階段一致的實際密鑰;
11、s403:從加密類文件頭部提取加密元信息,獲取洗牌規(guī)則標(biāo)識、版本標(biāo)識及加密方式標(biāo)識;
12、s404:基于提取的洗牌規(guī)則標(biāo)識,執(zhí)行與加密階段對應(yīng)的逆向洗牌操作,恢復(fù)加密字節(jié)數(shù)據(jù)的原始順序;
13、s405:根據(jù)加密方式標(biāo)識和還原的實際密鑰,對逆向洗牌后的字節(jié)數(shù)據(jù)進行解密處理,還原為原始類字節(jié)碼;
14、s406:對解密后的類字節(jié)碼進行完整性校驗,確保解密結(jié)果與原始加密前的類結(jié)構(gòu)一致;
15、s407:將校驗通過的原始類字節(jié)碼加載至java虛擬機中。
16、進一步需要說明的是,步驟s101具體包括:
17、使用對稱加密算法對字節(jié)碼進行初步加密,使用非對稱加密算法對對稱加密的密鑰進行加密。
18、在加密過程中,根據(jù)探針程序的運行環(huán)境生成加密參數(shù);
19、在加密字節(jié)碼時,對字節(jié)碼的結(jié)構(gòu)進行混淆和變換。
20、進一步需要說明的是,目標(biāo)類的字節(jié)碼數(shù)據(jù)執(zhí)行預(yù)設(shè)加密算法處理,形成初步加密后的字節(jié)序列;
21、對加密后的字節(jié)序列進行重排序處理,即將字節(jié)數(shù)據(jù)根據(jù)預(yù)設(shè)洗牌策略進行排列處理;
22、在每個加密類字節(jié)流前插入預(yù)設(shè)加密頭信息。
23、進一步需要說明的是,步驟s103具體包括:
24、對加密元信息進行多重加密處理,使用對稱加密算法對元信息進行初步加密,然后使用非對稱加密算法對加密后的元信息進行二次加密;
25、在解密過程中,使用對應(yīng)的公鑰對簽名摘要進行驗證;
26、在加密元信息中添加冗余校驗信息,并將其嵌入到加密元信息中;
27、在解密過程中,通過校驗碼驗證加密元信息的完整性。
28、進一步需要說明的是,步驟s104具體包括:
29、對加密過程中使用的密鑰進行多級結(jié)構(gòu)變換,包括但不限于混淆變換和擴散變換;
30、將密鑰劃分為多個子密鑰塊,然后通過非線性變換對每個子密鑰塊進行處理,最后將處理后的子密鑰塊重新組合,形成新的密鑰結(jié)構(gòu);
31、將時間戳與設(shè)備唯一標(biāo)識進行哈希運算,生成密鑰更新參數(shù),將密鑰更新參數(shù)與原始密鑰結(jié)合,生成新的密鑰版本;
32、在密鑰生成和隱藏過程中,配置冗余機制。
33、進一步需要說明的是,步驟s406具體包括:
34、在對解密后的類字節(jié)碼進行完整性校驗之前,先進行多級校驗準(zhǔn)備;
35、對解密后的字節(jié)碼進行格式校驗,檢查其是否符合?java?字節(jié)碼的基本格式規(guī)范;
36、根據(jù)加密元信息中的校驗算法標(biāo)識,確定使用的校驗算法;
37、在執(zhí)行完整性校驗過程中,對解密后的類字節(jié)碼的不同位置設(shè)置多個校驗點,校驗點的位置和校驗內(nèi)容在加密階段是隨機確定,并記錄在加密元信息中;
38、在解密后的校驗過程中,按照隨機的順序依次觸發(fā)校驗點,對字節(jié)碼的相應(yīng)部分進行校驗;
39、將完整性校驗結(jié)果與加載流程融合,如果校驗結(jié)果通過,則正常加載類字節(jié)碼;
40、如果校驗異常,則記錄異常信息并進行有限度的加載,同時觸發(fā)安全警報。
41、本技術(shù)還提供一種探針代碼保護系統(tǒng),系統(tǒng)包括:
42、分層加密模塊,用于對探針程序的類字節(jié)碼進行加密處理,生成加密字節(jié)數(shù)據(jù);
43、字節(jié)洗牌模塊,用于對加密字節(jié)數(shù)據(jù)按照預(yù)設(shè)規(guī)則進行亂序處理,生成洗牌后的加密數(shù)據(jù);
44、元信息嵌入模塊,用于在加密類文件中嵌入加密元信息,所述加密元信息包含洗牌規(guī)則標(biāo)識和版本標(biāo)識;
45、密鑰隱匿模塊,用于對加密過程中使用的密鑰進行結(jié)構(gòu)變換和隱寫處理,生成隱匿密鑰表示;
46、打包集成模塊,用于將加密類文件、加密元信息及隱匿密鑰表示打包為發(fā)布包,形成具備多層加密保護的探針程序。
47、根據(jù)本技術(shù)的另一個實施例,提供了一種電子設(shè)備,包括存儲器、處理器及存儲在所述存儲器上并可在所述處理器上運行的計算機程序,所述處理器執(zhí)行所述程序時實現(xiàn)所述探針代碼保護方法的步驟。
48、根據(jù)本技術(shù)的又一個實施例,還提供了一種存儲介質(zhì),其上存儲有計算機程序,所述計算機程序被處理器執(zhí)行時實現(xiàn)所述探針代碼保護方法的步驟。
49、從以上技術(shù)方案可以看出,本發(fā)明具有以下優(yōu)點:
50、本發(fā)明的探針代碼保護方法對類字節(jié)碼加密處理,將原始代碼轉(zhuǎn)化為密文,直接防止程序在傳輸或部署過程中被輕易反編譯,保護了探針程序的核心代碼邏輯不被竊取。對加密字節(jié)數(shù)據(jù)亂序處理,進一步擾亂數(shù)據(jù)結(jié)構(gòu),即便攻擊者獲取加密數(shù)據(jù),也難以分析出原始數(shù)據(jù)排列規(guī)律,增加了破解難度。嵌入加密元信息,為解密提供必要參數(shù)指引,同時版本標(biāo)識便于加密方案后續(xù)升級維護,保證解密的準(zhǔn)確性和兼容性。對密鑰進行結(jié)構(gòu)變換和隱寫處理,避免密鑰明文存儲或硬編碼帶來的泄露風(fēng)險,保障加密體系的核心安全。打包形成發(fā)布包,將加密保護的各組件整合,方便統(tǒng)一管理和部署,確保多層加密保護的完整性。
51、對于本技術(shù)的解密方式來講,通過?java?agent?觸發(fā)解密流程,利用?jvm?機制實現(xiàn)動態(tài)解密,無需修改程序核心代碼,保證解密及時性和隱蔽性。解析隱匿密鑰表示,確保密鑰在運行時安全還原,只有合法環(huán)境和操作能獲取正確密鑰,保障解密安全性。提取加密元信息獲取關(guān)鍵標(biāo)識,為解密流程提供準(zhǔn)確參數(shù),保證解密策略和算法的正確選擇。執(zhí)行逆向洗牌操作,消除加密階段亂序干擾,恢復(fù)數(shù)據(jù)原始順序。依據(jù)加密方式標(biāo)識和密鑰解密,實現(xiàn)加密數(shù)據(jù)準(zhǔn)確還原,確保程序代碼可正常運行。完整性校驗防止解密錯誤或數(shù)據(jù)篡改,保障加載到?jvm?中的代碼與原始代碼一致,避免安全漏洞和程序故障。將校驗通過的字節(jié)碼加載至?jvm,保證只有正確解密的代碼才能運行,維護程序運行的安全性和穩(wěn)定性。