公司法
当前位置: 首页 法律大全

idea给老代码加注释(源码分析咋嘞)

时间:2023-05-22 作者: 小编 阅读量: 2 栏目名: 法律大全

但也有一部分老司机是不搜破解码的,他们使用Jar包破解,有效期100年。之后通过我们的javaagent编程模拟授权被破解。在ASM中提供了诸多的API用于对类的内容进行字节码操作的方法。与传统的BCEL和SERL不同,在ASM中提供了更为优雅和灵活的操作字节码的方式。目前ASM已被广泛的开源应用架构所使用,例如:Spring、Hibernate等。

推荐阅读:

阿里P8架构师“呕心沥血”1年总结出这份Linux基础到进阶学习文档

年前面试京东3面凉经~ 面试过程与真题全分享 备战春招(java)

一、前言介绍

2020年了,对于一个程序猿来说;

2020 = 1024996 | 4044044044044042021 = 10249972022 = 102491062023 = 10249107...20xx = 从今年开始可怕

当你过了元旦,爽了周末,清早上班,拿起杯子,加点新(薪)水,打开电脑,收起烦恼,翘起小脚,上扬嘴角。一切就绪都准备好,好!撸代码!啊!!!IDEA duang duang duang,过期了!

脑瓜一热赶紧搜索破解码;

可能大部分伙伴都在搜各种一堆一大串的破解码往里面粘,一个个试到最后终于过了。但也有一部分老司机是不搜破解码的,他们使用Jar包破解,有效期100年。

那么!本文并不想引导用户都去使用破解版,像IDEA这么优秀,其实给你提供了很多选择;

  1. 如果你是学生可以免费使用
  2. 分为社区版和旗舰版,你可以使用社区版 Free, open-source
  3. 一般大公司都是有正版授权的,可以使用
  4. 如果你有开源项目也可以申请 IDEA 授权

所以,个人开发使用社区版本即可,不要使用破解。

好!回归正题,本文主要讲解是为什么放个Jar包就能破解,最后在使用一个jar进行破解演示。在以下章节中你可以学习到如下知识;

二、案例工程

我们通过一个案例工程来模拟破解过程是怎么做到的,其实每个版本的IDEA都在增强防护机制,破解也越来越难。

itstack-demo-code-idea└── src├── main│├── java││└── org.itstack.demo││└── JetbrainsCrack.java│└── resources│└── META-INF│ └── MANIFEST.MF└── test└── java├── com.jetbrains.ls.newLicenses│└── DecodeCertificates.java└── org.itstack.demo.test└── ApiTest.java

三、环境配置

  1. JDK 1.8
  2. IDEA 2019.3.1
  3. asm-all 3.3.1

四、代码讲述

在案例中我们模拟 IDEA 有一个 DecodeCertificates 类,用于做授权码校验。之后通过我们的 java agent 编程模拟授权被破解。

1. Java Agent 介绍

在 JDK1.5 以后,JVM 提供了 agent 技术构建一个独立于应用程序的代理程序(即为Agent),用来协助监测、运行甚至替换其他JVM上的程序。使用它可以实现虚拟机级别的AOP功能。

2. ASM 介绍

ASM 是一个 JAVA 字节码分析、创建和修改的开源应用框架。在 ASM 中提供了诸多的API用于对类的内容进行字节码操作的方法。与传统的 BCEL 和 SERL 不同,在 ASM 中提供了更为优雅和灵活的操作字节码的方式。目前 ASM 已被广泛的开源应用架构所使用,例如:Spring、Hibernate 等。

3. 开始我们的模拟破解之路

JetbrainsCrack.java & Agent 操作类

/** * 博客:http://bugstack.cn * 公众号:bugstack虫洞栈 | 更多原处优质干货 * Agent 类,所有程序启动只要配置了 -javaagent: 都会走到 premain 方法 */public class JetbrainsCrack {public static void premain(String args, Instrumentation inst) {System.out.println("**************************************");System.out.println("*公众号:bugstack虫洞栈*");System.out.println("*博客:https://bugstack.cn*");System.out.println("*你用剑,我用刀,好的代码都很烧! *");System.out.println("**************************************");inst.addTransformer(new MethodEntryTransformer());}static class MethodEntryTransformer implements ClassFileTransformer {private Logger logger = LoggerFactory.getLogger(MethodEntryTransformer.class);public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {try {if (className.equals("com/jetbrains/ls/newLicenses/DecodeCertificates")) {ClassReader cr = new ClassReader(classfileBuffer);ClassNode cn = new ClassNode();cr.accept(cn, 0);List<MethodNode> methodNodes = cn.methods;for (MethodNode methodNode : methodNodes) {if ("decodeLicense".equals(methodNode.name)) {InsnList insns = methodNode.instructions;//清除指令insns.clear();insns.add(new VarInsnNode(Opcodes.ALOAD, 1)); // 将本地指定的引用存入栈中insns.add(new InsnNode(Opcodes.ARETURN));// 从方法中返回引用类型的数据// 访问结束methodNode.visitEnd();ClassWriter cw = new ClassWriter(0);cn.accept(cw);byte[] bytes = cw.toByteArray();// 输出字节码到Classthis.outputClazz(bytes);// 返回最新字节码return cw.toByteArray();}}}} catch (Exception e) {return classfileBuffer;}return classfileBuffer;}private void outputClazz(byte[] bytes) {// 输出类字节码FileOutputStream out = null;try {out = new FileOutputStream("ASMDecodeCertificates.class");logger.info("ASM类输出路径:{}", (new File("")).getAbsolutePath());out.write(bytes);} catch (Exception e) {e.printStackTrace();} finally {if (null != out) try {out.close();} catch (IOException e) {e.printStackTrace();}}}}}

4. DecodeCertificates.java & 模拟 ideaIU-15.0.1 软件授权码校验类

public class DecodeCertificates {public String decodeLicense(String usingKey) {// 模拟校验授权码return "usingKey is error:"usingKey;}}

5. ApiTest.java & 测试类

/** * 博客:http://bugstack.cn * 公众号:bugstack虫洞栈 | 更多原处优质干货 * 测试类配置 VM 参数 * Idea VM options:-javaagent:E:\itstack\GIT\itstack.org\itstack-demo-code\itstack-demo-code-idea\target\itstack-demo-code-idea-1.0-SNAPSHOT.jar */public class ApiTest {private static Logger logger = LoggerFactory.getLogger(ApiTest.class);public static void main(String[] args) throws Exception {DecodeCertificates decodeCertificates = new DecodeCertificates();// 模拟usingKey:认购有效期至2089年7月8日String license = decodeCertificates.decodeLicense("Subscription is active until July 8, 2089");logger.info("测试结果:{}", license);}}

6. MANIFEST.MF 配置引导启动时加载

Manifest-Version: 1.0Premain-Class: org.itstack.demo.JetbrainsCrackCan-Redefine-Classes: true

7. pom 配置打包时加入ASM包

<!-- 将javassist包打包到Agent中 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><executions><execution><phase>package</phase><goals><goal>shade</goal></goals></execution></executions><configuration><artifactSet><includes><include>asm:asm-all:jar:</include></includes></artifactSet></configuration></plugin>

五、工程测试

  1. 先单纯的直接运行ApiTest.java ,测试结果如下(模拟返回授权不可用);

21:23:46.101 [main] INFO org.itstack.demo.test.ApiTest - 测试结果:usingKey is error:Subscription is active until July 8, 2089


第二步测试前先打包下工程,这个时候你会看到如下结果;

[INFO] --- maven-install-plugin:2.4:install (default-install) @ itstack-demo-code-idea ---[INFO] Installing E:\itstack\GIT\itstack.org\itstack-demo-code\itstack-demo-code-idea\target\itstack-demo-code-idea-1.0-SNAPSHOT.jar to D:\Program Files (x86)\apache-maven-3.6.2\repository\org\itstack\demo\itstack-demo-code-idea\1.0-SNAPSHOT\itstack-demo-code-idea-1.0-SNAPSHOT.jar[INFO] Installing E:\itstack\GIT\itstack.org\itstack-demo-code\itstack-demo-code-idea\dependency-reduced-pom.xml to D:\Program Files (x86)\apache-maven-3.6.2\repository\org\itstack\demo\itstack-demo-code-idea\1.0-SNAPSHOT\itstack-demo-code-idea-1.0-SNAPSHOT.pom[INFO] Installing E:\itstack\GIT\itstack.org\itstack-demo-code\itstack-demo-code-idea\target\itstack-demo-code-idea-1.0-SNAPSHOT-sources.jar to D:\Program Files (x86)\apache-maven-3.6.2\repository\org\itstack\demo\itstack-demo-code-idea\1.0-SNAPSHOT\itstack-demo-code-idea-1.0-SNAPSHOT-sources.jar[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time:3.080 s[INFO] Finished at: 2020-01-05T23:25:08 08:00[INFO] ------------------------------------------------------------------------

被代理前

public class DecodeCertificates {public String decodeLicense(String usingKey) {// 模拟校验授权码return "usingKey is error:"usingKey;}}

被代理后

package com.jetbrains.ls.newLicenses;public class DecodeCertificates {public DecodeCertificates() {}public String decodeLicense(String usingKey) {return usingKey;}}

六、综上总结

,
    推荐阅读
  • 怎样养好盆栽百合花(盆栽百合花又香又高贵)

    怎样养好盆栽百合花百合开花香气浓郁,艳丽而娇嫩,含苞待放,芬芳吐蕊,是特别深受人们喜爱的一种花卉。在选择的时候一定要选择正规的商家,选择对版的百合才能符合自己的心愿。大约两个月左右,就可以看到百合花开出艳丽的花朵了。百合花开完花之后不要丢掉,直接把它的残花修掉就可以了。

  • 绵阳市有哪些旅游景点好玩(旅行攻略之四川省绵阳市)

    绵阳又称为“中国科技城”,位于四川西北部盆地。风景优美,家人爬爬山不错,有天然溶洞)六:越王楼七:潼川古城(历史悠久,晚上夜景很不错。我国两弹就是在这里研究成功的。是个不错的打卡地)以上十个都是不错的景点,绵阳美食也有很多,米粉、锅盔、冒菜、酥饼、凉粉、醪糟、片粉、还有很多美食,大家可以去品尝一下

  • 忍界大战我爱罗带什么秘卷(这样带秒杀敌人)

    忍界大战我爱罗带什么秘卷带水龙卷和查克拉,水龙卷追踪可以更好地封走位,查克拉能配合大招迅速击杀敌人。在第四代风影遇刺不久后继任成为第五代风影,领导并守护着砂隐村,曾一度被“晓”抽去了一尾守鹤而死亡,最后被千代牺牲性命复活。第四次忍界大战中,我爱罗担任忍者联军队长与第四部队统领。战争结束后,我爱罗仍继续担任风影的职位,还和鸣人及木叶村等人维持着友好的关系。

  • 长春有哪些专科学校(长春的专科学校有哪些)

    师范教育部组建),是吉林省、长春市政府在“十二五”期间重点扶持建设的全省唯一一所师范高等专科学校。长春医学高等专科学校,是经教育部批准的全日制普通高等专科学校,“卓越医生教育培养计划”试点高校。

  • 明日之后夜魔是什么(夜魔特点介绍)

    明日之后夜魔是夜晚出现的野怪每当夜幕降临时,玩家总会收到一条特殊的提醒,那就是连续不断的紧凑三声喇叭声,并提示玩家“喇叭声唤醒了什么”,下面我们就来聊聊关于明日之后夜魔是什么?明日之后夜魔是什么明日之后夜魔是夜晚出现的野怪。其实,这个喇叭声唤醒的就是“夜魔”,出现这条提醒之后,也将意味着在不久过后有一位夜魔大人将亲自光顾你的家园,并向你寒暄温暖,表达最衷心的祝福!

  • 三本末世流小说推荐(10本末日基建玄幻类文)

    幸好“末日营地”游戏自由度极高。公测结束,她满心期待游戏正式运营,不料全球沦为游戏场……袁香儿学艺初成,入妖林,欲擒一小妖,契之以为使徒。袁香儿心中不忍,将其带回家中,哺食裹伤,悉心照料。至此之后,每天外出归来的袁香儿欣喜的发现家门口总会多出一些奇怪的礼物。小招待所内水电齐全,只要支付晶核就可以获得安全的居所美味的食物。

  • 哄女朋友的暖心故事(哄女友开心的故事)

    问老总老总,大家这儿有木有红萝卜?仔猪太胖了,猪妈妈担忧仔猪的身心健康,让仔猪减肥瘦身,猪妈妈每日监管仔猪慢跑。此刻小狗狗来找仔猪,猪妈妈恰好让小狗狗监管仔猪,小狗狗同意了猪妈妈。临行的情况下,猪妈妈刻意交待仔猪不可以喝凉水和吃凉的物品。仔猪开心的吃完起來,但是还没有等吃了,仔猪就肚子痛的倒在了地底,此刻猪妈妈正巧回家,立刻带著仔猪来到医院门诊。

  • 2060打游戏好吗(2060不仅节目全网出圈广受好评)

    10月22日起,江苏卫视推出了一档国产原创动漫形象舞台竞演节目《2060》,在每周五晚间时段播出。截至目前,《2060》已播出五期节目,CSM63城平均收视2.34%、收视份额11.57%。《2060》自开播以来,凭借新颖的节目模式以及弘扬中国传统文化的内核,获得了业内外各方的关注和肯定。文章还着重表扬了《2060》节目用好国风元素弘扬优秀传统文化,并采用年轻化表达贴近青少年喜好。

  • 新宝骏十年磨剑苦工一朝转型成功(新宝骏形象店什么样)

    在服务方面,新宝骏将会提供全生命周期的实施在线服务,通过APP实现从预约到服务完结的全面在线化。不仅如此,新宝骏还将提升服务水平,将会对到店的每一位消费者提供6对1的专属服务,包括店长、销售顾问、服务顾问、技术主管、保险专员和客服专员,给用户提供实时在线响应,为用户日常用车进行保驾护航。而且,新宝骏提供了在线预约和上门取车保养的服务,让您可以足不出户完成车辆保养。

  • 贵州赤水丹霞大瀑布美景迷人(赤水大瀑布难得一见的)

    在贵州赤水丹霞旅游区大瀑布景区,壮美的大瀑布气势恢宏。据了解,按照疫情防控要求,游客在进入景区时需要进行扫码、测温。景区还采取了门票线上预约、错峰游览等措施。此外,为应对假期客流,当地加强了车辆运力调控、增加工作人员值守,优化客流引导。