熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Java的破解和反破解

2013-11-15 11:37:14  來源: JSP教程 

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

From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19309.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.