Idea的mybatis插件破解

博客地址java

背景

一些java軟件要進行收費,不少採用遠程認證的方式,jar包代碼中確定有一個地方處理是否已經認證。 咱們經過一些手段,如本地創建一個認證服務器、修改jar包class文件修改認證邏輯等等。git

分析

本地採起idea插件[mybatis pluin]進行實驗,由於這個比較簡單。 在JavaUtils類中有一個refValid方法驗證key和result是否有效 在一個ActivationDriver類的activate方式 是進行激活驗證。github

環境

MAC Intellj 15 (16也是相似的)服務器

步驟

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

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文件夾放到一個目錄,執行ide

jar uvf mybatis_plus.jar com

這樣就把修改的class文件替換了。 重啓Idea便可生效ui

相關文章
相關標籤/搜索