使用javassist對已經編譯好的class檔案進行修改
javassist使用教程(jar破解)
Javassist是一個開源的java位元組碼操作工具,主要是對已經編譯好的class檔案進行修改和處理,這裡我寫了一個簡單的說明,複雜的請去看www.javassist.com的官方文件。
首先說明的是我不是不尊重作者的成果,有時候需要給客戶選擇的時候不可能使用者沒看就要花錢買,可以先破解了讓使用者看效果,效果好自然會買的.
1. 首先下載開源的程式碼,或者直接使用它的jar,開源的程式碼裡有simple,可以構建工程執行。
下載回來的檔案結構如下,如果你想構造工程的話,先檢視你的windows的classpath是否引入了java的tools.jar,沒有的話你需要在工程裡引入,這個jar在JDK的lib目錄下面,主要作用是提供JDI的使用。
[img]http://dl.iteye.com/upload/attachment/0083/4148/23121653-a7a4-3883-90b0-be58906518a1.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/0083/4152/47d81d7d-eee0-3e49-a69d-6cdf06d557c2.jpg[/img]
2. Javassist下面有很多例子,包括的方法名字的修改,許可權的修改和引數的修改等等,可以自己看,我主要說明一下jar破解方面的。
(1) 首先準備你要破解的jar,我現在要破解的是chart.ext.jar
[img]http://dl.iteye.com/upload/attachment/0083/4154/7bd1f17f-fcdd-379d-aa32-e37b7d306bbb.jpg[/img]
(2) 先用反編譯工具,檢視一下你需要修改程式碼的位置,反編譯出來可能有錯誤,但是類名和方法名一般可以反編譯正確,如果jar的加密混淆達到了類名和方法名都混淆掉的話,這個方法就不能用了(一般不會出現這麼牛的混淆工具)。
[img]http://dl.iteye.com/upload/attachment/0083/4158/25e09a49-2a3e-39fb-92fc-e5c22a29faef.jpg[/img]
(3) 經過分析反編譯的jar檔案,我們找到a.class這個類,這個類是在圖上繪製版權的,去掉他就可以了(有的jar的授權是時間的,原理差不多,找到判斷時間的關鍵跳轉就可以了)
(4) 開始寫程式碼,很簡單的幾句話
///////入口啟動函式
publicstaticvoid main(String[] args) throws Exception {
//這個是得到反編譯的池
ClassPool pool = ClassPool.getDefault();
//取得需要反編譯的jar檔案,設定路徑
pool.insertClassPath("E:""crack""chart.ext.jar");
//取得需要反編譯修改的檔案,注意是完整路徑
CtClass cc1 = pool.get("com.objectplanet.chart.a");
try {
//取得需要修改的方法
CtMethod method = cc1.getDeclaredMethod("a");
//插入修改項,我們讓他直接返回(注意:根據方法的具體返回值返回,因為這個方法返回值是void,所以直接return;)
method.insertBefore("{if(true) return ;}");
//寫入儲存
cc1.writeFile();
} catch (NotFoundException e) {
e.printStackTrace();
}
}
執行後會在工程下生成一個新的class檔案,反編譯開啟檢視,會發現
if (1 != 0)
return;
這個就不會執行繪製了
[img]http://dl.iteye.com/upload/attachment/0083/4160/057d9b77-b6ee-3133-b8d2-1791951a37d3.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/0083/4167/5f3988e1-330d-3ab2-9a31-1e38a9416932.jpg[/img]
(6) 把原有的用winrar解壓開
[img]http://dl.iteye.com/upload/attachment/0083/4169/f11ccda8-bae4-3b4d-ba94-34e03bc1c57c.jpg[/img]
(7) 把修改的class覆蓋原有的class
[img]http://dl.iteye.com/upload/attachment/0083/4171/76d630a4-bc7d-3d13-9ffb-ef28a1e76d4d.jpg[/img]
(8) 用winrar把解壓出來的重新壓縮,主要要選擇壓縮格式為zip
[img]http://dl.iteye.com/upload/attachment/0083/4173/e116949d-fe64-36e5-ac42-040669d3cafb.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/0083/4175/fc5b2d9e-42d6-3d33-97b1-96f8d4798334.jpg[/img]
(10) 把生成的壓縮檔案chart.ext.zip修改為chart.ext.jar,完工。