Skip to content

SwagRee/JavaHook

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JavaHook

JavaHook 是一个小型 Java attach/hook 工具雏形,目标是提供类似 Arthas 的运行时能力,但入口是精致、轻量的 JavaFX GUI。

当前能力

  • Attach 到本机 JVM,agent 在目标进程内启动 127.0.0.1 本地控制端口。
  • 查看已加载类,按包名/类名过滤。
  • Dump 已加载类字节码到本地目录。
  • 本地选择 .class 热替换目标 JVM 中的同名类。
  • 选择 jar 做批量热替换,按同包名、同类名匹配已加载类。
  • 动态载入 jar、class 文件所在目录或 classes 根目录中的类。
  • 反射读取/修改静态字段,调用静态方法。
  • 动态追踪事件流:
    • 按类名/方法名采样目标线程栈。
    • 可开启全类追踪。
    • 可追踪 ImageIO、JavaFX Image、AWT image 相关加载栈,并显示调用类。
    • 可采样匹配类的静态字段初始值和变化。

模块

  • javahook-agent: attach agent,提供本地 HTTP RPC。
  • javahook-gui: JavaFX 桌面 GUI,负责 attach、操作类和展示 trace 事件。
  • javahook-common: GUI 侧共享的小工具,目前包含轻量 JSON。

构建

需要 JDK 8。当前工程按 Java 8 编译,方便直接使用 JDK 8 自带 JavaFX 和 tools.jar

mvn package

如果 Maven 的默认本地仓库不可写,可以把仓库放到项目内:

mvn "-Dmaven.repo.local=D:\_Project\Java\JavaHook\.m2\repository" package

启动 GUI

run-gui.cmd

也可以手动启动:

java -cp "javahook-gui\target\javahook-gui-0.1.0-SNAPSHOT.jar;javahook-common\target\javahook-common-0.1.0-SNAPSHOT.jar;%JAVA_HOME%\lib\tools.jar" com.javahook.gui.MainApp

使用提示

  1. 先运行目标 Java 程序。
  2. 启动 JavaHook GUI。
  3. 在顶部选择目标 JVM,点击 Attach
  4. 类操作 中过滤并选择类,可执行 dump、.class 替换或 jar 批量替换。
  5. 动态追踪 中配置类名/方法名、图片加载或静态值追踪,然后点击开始。

重要限制

  • JVM 标准 redefineClasses 通常不能新增/删除字段、方法或改变继承结构,只适合方法体等兼容修改。
  • 当前追踪是低侵入采样式追踪,不会改写业务字节码;后续可以在 TraceService 边界内接入 ASM/Byte Buddy 做真正的入参、返回值、异常插桩。
  • 反射修改 v0 只支持静态字段和静态方法,实例对象引用管理可以后续扩展。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors