MyBatisCodeHelperpro 是一款 IntelliJ IDEA 上生成mybatis模版文件的插件。 这里分析下怎么无限使用的思路仅供参考。其实很多客户端软件都可以参考该思路 分析该插件工作原理:
- 提交激活码到服务端
- 服务端验证返回验证信息(是加密信息)
- 本地解密信息,将解析后的json解析为实体类
- 判断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.txtcfr GitHub地址
https://github.com/leibnitz27/cfr
官网地址
https://www.benf.org/other/cfr
查看反编译结果

需要修改的class为:com.ccnode.codegenerator.H.d.b
生成需要的class文件
借助 javassist生成修改后的class文件
导入依赖
xml1<dependency> 2 <groupId>org.javassist</groupId> 3 <artifactId>javassist</artifactId> 4 <version>3.29.2-GA</version> 5</dependency>生成class文件的代码
java1public 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