Java的破解和反破解之道 (轉)

worldblog發表於2007-12-09
Java的破解和反破解之道 (轉)[@more@]

位元組碼能夠很容易被反編譯大家都曉得啦, 今天下午我為了得到一個心儀已久的jbuilder opentools(昨天1.0 Released,新鮮出爐!但只能用14天,這怎麼行to:~@@#!@#!#@!@#%%">~@@#!@#!#@!@#%%^@,少說也要140天嘛!),於是我不惜放下其他工作,研究了一把該方法的和反破解,結合以前的一些,作文一篇與大家共饗,並不是鼓勵大家...

破解之道:

如今市面上的java obfuscator很多(可以從分類中列出)比較著名的有4thpass的產品(呵呵,胖友們!KBrowser都用過了吧),不要錢的可以用JODE(JODE即是Obfuscator也是Decompiler,還提供源,推薦初用者使用),一般來說程式碼擾亂器工作原理有三種,最初級的有比如Jbuilder自帶的(預設情況下該項功能關閉),能把私有變數和方法的名稱用亂碼代替;稍微高階一點的能把公開變數和方法也能用亂碼代替,通常是輸入你要擾亂的jar和一個指令碼(用來控制保留部分,否則你的主程式也不能了),有些不用亂碼代替變數名,而是直接用Java的關鍵字,讀者可能會感到疑惑,其實這種工具是繞過了Java的限制,輸入class或jar(不是源程式),擾亂後輸出class或Jar,當然JVM還是能夠執行的!如果用一般的方法這些類是沒法經過反編譯後修改再用javac或jikes編譯的,破解之道是先用反編譯軟體發編譯出來(所有變數名加字首),然後依樣畫葫蘆用同樣的擾亂器生成修改好的類檔案以達到目的;再高階一點就不是用常規方法了,一些是針對市面上出現反編譯軟體做一些陷阱,使得這些反編譯軟體不能工作;還有一種是自己做一個Java編譯器(裡也有一個java實現的編譯器),在符合JVM規範的前提下亂編譯,一般用在applet上,使得一般的反編譯軟體根本就解釋不了。目前我只能搞搞中等擾亂的程式。

最著名的反編譯器有JAD1.58e是用C++寫的,前臺還有一個的介面。用它可以很快的編譯,我順便寫了一個小程式,可以批次編譯上千個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檔案進行擾亂,因為並不是所有的符號都需要擾亂,如果你開發的是一個類庫,或者某些類需要動態裝載,那些公共就必須保留符號不變,這樣別人才能使用你的類庫。先編寫指令碼對那些需要保留的符號名稱進行,某些擾亂器能夠調整位元組碼的順序,使反編譯更加困難。如果你用的程式碼擾亂器能保證別人不能透過反編譯來修改或代替你的class,那麼你還得注意不要用不可靠的加密演算法。我自己寫了一個不可逆且可靠的演算法,正在申請專利中....


嘿嘿,吃飯去了,回見!


--
 ("`-''-/").___..--''"`-._
  `6_ 6 )  `-. (   ).`-.__.`) 
  (_Y_.)' ._  ) `._ `. ``-..-'  
  `--'_..-_/ /--'_.' ,'      
 (ll).-'' (((!.' ((!.-' 我是雨人 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990630/,如需轉載,請註明出處,否則將追究法律責任。

相關文章