qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          關(guān)于Java加殼和代碼混淆

           在C中,進(jìn)行代碼加密,首要經(jīng)過加殼的方法。所謂加殼,即是先將程序代碼加密,然后用特定的程序加載器,將代碼解密后加載進(jìn)內(nèi)存,這樣能夠在避免代碼的反編譯,當(dāng)然,有加殼東西,也有解殼東西,盡管不能100%避免crack,但仍然給代碼增加一層有力的維護(hù)。
            然而在Java中,維護(hù)代碼是件很困難的工作,由于class文件十分標(biāo)準(zhǔn),很容易反編譯,且反編譯后的代碼明晰可讀。常見的維護(hù)辦法是運(yùn)用代碼混淆器,打亂class和function以及變量的姓名,能夠攪擾反編譯后的代碼的可讀性。盡管簡略提高了代碼的安全性,但還僅僅適當(dāng)于未加殼的C程序。
            java能夠加殼嗎?曾經(jīng)我以為這是不能夠的,由于動(dòng)態(tài)加載代碼這樣的內(nèi)存等級(jí)的操作,java無法做到,除非運(yùn)用JNI(JavaNativeInterface),調(diào)用自個(gè)編寫的C代碼,在C代碼中完成動(dòng)態(tài)加載java代碼。可是,C如何加載java代碼呢?這需要對(duì)JVM適當(dāng)?shù)闹馈K云鋾r(shí)的我以為這是不能夠的。
            然而,最近接觸的一些常識(shí)告訴我——java也能夠加殼!!
            1.URLClassLoader。用URLClassLoader能夠在java程序的運(yùn)轉(zhuǎn)時(shí)間,再將文件夾或許jar加入到classpath中,這個(gè)特性事實(shí)上即是動(dòng)態(tài)加載。既然能夠動(dòng)態(tài)加載class的文件夾或許jar,為何不能夠加載加密后的classes呢,將classes用自個(gè)的方法加密,在URLClassLoader調(diào)用時(shí),運(yùn)用自個(gè)的方法解密。不即是達(dá)到了加殼的目的了嗎?不過解密的代碼放在何處是個(gè)疑問,即是說解殼器的代碼暴露在外,仍是很風(fēng)險(xiǎn)的。
            2.javassist。這實(shí)在是一個(gè)十分奇特的新技能,我是在學(xué)習(xí)Tapestry5時(shí)首次遇到這個(gè)包的,他能夠動(dòng)態(tài)創(chuàng)立java字節(jié)碼,乃至能夠修正你現(xiàn)已寫好的函數(shù),比如你的getter和setter,僅僅簡略的讀取和賦值,你能夠在Runtime用他修正你的getter和setter,讓你的getter和setter每次調(diào)用時(shí)都能夠觸發(fā)某些代碼。憑借這項(xiàng)奇特的技能,必定能夠完成更強(qiáng)壯的動(dòng)態(tài)加載,加殼也就有了能夠。

          posted on 2014-08-26 09:42 順其自然EVO 閱讀(1910) 評(píng)論(0)  編輯  收藏 所屬分類: 測試學(xué)習(xí)專欄

          <2014年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 常州市| 黔西县| 高台县| 达拉特旗| 安义县| 石渠县| 铜山县| 平凉市| 金门县| 磴口县| 赣州市| 晋江市| 金阳县| 汉寿县| 庆元县| 云霄县| 临桂县| 淮北市| 武乡县| 习水县| 临澧县| 太谷县| 白朗县| 临泉县| 瓦房店市| 灌南县| 云龙县| 四平市| 绥江县| 武邑县| 铜鼓县| 张家界市| 句容市| 新乡县| 甘孜县| 达日县| 泰来县| 铁岭县| 北宁市| 喀喇沁旗| 绥化市|