Java的破解和反破解之道 (轉)
位元組碼能夠很容易被反編譯大家都曉得啦, 今天下午我為了得到一個心儀已久的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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Andriod破解之道(一)
- Android破解之道(二)Android
- JAVA逆向&反混淆-追查Burpsuite的破解原理JavaUI
- “桌遊深度”先手的優勢以及破解之道
- apk 包的破解與反編譯APK編譯
- 位置不可用資料夾?的破解之道!
- Oracle資料庫密碼破解易如反掌(轉)Oracle資料庫密碼
- 黑娃講破解知識之菜鳥的破解之路(轉)
- 資料夾拒絕訪問的原因與破解之道
- SecureCRT 工具的破解和安裝Securecrt
- 15歲破解DVD 駭客破解iPod/iTunes封鎖欲牟利(轉)
- 俞敏洪:破解組建核心創業團隊之道創業團隊
- 破解DVD格式,就是著名的DECSS (轉)CSS
- 防破解問答集 (轉)
- 實戰分享反爬機制快速定位與破解
- Java 程式的破解方法 (8千字)Java
- Apache防盜鏈的使用和破解Apache
- 破解加密光碟五式(轉)加密
- 六招教你學會破解(轉)
- 破解本地 mysql 使用者名稱和密碼(轉)MySql密碼
- java 控制反轉和依賴注入的理解Java依賴注入
- 從全球視野破解中國工業軟體產業發展之道產業
- 用VB“破解”有時間限制的程式 (轉)
- 菜鳥學堂之破解Sessioncookie的方法(轉)SessionCookie
- 破解WinXP組策略的鎖死難題(轉)
- 汽車破解
- windows 2000密碼破解 (轉)Windows密碼
- 巧妙破解Windows XP登陸口令(轉)Windows
- Webmin 暴力破解+ 執行命令(轉)Web
- 彩虹狗GS-MH破解-淺談狗的破解方法
- Java程式的反加密(轉)Java加密
- Navicat 破解版下載,Navicat破解教程
- CoolFocus Java Applet的破解 (4千字)JavaAPP
- 什麼是暴力破解?暴力破解的方法有哪些?
- 硬碟保護卡的破解 (轉)~~~~ (2千字)硬碟
- 破解Oracle一般使用者的口令(轉)Oracle
- 破解Windows XP組策略的"鎖死"難題(轉)Windows
- python pyinstaller打包的exe 反編譯問題記錄 破解加密Python編譯加密