国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java的破解和反破解

2019-11-18 13:26:00
字體:
來源:轉載
供稿:網友

  java字節碼能夠很輕易被反編譯,今天下午我為了得到一個心儀已久的JBuilder Opentools,于是我不惜放下其他工作,研究了一把該軟件加密方法的破解和反破解,結合以前的一些經驗,作文一篇與大家共饗。
  破解之道:
  如今市面上的java obfuscator很多(可以從Google分類中列出)比較聞名的有4thpass的產品,不要錢的可以用JODE(JODE即是Obfuscator也是Decompiler,還提供源程序,推薦初用者使用),一般來說代碼擾亂器工作原理有三種,最初級的有比如Jbuilder自帶的(缺省情況下該項功能關閉),能把私有變量和方法的名稱用亂碼代替;稍微高級一點的能把公開變量和方法也能用亂碼代替,通常是輸入你要擾亂的jar和一個腳本(用來控制保留部分,否則你的主程序也不能執行了),有些不用亂碼代替變量名,而是直接用Java的要害字,讀者可能會感到迷惑,其實這種工具是繞過了Java編譯器的限制,輸入class或jar(不是源程序),擾亂后輸出class或Jar,當然JVM還是能夠執行的!假如用一般的方法這些類文件是沒法經過反編譯后修改再用javac或jikes編譯的,破解之道是先用反編譯軟件發編譯出來(所有非法變量名加前綴),然后依樣畫葫蘆用同樣的擾亂器生成修改好的類文件以達到目的;再高級一點就不是用常規方法了,一些是針對市面上出現反編譯軟件做一些陷阱,使得這些反編譯軟件不能工作;還有一種是自己做一個Java編譯器(JDK里也有一個java實現的編譯器),在符合JVM規范的前提下亂編譯,一般用在applet上,使得一般的反編譯軟件根本就解釋不了。目前我只能搞搞中等擾亂的程序。最聞名的反編譯器有JAD1.58e是用C++寫的,前臺還有一個Delphi的界面。用它可以很快的編譯,我順便寫了一個perl小程序,可以批量編譯上千個class。
  對一些提供license.key(包含授權信息的加密文件)的軟件,一般這種文件會采用DES,RAS和CRC校驗而且一般是二進制的(即使有時輸出成BASE64編碼),直接修改文件是浪費時間的,你可以先反編譯通過閱讀源程序來探究解密過程,假如過程是可逆的,那么你自己實現一個加密過程,可以很輕易的生成你自己想要的license key;假如過程不可逆也不是就搞不定了,有些強度不大的加密算法還是可以用暴力破解法來搞定,還有一種情況是對數字加密(一般指過期時間)假如你能修改這個過期時間那么你就可以多用一會兒了,用數學方法描述一下:假設集合X是明文包含的元素集合,Y是X經過算法后的映射,包含密文元素,假如有存在兩個算法A和B,能使得{Y-A->X}={Y-B->X},A算法可逆,但B算法是不可逆的,生產方用A的逆算法加密授權信息(X:String)到(Y:byte[]),并在軟件中用B算法解密,這樣你就搞不定了,但假如集合X的元素是有限的,假設只有0-9(new Date().getTime()格式),那么算法B就稱為不可逆但不可靠的,因為你通過一個樣本(一般都會給你評價版的license啦!),是可以得到某些Y集合中元素在X集合中的逆映射的,這樣你可以直接用這張映射表來修改license了。
  反破解之道:
  假如是做產品或提供演示程序,加密還是有好處的,加密的軟件可以用上面提到的JODE,一般都是對編譯好的class文件進行擾亂,因為并不是所有的符號都需要擾亂,假如你開發的是一個類庫,或者某些類需要動態裝載,那些公共API就必須保留符號不變,這樣別人才能使用你的類庫。先編寫腳本對那些需要保留的符號名稱進行配置,某些擾亂器能夠調整字節碼的順序,使反編譯更加困難。假如你用的代碼擾亂器能保證別人不能通過反編譯來修改或代替你的class,那么你還得注重不要用不可靠的加密算法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荣昌县| 广州市| 禄劝| 永德县| 凌海市| 南昌市| 华亭县| 海丰县| 固安县| 宜宾市| 喀什市| 德昌县| 万全县| 全南县| 宜城市| 万载县| 河池市| 荣成市| 芦溪县| 贵德县| 偃师市| 丰镇市| 浦县| 汾阳市| 咸阳市| 永吉县| 白水县| 武川县| 台湾省| 怀来县| 莆田市| 柘荣县| 柳河县| 乡宁县| 建湖县| 大城县| 吕梁市| 隆化县| 瓦房店市| 永春县| 南乐县|