大神论坛

找回密码
快速注册
查看: 154 | 回复: 0

[原创] 对Mybatis Log插件的逆向分析 破解收费版 附个免费版Mybatis Log

主题

帖子

0

积分

初入江湖

UID
632
积分
0
精华
威望
0 点
违规
大神币
68 枚
注册时间
2023-10-14 10:35
发表于 2023-11-11 11:08
本帖最后由 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"/>


下方隐藏内容为本帖所有文件或源码下载链接:

游客你好,如果您要查看本帖隐藏链接需要登录才能查看, 请先登录

返回顶部