qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          關于Java加殼和代碼混淆

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

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

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

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 新疆| 化德县| 黑水县| 宜兴市| 阿合奇县| 甘德县| 永新县| 宁晋县| 南溪县| 长春市| 嵊泗县| 宜阳县| 宜都市| 涪陵区| 黄梅县| 慈溪市| 木兰县| 霍城县| 合水县| 乐山市| 吉安市| 张家川| 桃江县| 邯郸市| 定边县| 菏泽市| 竹北市| 贺州市| 肇州县| 大荔县| 兰溪市| 荣昌县| 阿瓦提县| 奉化市| 宿松县| 远安县| 通山县| 东方市| 旺苍县| 云南省| 资中县|