1. 程式人生 > >Idea的mybatis外掛破解

Idea的mybatis外掛破解

背景

一些java軟體要進行收費,很多采用遠端認證的方式,jar包程式碼中肯定有一個地方處理是否已經認證。
我們通過一些手段,如本地建立一個認證伺服器、修改jar包class檔案修改認證邏輯等等。

分析

本地採取idea外掛[mybatis pluin]進行實驗,因為這個比較簡單。
在JavaUtils類中有一個refValid方法驗證key和result是否有效
在一個ActivationDriver類的activate方式
是進行啟用驗證。

環境

MAC Intellj 15 (16也是類似的)

步驟

下載外掛找到對應的儲存jar包的位置,如在我的機器上是~/Library/Application Support/IntelliJIdea15/mybatis_plus/lib
下載後新建一個工程,將這個jar包加入到專案的依賴Libary。 將javassist加入到依賴中,用於修改class檔案。
編寫一個簡單的Main類和Main方法。

package javaassist;

import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.NotFoundException;

import java.io.IOException;

/**
 * Description:
 *
 * @author liuzhengyang
 * @version 1.0
 * @since 2016-09-16
 */
public
class Main { public static void main(String[] args) throws NotFoundException { ClassPool pool = ClassPool.getDefault(); CtClass driverClass = pool.get("com.seventh7.mybatis.ref.license.ActivationDriver"); CtClass javaUtil = pool.get("com.seventh7.mybatis.util.JavaUtils"); CtMethod activate = driverClass.getMethod("activate"
, "(Ljava/lang/String;)Lcom/seventh7/mybatis/ref/license/ActivationResult;"); CtMethod refValid = javaUtil.getDeclaredMethod("refValid"); try { refValid.setBody("{return true;}"); } catch (CannotCompileException e) { e.printStackTrace(); } System.out.println(activate); try { activate.setBody("{com.seventh7.mybatis.ref.license.LicenseData licenseData = new com.seventh7.mybatis.ref.license.LicenseData(\"1\", \"2\");com.seventh7.mybatis.ref.license.ActivationResult res =com.seventh7.mybatis.ref.license.ActivationResult.success(licenseData); return res;}"); } catch (CannotCompileException e) { e.printStackTrace(); } try { driverClass.writeFile("hello"); javaUtil.writeFile("hello"); } catch (CannotCompileException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

這樣會在執行java命令的目錄(在Idea裡是project下面的目錄)生成一個hello資料夾,下面有ActivationResult這個類。
將com資料夾和mybatis_plus.jar資料夾放到一個目錄,執行

jar uvf mybatis_plus.jar com 

這樣就把修改的class檔案替換了。
重啟Idea即可生效。