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>








冰蝎内存马项目

只支持tomcat:https://github.com/rebeyond/memShell


相关推荐
武子康8 小时前
图片删了,为什么旧链接还能打开、后台还能生成回来?
人工智能·agent
金銀銅鐵8 小时前
一个 Java 文件实现《孫子兵法·始計篇》中英对照阅读器
java·后端·ai编程
DevOpenClub8 小时前
高考教育信息问答 API:会话参数、资料引用与流式响应
java·数据库·高考
bro_Java6668 小时前
《排序的底层逻辑:比较、交换与分治》
java·算法·排序算法
znyin10 小时前
dsh源码解析 - Cordis 如何启动:插件树与热更新
agent
柒和远方10 小时前
从「存一条记忆」到「管一段记忆」——Mem0 与自建 psql+向量长期记忆的取舍
agent
文丑颜不良啊10 小时前
LeetCode2081~2100题目解析
java·leetcode
玖米GEO运营王总监10 小时前
2026年账号矩阵协同效应怎么量化:三个指标与公式结构
java·大数据·数据库
Flynt10 小时前
内存省16倍的Lightpanda实测:数字是真的,但并发代码要重写
性能优化·开源·agent
叼烟扛炮11 小时前
[LangChain] 学习笔记(03):打破失忆症——对话机制与上下文管理
java·前端·javascript·笔记·学习·langchain