本帖最后由 haoduoyuye 于 2023-11-11 11:08 编辑
进入正题 下载 Mybatis Log插件 下载crf:https://github.com/leibnitz27/cfr 反编译 mybatis-log.jar java -jar cfr-0.152.jar mybatis-log.jar --renamedupmembers true --hideutf false >> mybatis-log.txt
从这个按钮入手 当我们点击它时会调用 createToolWindowContent 方法, 发现只有当 bl2 == null 时才会跳转到 block14 ,然后执行 E.a(project, toolWindow); 所以我们只需要让 e_0.a(); 方法返回 null 就行。 然后去分析 class e_0 这个类发下如下方法 // a方法在上面被调用,我们需要返回null public static boolean a() {...} // 下面四个方法经过分析我们直接将返回值修改为true就行 public static boolean b() {...} private static boolean a(String string) {...} private static boolean b(String string) {...} private static boolean c(String string) {...}
这里借助 javassist 生成修改后的class文件 public static void hookMethod() throws Exception { ClassPool classPool = ClassPool.getDefault(); classPool.appendClassPath("D:\\mybatis-log.jar"); CtClass ctClass = classPool.get("e"); CtMethod aMethod = ctClass.getDeclaredMethod("a", new CtClass[]{}); aMethod.setBody("return null;");
String methodBody = "return true;"; CtMethod a2Method = ctClass.getDeclaredMethod("a", new CtClass[]{classPool.get("java.lang.String")}); a2Method.setBody(methodBody);
CtMethod b2Method = ctClass.getDeclaredMethod("b", new CtClass[]{}); b2Method.setBody(methodBody);
CtMethod bMethod = ctClass.getDeclaredMethod("b", new CtClass[]{classPool.get("java.lang.String")}); bMethod.setBody(methodBody);
CtMethod cMethod = ctClass.getDeclaredMethod("c", new CtClass[]{classPool.get("java.lang.String")}); cMethod.setBody(methodBody);
ctClass.writeFile("writefile"); }
使用下面命令将生成好的 e.class 文件替换掉jar包中的e.class jar uvf mybatis-log.jar e.class
最后再移除收费提示,修改jar包META-INF/plugin.xml将下面代码删除即可 <product-descriptor code="PMYBATISLOG" release-date="20200501" release-version="202051"/>
下方隐藏内容为本帖所有文件或源码下载链接:
游客你好,如果您要查看本帖隐藏链接需要登录才能查看,
请先登录
|