MyBatisCodeHelperpro插件 配置

2023-05-17 约 587 字 阅读时长2 分钟

MyBatisCodeHelperpro 是一款 IntelliJ IDEA 上生成mybatis模版文件的插件。 这里分析下怎么无限使用的思路仅供参考。其实很多客户端软件都可以参考该思路 分析该插件工作原理:

  1. 提交激活码到服务端
  2. 服务端验证返回验证信息(是加密信息)
  3. 本地解密信息,将解析后的json解析为实体类
  4. 判断json解析的实体类的字段过期时间

处理思路:修改最后实体类代码,直接跳过服务端返回的有效时间。 修改设置(setXXX),获取(getXXX)方法。不使用解析后的json字段设置,固定为一个无限长的时间达到破解的结果

反编译jar包

该插件核心jar包为MyBatisCodeHelper-Pro-obfuss.jar,这是一个混淆后的jar包,所以需要借助CRF工具

bash
1java -jar .\cfr-0.152.jar .\MyBatisCodeHelper-Pro\lib\MyBatisCodeHelper-Pro-obfuss.jar --renamedupmembers true --hideutf false >> a.txt

cfr GitHub地址

https://github.com/leibnitz27/cfr

官网地址

https://www.benf.org/other/cfr

查看反编译结果

image-20230517092036559

需要修改的class为:com.ccnode.codegenerator.H.d.b

生成需要的class文件

借助 javassist生成修改后的class文件

  1. 导入依赖

    xml
    1<dependency>
    2    <groupId>org.javassist</groupId>
    3    <artifactId>javassist</artifactId>
    4    <version>3.29.2-GA</version>
    5</dependency>
  2. 生成class文件的代码

    java
     1public static void main(String[] args) throws Exception {
     2    ClassPool aDefault = ClassPool.getDefault();
     3    aDefault.insertClassPath(
     4            "E:\\MyBatisCodeHelper-Pro\\MyBatisCodeHelper-Pro\\lib\\MyBatisCodeHelper-Pro-obfuss.jar");
     5    aDefault.importPackage("java.lang.Boolean");
     6    CtClass c2 = ClassPool.getDefault().getCtClass("com.ccnode.codegenerator.H.d.b");
     7
     8    CtMethod aMethod = c2.getDeclaredMethod("d");
     9
    10    StringBuilder builder1 = new StringBuilder();
    11    builder1.append("{")
    12            .append("       return new Long(4797976044000L);")
    13            .append("}");
    14    aMethod.setBody(builder1.toString());
    15
    16    CtClass lctClass=ClassPool.getDefault().getCtClass("java.lang.Long");
    17    CtMethod bMethod = c2.getDeclaredMethod("a",new CtClass[]{lctClass});
    18    StringBuilder builder2 = new StringBuilder();
    19    builder2.append("{")
    20            .append("        this.e = new Long(4797976044000L);")
    21            .append("}");
    22    bMethod.setBody(builder2.toString());
    23
    24    CtMethod cMethod = c2.getDeclaredMethod("c");
    25    StringBuilder builder3 = new StringBuilder();
    26    builder3.append("{")
    27            .append("        return Boolean.TRUE;")
    28            .append("}");
    29    cMethod.setBody(builder3.toString());
    30
    31    CtClass bctClass=ClassPool.getDefault().getCtClass("java.lang.Boolean");
    32    CtMethod dMethod = c2.getDeclaredMethod("a",new CtClass[]{bctClass});
    33    StringBuilder builder4 = new StringBuilder();
    34    builder4.append("{")
    35            .append("        this.c = Boolean.TRUE;")
    36            .append("}");
    37    dMethod.setBody(builder4.toString());
    38
    39    c2.writeFile();
    40}

替换jar包的class文件

bash
1jar -uvf .\MyBatisCodeHelper-Pro-obfuss.jar .\com\ccnode\codegenerator\H\d\b.class
使用滚轮缩放
按住拖动