用extjs開發(fā)內(nèi)部管理系統(tǒng)真的是非常方便,搭配idea(15.0.3)+extjs插件(6.0.8)就更高效了。不過sencha jetbrain plugin是收費(fèi),只能試用30天。
這里研究下插件源碼,并進(jìn)行破解,作為學(xué)習(xí)試用。
通常來說破解java程序有兩種方法:
- 反編譯字節(jié)碼,修改源碼,重新編譯成字節(jié)碼,然后替換jar包
- 直接修改字節(jié)碼
第一張方法最通用,反編譯很簡單,修改源碼后重新編譯一般可能比較麻煩,因?yàn)樾薷囊惶幋a需要把所有依賴都導(dǎo)入才能再次成功編譯,非常麻煩。
我這里用第二種方法,使用javassist提供的字節(jié)碼修改功能直接修改字節(jié)碼文件:
先安裝sencha plugin試用版;
在新建maven項(xiàng)目,在pom中加入依賴:
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.12.1.GA</version>
</dependency>
新建class,內(nèi)容如下:
package com.test;
import javassist.*;
import java.io.IOException;
public class DeCompile {
public static void main(String args[]) {
ClassPool pool = ClassPool.getDefault();
try {
pool.insertClassPath("50228e4ed1034dfe.jar");
CtClass cc = pool.get("com.sencha.idea.LicenseValidator");
CtMethod cm = cc.getDeclaredMethod("validateLicense", null);
cm.setBody("return true;");
cc.writeFile();
} catch (NotFoundException e) {
e.printStackTrace();
} catch (CannotCompileException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
原理很簡單,50228e4ed1034dfe.jar是插件里核心的jar包,一般在idea安裝目錄下的plugins目錄,或者Application Support(對mac)目錄,可能這個(gè)文件的名字不一樣,但很容易就和其他jar包區(qū)分開,可以先用反編譯工具把這個(gè)jar包打開,瀏覽下里面的代碼,很容易找到與license相關(guān)的類文件和驗(yàn)證方法,找到之后就是怎么修改的問題。
上面的代碼就是直接拿到validateLicense方法,非常暴力地把方法體直接改為return true, 然后再寫入class文件。
這里writeFile不是寫回原jar文件,而是在工程的根目錄下,以com.sencha.idea.LicenseValidator的package路徑新建了一系列文件夾,然后在目錄com/sencha/idea下新建了LicenseValidator.class文件。再次用反編譯軟件打開,發(fā)現(xiàn)里面的validateLicense方法已經(jīng)被修改了。
把原來的jar包解壓縮,然后替換這個(gè)class文件,重新打包新的jar文件,用新的jar文件替換原來的jar文件,重啟IDEA,破解成功。
unzip 50228e4ed1034dfe.jar
### replace class file
jar cvf 50228e4ed1034dfe.jar ./*
### replace jar file
這里是我生成好的jar包,僅供懶人免費(fèi)學(xué)習(xí)使用,切勿用于商業(yè)用途。
https://pan.baidu.com/s/1nvCmsT7
uip4
<blockquote>
【注意】 本文內(nèi)容僅供學(xué)習(xí),切勿用于商業(yè)用途,否則后果自負(fù)
</blockquote>