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

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厘米左右,土要湿润一些,模拟大葱的生长环境,吃的时候随时拔出来一颗,这样可以保存几个月之久大葱也非常新鲜。

  • 梭子蟹烧熟能放多久 梭子蟹多久能煮熟

    2、梭子蟹中含有丰富的蛋白质成分,而且又经过了油盐的烹饪,因此在一定温度条件下,很容易滋生细菌而变质,若是将烧熟的梭子蟹直接置于常温下存放,一般在只能保存6-8小时左右;3、若是将其置于冰箱保存,一般保存时间相对会长一些,但是也不宜超过一天,烧熟的梭子蟹保存时间越长,其鲜味越差,所以一般建议梭子蟹最好是现做现吃,尽量不要留到下一顿。

  • 南昌大学是国内双一流建设高校么(南昌大学入选部省合建)

    日前,教育部召开支持和提升中西部高等教育发展座谈会,部署启动部省合建工作。陈宝生表示,支持举措要体现合力,在不改变现有隶属关系和管理体制基础上,发挥部、省、校和支援方的作用。还要选优配强合建高校领导班子,将合建高校领导班子成员、校级后备干部列入直属高校干部培训计划。期待南昌大学发挥辐射带动作用我省有教育界人士表示,南昌大学作为我省唯一的211高校,此次入选“部省合建”高校是实至名归。

  • 直角锐角平角钝角之间的区别于联系是什么(直角锐角平角钝角之间的区别于联系是啥)

    接下来我们就一起去研究一下吧!等于180度的角是平角,大于90度小于180度的角是钝角。锐角、直角、钝角是对大于0°并且小于180°的角的一个分类,锐角、直角、钝角间的区别在于角的大小不同。

  • 极端危害环境是指(极端危害环境是指什么)

    极端危害环境是指极端危害环境是指在低温、高碱、高盐、高压、缺水等极其不适合生物生长的环境。而在这种恶劣贫瘠的极端环境中还能够很好地生活的微生物被称为极端微生物,这些极端微生物代表着生命活动的极限。大多数电子产品设计要求参数当中都有要求在极端环境下产品能够正常工作。极端温度极端温度是指产品工作的环境最高和最低温度范围。通常室温认为是25度。

  • 布面鼠标垫属于什么垃圾(布面鼠标垫属于哪些垃圾)

    以下内容希望对你有帮助!布面鼠标垫属于什么垃圾布面鼠标垫属于可回收垃圾可回收垃圾就是可以再生循环的垃圾。本身或材质可再利用的纸类、硬纸板、玻璃、塑料、金属、人造合成材料包装等,与这些材质有关的如:报纸、杂志、广告单及其它干净的纸类等皆可回收。另外包装上有绿色标章是属于要付费的双系统,属于可回收垃圾。

  • 民间谚语大全实用又有趣( 百姓民间气象谚语民谣大全)

    每月两节日期定,最多相差一两天,上半年来六甘一,下半年是八甘三。按照公历来推算,每月两气不改变。抓紧季节忙生产,种收及时保丰年。常刮西北风,近日天气晴。无风起横浪,三天台风降。当阴雨天气来临时,云层比较低,云底盖住山顶。乌头风白头雨“乌头”与“白头”是指两种云的云顶颜色来说的。卷积云一般出现在五千米以上的高空,形成后只能维持几分钟到一个多小时。出现这种云,表明地上空有低压槽移近。

  • 春季角膜炎一般几天好(春季角膜炎频发)

    角膜炎症必然使视力或多或少地受到影响,尤以炎症侵犯瞳孔区域者更为严重。角膜炎的发病症状一、外伤与感染角膜炎有哪些危害1、前房积脓严重病例多合并有虹膜睫状体炎。对各种原因引起的角膜上皮损伤或角膜溃疡,原则上禁用皮质类固醇,以免促使溃疡恶化,或延缓上皮损伤的愈合。角膜炎因角膜外伤,细菌及病毒侵入角膜引起的炎症。

  • 家居旺财的风水方法有哪些(家居旺财的风水方法介绍)

    家居旺财的风水方法有哪些门内是一处不可忽视旺财宝地,门口的玄关处是藏风聚气之地。厨房在风水中有财库说法,主掌内财运。因此,这些地方不能为空,要时时有食品;而且炉灶后方不宜空旷,以免影响财运。一般而言,在客厅大门对角45度位置,正是所谓的“明财位”。葫芦代表福禄,在财位摆放葫芦,旺财效果很显著;或悬挂一个葫芦,对提升财运也很有帮助。

  • 羊水少的原因(孕妇羊水少是什么原因引起的)

    胎儿畸形导致羊水少如果在孕早期或者中期发现羊水过少,则可能是因为宝宝有缺陷,导致不能产生足够的尿液来维持羊水循环。宝宝缺氧导致羊水少慢性缺氧会导致胎儿在子宫内发育迟缓,引起胎儿血液循环重分配,使血液主要供应脑和心脏,导致肾血流量下降,胎尿生成减少而致羊水过少。所以有人认为有些原因不明的羊水过少可能与羊膜本身病变有关。