Java 内存马查杀工具

工具介绍

Java 内存马查杀工具,基于 Agent + Instrumentation + ASM 的 Java 进程内存马检测与清除工具(含 GUI)

本项目是一款用于检测与清除 Java 进程中内存马的工具。工具设计为三部分:

  • GUI 管理端(JFormDesigner):提供可视化操作界面,用于目标进程选择、会话管理、实时日志查看与分发、审计与导出。
  • Agent(注入模块):运行在目标 JVM 内部,基于 Instrumentation获取字节码、保存原始字节码、使用 ASM 分析字节码以判定可疑/恶意模块,并在确认后通过 redefineClasses + 反射手段执行清除。
  • 部分工具类:如socket服务端,JVM列表处理类等

GUI 与 Agent 通过 socket 连接通信:日志集中展示并按内存马类型分发到对应日志面板,便于定位与审计。

socket分别监听本地8899端口和9900端口。

核心功能

  1. 注入与会话管理

    • 使用 Attach API 将 Agent 加载到目标 JVM,并建立 socket 会话。
    • 支持通过 PID 列表选择或手动指定目标进程。
  2. 字节码抓取与保存

    • 在目标进程内抓取内存马字节码。
    • 将抓取到的字节码持久化到磁盘(按包/类名组织),便于使用 JADX /IDEA 等工具反编译。
  3. 字节码分析(ASM)

    • 解析方法调用、反射使用、动态类生成、独立 ClassLoader 等可疑特征。
    • 根据规则/签名对可疑模块进行分类(例如:动态加载并执行字节数组的模块、持有网络回连逻辑的模块、注入到关键框架的 hook 等)。
  4. 清除逻辑

    • 对确认的内存马使用 Instrumentation.redefineClasses()将恶意类替换为安全/空实现。
    • 通过反射断开入口(清理静态字段、移除 hook、停止相关线程、关闭网络连接等)。
    • 清除操作在进程内执行并记录完整操作日志以备审计。
  5. 日志与告警

    • 所有检测与清除操作实时回传 GUI 并按模块分发到相应日志面板。
    • 支持标记高危事件为告警并导出审计报告。

工具使用

将Kill_Memshell.jar文件将MemShellScannerAgent-1.0-SNAPSHOT.jar文件放到同一目录下

java -jar MemShellScannerAgent-1.0-SNAPSHOT.jar

扫描与清除

  1. 启动 GUI 点击获取当前进程,可得到当前运行的JVM进程列表。
  2. 选择进程点击attach则可注入进程,下方的日志界面会输出检测进程和结果。在中间的内存马分类板块会输出各内存马相关信息。
  3. 在内存马板块获取到内存马类名后可在右侧板块按照格式[filter/servlet/listener…]classname 输入,点击清除内存马,即可移除进程中内存马。
  4. 导出的内存马字节码保存在当前根目录下的dumpClassFile文件夹中

日志与导出

  • 支持导出抓取到的字节码(打包为 zip)以便离线反编译分析。
  • 支持将检测报告导出为 JSON 或 HTML 以便存档与审计。

工具下载

https://github.com/CafeD1/Kill_Memshell

内存是一种无文件攻击技术,攻击者通过在内存中注入恶意代码来实现持久化控制,避免了将恶意代码写入磁盘文件,从而绕过传统的基于文件的检测机制。针对内存查杀,通常依赖于内存分析、行为检测以及特定工具的使用。 ### 内存查杀方法 1. **Java Agent 技术** Java Agent 是一种可以在 JVM 启动时或运行时动态修改类字节码的技术。通过编写自定义的 Java Agent,可以实现对内存中加载的类进行监控和分析,检测是否存在异常的类加载行为,从而发现内存的存在。例如,`copagent` 是一个基于 Java Agent 的内存检测与清除工具,能够对运行中的 Java 应用进行实时监控[^1]。 2. **Arthas 分析与排查** Arthas 是阿里巴巴开源的 Java 诊断工具,支持对运行中的 Java 应用进行线程、类加载、JVM 状态等多维度的分析。通过 Arthas 可以查看当前加载的类信息,识别出未在磁盘上存在的类,从而判断是否为内存。例如,使用 `sc` 命令查看所有已加载的类,若发现某个类在磁盘上不存在,则可能是内存。此外,还可以使用 `thread` 命令查看线程信息,识别异常线程[^4]。 3. **内存快照分析** 对运行中的进程进行内存快照(heap dump)分析,可以识别出异常的类或对象。通过 `jmap` 工具生成堆转储文件后,使用 `MAT`(Memory Analyzer Tool)等工具进行分析,查找可疑的类或对象。例如,某些内存会通过 `ClassLoader` 动态加载恶意类,这些类通常不会出现在正常的类路径中[^1]。 4. **行为监控与流量分析** 内存虽然不依赖磁盘文件,但仍会通过网络进行通信。通过流量监控工具(如 Wireshark、Suricata 等)可以检测异常的网络连接和通信模式。例如,某些内存可能会定期与 C2 服务器通信,发送心跳包或接收命令。结合 IDS/IPS 规则,可以识别这类行为[^2]。 5. **Web 容器日志与线程分析** 在 Tomcat 等 Web 容器中,可以通过日志分析和线程状态监控来识别内存。例如,某些内存会通过 Filter 或 Servlet 实现持久化,导致 Web 容器中出现异常的 Filter 或 Servlet 配置。通过检查 `web.xml` 配置文件或运行时加载的 Filter 信息,可以发现异常配置[^1]。 ### 内存查杀工具 1. **Tomcat Memshell Scanner** 该工具专为检测 Tomcat 中的内存而设计,支持对运行中的 Tomcat 实例进行扫描,识别异常的类加载行为和 Filter/Servelt 配置。该工具可以通过命令行运行,并输出详细的扫描结果,便于进一步分析[^1]。 2. **copagent** 这是一个基于 Java Agent 的内存检测与清除工具,支持对运行中的 Java 应用进行实时监控。通过加载自定义的 Agent,可以拦截类加载事件,识别异常类并进行清除操作。该工具开源且易于集成到现有系统中[^1]。 3. **Java-Memshell-Scanner** 由 c0ny1 开发的内存扫描工具,支持对 Java Web 应用中的 Filter、Servlet 等组件进行扫描,识别潜在的内存攻击。该工具可以通过命令行调用,并提供详细的扫描报告,便于安全人员进行后续分析。 4. **Arthas** 作为一款强大的 Java 诊断工具,Arthas 提供了多种命令用于分析运行中的 Java 应用。通过 `sc` 命令可以查看所有已加载的类,通过 `thread` 命令可以查看线程状态,识别异常线程。此外,Arthas 还支持动态修改类字节码,可用于清除内存。 5. **Sysdig Falco** 虽然不是专为内存设计,但 Falco 是一个强大的行为监控工具,支持对系统调用、网络连接、文件访问等行为进行实时监控。通过定义自定义规则,可以检测到内存相关的异常行为,如异常的网络连接、线程创建等[^2]。 ### 示例:使用 Arthas 查看已加载类 ```bash # 查看所有已加载的类 sc -d *.* ``` 该命令将列出所有已加载的类及其类加载器信息,便于识别异常类。 ### 示例:使用 jmap 生成堆转储文件 ```bash # 生成堆转储文件 jmap -dump:format=b,file=heap.bin <pid> ``` 生成的 `heap.bin` 文件可以使用 MAT 工具进行分析,查找可疑对象。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李白你好

年轻人,少吐槽,多搬砖

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值