Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

GXhunter/easy-javaagent-core

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

一个简单易用的agent sdk

简易Javaagent开发sdk包,不需要学习字节码、不需要学习双亲委派、也不需要关心类加载方式。 引入核心包后继承相关类快速实现jvm级aop,无视final、private、protect。

开始使用

  1. 创建空maven项目

  2. 在pom.xml,引入parent包,并配置属性

        <parent>
            <artifactId>hunter-agent-parent</artifactId>
            <groupId>io.github.gxhunter</groupId>
            <version>仓库新版</version>
        </parent>
        <properties>
            <author>hunter</author>
            <agent.name>cloud-debug-agent</agent.name>
            <agent.entry.class>com.gxhunter.InitAgent</agent.entry.class>
        </properties>

    其中:

    属性 描述 是否必须
    author 项目作者
    agent.name 项目名称
    agent.entry.class 项目入口
  3. AOP方法拦截

    1. 随便创建一个类
    2. 指定拦截Class: 在类上添加注解 @ClassWeaver("com.xx"),指定要拦截的对象全路径包名
    3. 指定拦截的method: 编写一个静态方法,签名必须是()Lcom/gxhunter/agent/core/asm/MethodAdvice;,即: 返回值是MethodAdvice,参数为空
    4. 编写方法体实现拦截,如:
        return methodVisitor -> {
            methodVisitor.visitCode();
            methodVisitor.visitVarInsn(ALOAD, 0);
            methodVisitor.visitVarInsn(ALOAD, 1);
            methodVisitor.visitFieldInsn(PUTFIELD, "org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBean", "metadataMap", "Ljava/util/Map;");
            methodVisitor.visitVarInsn(ALOAD, 1);
            methodVisitor.visitMethodInsn(INVOKESTATIC, "com/gxhunter/utils/EurekaUtils", "interceptMetadata", "(Ljava/util/Map;)V", false);
            methodVisitor.visitInsn(RETURN);
            methodVisitor.visitMaxs(2, 2);
            methodVisitor.visitEnd();
        };
      
  4. 编写入口类 上述配置的 ${entryClassPath} ,实现接口 com.gxhunter.agent.core.plugin.PluginEntry

    1. com.gxhunter.agent.core.plugin.PluginEntry.weavers : 方法拦截器(就是上述的AOP类)
    2. com.gxhunter.agent.core.plugin.PluginEntry.init: 初始化回调(一些初始化的操作放在这里,一般什么都不需要做)
  5. 运行,启动参数添加 -javaagent:xx\easy-agent-core-jar-with-dependencies.jar=插件uri 等号后面是使用url编码 你编译插件的uri地址。例如,开发的插件在C:\Users\hunter\Desktop\x.zip,就添加file%3A%2FC%3A%2FUsers%2Fhunter%2FDesktop%2Fx.zip即可

  6. 完成

能做什么?

端云联调

​ 只要你有一台跳板机,通过angent拦截NIO和BIO的方法,转到跳板机地址,即可实现端云联调。

此项目已初步开发完成,等待稳定后开源

java软件破解

​ 使用java编写的收费软件(包括idea)理论上都可以通过拦截 java.net.SocksSocketImpl 的方法实现破解,但拦截那些url,伪装成什么数据,请自行抓包分析

其他增强

无侵入的日志收集、性能分析等等

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.