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


相关推荐
23.17 小时前
【分析】网关故障排查指南:如何区分并定位‘上游’与‘下游’问题
java
BestOrNothing_201517 小时前
VS Code 中 Codex 功能详解:登录、IDE上下文、Token窗口、使用额度与重连问题说明
ide·agent·token·vs code·codex·reconnection
liguojun202517 小时前
软硬一体智慧场馆系统推荐——助力场馆数字化高效升级
java·大数据·人工智能·物联网·1024程序员节
晨曦中的暮雨17 小时前
4.17小厂HR面
java
青云计划17 小时前
渐进式发布
java·后端
小则又沐风a17 小时前
深入理解进程概念 第三章 进程调度切换
java·linux·服务器·前端
努力攀登的小k17 小时前
《Java基础,Java多态入门到进阶:重写、重载、转型的逻辑与实战避坑》
java·开发语言
甲方大人请饶命17 小时前
Java-集合进阶
java·开发语言
噗噗1217 小时前
基于 Go 语言实现企业大群发任务的平滑限流与多线程漏斗调度器
java·开发语言