Java的破解和反破解之道

java字節碼能夠很容易被反編譯大家都曉得啦,今天下午我爲了得到一個心儀已久的jbuilder opentools(昨天1.0 Released,新鮮出爐!但只能用14天,這怎麼行,於是我不惜放下其他工作,研究了一把該軟件加密方法的破解和反破解,結合以前的一些經驗,作文一篇與大家共饗,並不是鼓勵大家......

  破解之道:

20050131010953418.gif

  對一些提供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,那麼你還得注意不要用不可靠的加密算法。我自己寫了一個不可逆且可靠的算法,正在申請專利中....
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章