999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Java項(xiàng)目的Class文件加密探討

2017-12-26 15:29:32王文學(xué)
成長·讀寫月刊 2017年12期

【摘 要】Java 編譯的class文件很容易被反編譯,不利于保護(hù)一些核心的代碼。文章分析了class文件的幾種加密方案的優(yōu)缺點(diǎn),并提出了安全可靠的class文件加密方案。

【關(guān)鍵詞】Java;Classloader;JavaAgent

Java 的class 類文件是Java源代碼文件經(jīng)過編譯后生成的字節(jié)碼文件,類文件有固定的結(jié)構(gòu),比如前四個(gè)字節(jié)固定為0xCAFEBABE,接下來四個(gè)字節(jié)是副版本號(hào)和主版本號(hào)等等。源代碼中的變量、常量等一切全在結(jié)構(gòu)中,了解的類文件的固定結(jié)構(gòu),就能輕易地根據(jù)class文件生成java源文件。這對(duì)項(xiàng)目某個(gè)核心的模塊來說,會(huì)造成關(guān)鍵技術(shù)的泄漏。尤其是涉及到版權(quán)的license管理,如何對(duì)class類進(jìn)行加密,是公司必須要考慮的問題。針對(duì)這個(gè)問題,有各種解決方案,有class混淆方案,也有class加密方案。class加密也有不同的加密技巧和策略。

class混淆器就是在不影響代碼執(zhí)行的條件下,對(duì)發(fā)布出去的程序進(jìn)行重新組織和處理,使得處理后的代碼與處理前代碼完成相同的功能。混淆方法主要有外觀混淆、控制混淆、預(yù)防混淆、數(shù)據(jù)混淆。混淆后的代碼很難被反編譯,但不是不能被反編譯,反編譯后的程序雖然可讀性較差,但整理后程序的程序代碼還是可用的,程序邏輯可以修改。如果重寫這個(gè)類和方法,就可以直接跳過某個(gè)校驗(yàn)過程以達(dá)到某種目的,比如跳過license的驗(yàn)證或者直接返回許可信息。由于java的ClassLoader可以直接加載這個(gè)類,所以修改某個(gè)類并直接運(yùn)行不成問題。安全的方案就是把class直接加密,但加密后的class并不能被ClassLoader直接識(shí)別并運(yùn)行。

由于class文件有固定的結(jié)構(gòu),ClassLoader將class文件加載到JVM虛擬機(jī),程序就可以運(yùn)行了。加密后class文件,原來的ClassLoader無法正常解析,要繼承并重寫自己的ClassLoader類和defineClass()方法,defineClass()能將class二進(jìn)制內(nèi)容轉(zhuǎn)換成class對(duì)象,類的解密工作也可以在這里進(jìn)行,也就是在把類字節(jié)轉(zhuǎn)交給JVM運(yùn)行之前,解密class文件為正常的字節(jié)碼文件。當(dāng)然,這種解密的方法直接暴露在自定義的ClassLoader類中,可以反編譯ClassLoader類來得到解密方法并得到正常的class字節(jié)碼,把這些字節(jié)碼寫入到文件,再反編譯就能得到Java源文件,所以這種方法并不安全。

對(duì)于WEB項(xiàng)目,一般來說WEB容器有自己的加載器,比如TOMCAT的catalina.jar,可以修改兩個(gè)文件,org.apache.catalina.loader.WebappClassLoaderBase.class文件中的findResourceInternal方法和 org.apache.catalina.startup.ContextConfig.class文件中的processAnnotationsJar方法、processAnnotationsJndi方法、processAnnotationsFile方法,在調(diào)用processAnnotationsStream方法之前解密類文件,把解密后的字節(jié)流傳給processAnnotationsStream。這種加密方法比較靈活,可以根據(jù)情況只加密解密部分核心的類文件以提高運(yùn)行效率。當(dāng)然,這種方法要和具體的TOMCAT版本相結(jié)合,如果要使用其它的WEB容器或者不同版本的TOMCAT,都需要修改相應(yīng)版本的catalina.jar文件,不方便管理。從安全性的角度來看,此種方法和自定義ClassLoader差不多,如果catalina.jar文件和WebappClassLoaderBase.class、ContextConfig.class得不到有效的保護(hù),可以通過修改這兩個(gè)文件在得到解密后的class文件后再反編譯得到源文件。

前面兩種方法是用Java來實(shí)現(xiàn)解密class文件,本身解密的class能被反編譯,這其實(shí)是不安全的,當(dāng)然,你可以嵌套幾次加密和解密的過程,但這樣操作太過復(fù)雜。使用JVMTI編程接口,用C/C++來實(shí)現(xiàn)解密過程是個(gè)不錯(cuò)的選擇。JVMTI是JVM Tool Interface,它提供了本地編程接口,利用JDK中JVM的某些類似鉤子機(jī)制和事件監(jiān)聽機(jī)制,監(jiān)聽加載class事件。通過啟動(dòng)java程序時(shí)加參數(shù)-agentlib來指定lib庫,例如:java -agentlib:libClassLoader,其中l(wèi)ibClassLoader是用C/C++編寫,可以是Windows下的DLL庫,也可以是Linux下的so文件,在libClassLoader中實(shí)現(xiàn)對(duì)加密class的解密工作。由于C/C++編譯后的庫文件被反編譯基本上是匯編語言,要理解其中的解密邏輯幾乎無望。此外,lib還能被加殼,進(jìn)一步增加了反編譯的難度。程序只要在JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved)方法中設(shè)置ClassFileLoadHook回調(diào)方法,并實(shí)現(xiàn)自己的ClassFileLoadHook方法即可。實(shí)踐證明,這是一個(gè)行之有效的運(yùn)行class解密方案。

此外,加密方法的選擇直接影響了java項(xiàng)目的運(yùn)行效率。Class加密可以選擇對(duì)稱加密,也可以選擇非對(duì)稱的加密算法,如RSA,class文件可以完整加密,也可以部分加密。安全其見,建議選擇RSA等非對(duì)稱算法,避免密鑰的泄露。由于非對(duì)稱加密算法的效率較低,工程中可以結(jié)合實(shí)際只對(duì)類的頭部結(jié)構(gòu)信息加密,可以大大提高運(yùn)行效率。

作者簡介:王文學(xué)(1976-),男,河南人,講師,研究方向:網(wǎng)絡(luò)安全。

參考文獻(xiàn):

[1]《Java虛擬機(jī)規(guī)范》 Tim Lindholm 機(jī)械工業(yè)出版社

主站蜘蛛池模板: 免费a在线观看播放| 午夜老司机永久免费看片| 91精品国产91久久久久久三级| 狠狠干欧美| 久久久波多野结衣av一区二区| 国产9191精品免费观看| 国产xxxxx免费视频| 亚洲最大福利视频网| 波多野结衣亚洲一区| 亚洲综合色在线| 国产精品视频导航| 成人福利在线免费观看| 欧美成人日韩| 日韩天堂在线观看| 免费一极毛片| 在线va视频| 在线观看国产精品第一区免费 | 91成人精品视频| 国产激情无码一区二区三区免费| 啪啪永久免费av| 午夜不卡视频| 最新国产精品鲁鲁免费视频| 2021国产乱人伦在线播放| 国产精品hd在线播放| 黄网站欧美内射| 蜜桃视频一区二区三区| 毛片三级在线观看| 91精品最新国内在线播放| 国内精品91| 亚洲自偷自拍另类小说| 日韩精品一区二区深田咏美| 亚洲欧美在线看片AI| 国产精品久线在线观看| 色天堂无毒不卡| 国产亚洲精品自在久久不卡 | V一区无码内射国产| 欧美精品成人一区二区视频一| 99免费在线观看视频| 日本欧美在线观看| 久久精品电影| 国产理论一区| 无码福利视频| 最近最新中文字幕免费的一页| 欧美成人看片一区二区三区 | 午夜啪啪网| 国产成人你懂的在线观看| 91黄色在线观看| 亚洲精品无码久久毛片波多野吉| 欧美日韩久久综合| 欧美日韩精品综合在线一区| 久久国产成人精品国产成人亚洲 | 黄色免费在线网址| 在线欧美日韩| 一区二区三区四区在线| 欧洲亚洲一区| 国产成人综合久久精品尤物| 亚洲 欧美 日韩综合一区| 波多野结衣的av一区二区三区| 国产亚洲高清在线精品99| 国产91精选在线观看| 久久免费成人| 制服丝袜在线视频香蕉| 大学生久久香蕉国产线观看| 97在线国产视频| 无码丝袜人妻| 国产91特黄特色A级毛片| 19国产精品麻豆免费观看| 亚洲欧美自拍一区| 久久永久免费人妻精品| 久久综合九色综合97婷婷| 午夜丁香婷婷| 国产免费精彩视频| 精品人妻一区无码视频| 欧美第二区| 在线免费a视频| 午夜视频免费试看| 欧美无专区| 激情六月丁香婷婷四房播| 一区二区在线视频免费观看| 亚洲av色吊丝无码| 91无码人妻精品一区二区蜜桃| 尤物国产在线|