用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>