JAVA攻防-Agent技术&JVM字节码&Premain启动加载&Agentmain运行附加&内存马应用

知识点:

Java攻防-Agent技术-JVM&启动加载&运行附加&内存马应用

演示案例-Java攻防-Agent技术-JVM&启动加载&运行附加&内存马应用

Java Agent是一种可以在JVM启动时或运行时附加的工具,它可以拦截并修改类文件字节码。Java Agent通常用于实现AOP(面向切面编程)、性能监控、日志记录等功能。

文章参考:docs.dingtalk.com/i/nodes/QPGYqjpJYrPrKaQ5UE6eZkY38akx1Z5N







一、Java Agent有两种加载方式:

1、Premain使用

bash 复制代码
在JVM启动时通过命令行参数-javaagent:path/to/xx.jar来指定。
就是使用java运行一个1.jar文件并指定这个命令参数指向2.jar后,可以使用2.jar的代码影响到1.jar的代码正常运行。
















bash 复制代码
mvn package
mvn clean package
java -cp . zero.overflow.Main
java -javaagent:D:\V2024-11\116\MyAgent\target\MyAgent-1.0-SNAPSHOT-jar-with-dependencies.jar -cp . zero.overflow.Main








2、Agentmain使用

bash 复制代码
在JVM已经启动后,通过Attach API动态地附加到正在运行的JVM进程上。

添加依赖类pom.xml

bash 复制代码
<dependency>
    <groupId>com.sun</groupId>
    <artifactId>tools</artifactId>
    <version>1.8</version>
    <scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>

改变PremainTest.java

bash 复制代码
public class AgentMainTest {
    public static void agentmain(String agentArgs, Instrumentation inst)
    {
inst.addTransformer(new MyTransformer(),true);
        for (Class<?> clazz : inst.getAllLoadedClasses()){
            if (clazz.getName().equals("zero.overflow.Fox")){
                try {
inst.retransformClasses(clazz);
                } catch (UnmodifiableClassException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}







动态注入:

bash 复制代码
public class Main {
    public static void main(String[] args) throws AgentLoadException, IOException, AgentInitializationException, AttachNotSupportedException {
        VirtualMachine attach = VirtualMachine.attach("37416");
attach.loadAgent("D:\\V2024-11\\116\\MyAgent\\target\\MyAgent-1.0-SNAPSHOT-jar-with-dependencies.jar");
    }
}




二、Agent内存马注入:

利用javassist注入Filter内存马

添加依赖类pom.xml

bash 复制代码
<dependency>
<groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.30.2-GA</version>
</dependency>








冰蝎内存马项目

只支持tomcathttps://github.com/rebeyond/memShell


相关推荐
刺客xs2 小时前
C++ 11新特性
java·开发语言·c++
Barkamin2 小时前
直接插入排序的简单实现
java·算法·排序算法
星辰_mya2 小时前
jvm——时不我待
运维·服务器·jvm·面试
佩奇大王2 小时前
P1460 路径问题
java·开发语言
self-motivation2 小时前
openclaw架构分析(三) -------------- memory实现分析
agent·memory·rag
2401_900151542 小时前
用Python和Twilio构建短信通知系统
jvm·数据库·python
筱顾大牛2 小时前
Redission快速入门---分布式锁
java·redis·分布式·缓存
我真会写代码2 小时前
手写tomcat框架
java·servlet·tomcat
自在极意功。2 小时前
ArrayList扩容机制
java·开发语言·算法·集合·arraylist