天堂的风 发表于 2023-11-10 11:52

Mybatis Log逆向

本帖最后由 天堂的风 于 2023-11-13 09:52 编辑

贴一个免费的Mybatis Log插件:https://github.com/Link-Kou/intellij-mybaitslog.git

进入正题
下载 Mybatis Log插件(2023.10.1版本)


下载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 这个类发下如下方法
```java
// 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文件
```java
    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"/>

天堂的风 发表于 2023-11-10 16:58

wuai006qw 发表于 2023-11-10 16:50
学习到了,有点不太明白,jar包解码之后,修改完对应的文件之后,怎么在形成jar包呢?

使用javassist生成修改后的class文件
用7zip等压缩软件对jar文件进行替换
或者使用jar uvf 命令替换即可

飘零的殇 发表于 2023-11-10 15:43

厉害了,学习一下

vvvwxf 发表于 2023-11-10 15:51

我是真的好想当一个伸手党

你好早安啊 发表于 2023-11-10 16:36

记得有免费的

wuai006qw 发表于 2023-11-10 16:50

学习到了,有点不太明白,jar包解码之后,修改完对应的文件之后,怎么在形成jar包呢?

tomliu 发表于 2023-11-10 16:57

学习到了, 这就打开idea试试看

qinghuai 发表于 2023-11-10 17:35

学到了,立马安装一个,哈哈

孤狼微博 发表于 2023-11-11 01:33

我趴这里了等个投喂的

chaohen 发表于 2023-11-11 20:31

大佬厉害,可以很秀
页: [1] 2 3
查看完整版本: Mybatis Log逆向