perfidanb/JarByteEditor

GitHub: perfidanb/JarByteEditor

一款基于 Java 21 和 ASM 的桌面/CLI 工具,用于直接查看、编辑和重新打包 Jar 包中的 JVM 字节码与资源。

Stars: 2 | Forks: 1

# JarByteEditor JarByteEditor 是一款基于 Java 21 的桌面和 CLI 工具,用于打开 `.jar` / `.zip` 文件,通过 ASM 检查 JVM 字节码、编辑 `.jasm` 文本、编辑资源,并将结果重新打包成 jar。 ## 构建 ``` mvn clean package ``` 可运行的 jar 创建于: ``` target/JarByteEditor.jar ``` 默认的 JavaFx classifier 是 `win`。在其他平台上,请使用以下命令构建: ``` mvn clean package -Djavafx.platform=linux mvn clean package -Djavafx.platform=mac ``` ## 运行 GUI ``` java -jar target/JarByteEditor.jar ``` GUI 提供: - 深色 JavaFX 布局,包含菜单栏、树状浏览器、编辑器和状态栏。 - `Open JAR` 支持 `.jar` 和 `.zip`。 - 针对 `.jasm` 中 `.class` 条目的可编辑、带语法高亮的字节码视图。 - 可编辑的文本资源,如 `yml`、`json`、`txt`、`xml` 和 `properties`。 - 二进制元数据查看器,显示路径、大小、SHA1 和修改状态。 - 通过 `Ctrl+S` 将当前编辑器缓冲区保存到内存项目中。 - 另存为 JAR。 - 导出项目,包含原始类、资源、`.jasm` 和 `project.json`。 - 搜索、替换字符串、差异对比、统计信息、调用图、注解显示和常量池表。 ## CLI 如果未提供任何参数,jar 将打开 GUI。如果提供参数,它将运行 Picocli 命令: ``` java -jar target/JarByteEditor.jar list plugin.jar java -jar target/JarByteEditor.jar disasm plugin.jar output java -jar target/JarByteEditor.jar asm output plugin-fixed.jar java -jar target/JarByteEditor.jar replace-string input.jar old new output.jar java -jar target/JarByteEditor.jar search plugin.jar "Hello" java -jar target/JarByteEditor.jar stats plugin.jar java -jar target/JarByteEditor.jar diff old.jar new.jar java -jar target/JarByteEditor.jar callgraph plugin.jar ``` 重新构建类的命令接受一个目标 Java 版本: ``` java -jar target/JarByteEditor.jar asm output plugin-fixed.jar --target 21 java -jar target/JarByteEditor.jar replace-string input.jar old new output.jar --target 17 ``` 如果省略 `--target`,则会保留原始类版本。 ## Java 类版本 | Java | 类版本 | | ---- | ------------- | | 8 | 52 | | 9 | 53 | | 10 | 54 | | 11 | 55 | | 12 | 56 | | 13 | 57 | | 14 | 58 | | 15 | 59 | | 16 | 60 | | 17 | 61 | | 18 | 62 | | 19 | 63 | | 20 | 64 | | 21 | 65 | | 22 | 66 | | 23 | 67 | | 24 | 68 | | 25 | 69 | ## JASM 格式 编辑器使用紧凑的汇编格式: ``` VERSION 61 CLASS public com/example/Main SUPER java/lang/Object FIELD private message Ljava/lang/String; METHOD public onEnable ()V ALOAD 0 LDC "Enabled" RETURN END ``` 支持的可编辑指令系列包括无参数 opcode、变量 opcode、整数 opcode、字段调用、方法调用、类型指令、跳转、标签、行号、`LDC`、`IINC` 和 `MULTIANEWARRAY`。包含高级指令的类仍然会被打开和导出;在导出项目组装期间,未更改的类字节会被保留。 ## 字节码策略 JarByteEditor 不会对 Java 源代码进行反编译,也不会将 Java 源代码编译回类。类的编辑由 ASM 处理,并通过以下方式写入: ``` ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS ``` 加载器将类元数据保留为 ASM 树形式,包括签名、模块、记录、嵌套(nests)、允许的子类、注解、内部类、源属性、bootstrap method 以及在未重写相应方法时的调试表。 ## 项目导出 `disasm` 和 GUI 导出会创建: ``` project/ classes/ com/example/Main.class com/example/Main.class.jasm resources/ plugin.yml project.json ``` `asm project plugin-fixed.jar` 会重新构建 jar。如果 `.jasm` 文件未更改,则会原封不动地复制回原始 `.class` 字节。如果 `.jasm` 文件已更改,则该类将通过 ASM 进行组装。
标签:JavaFX桌面应用, Java开发工具, JVM字节码, 云资产清单, 反编译工具, 域名枚举, 蓝队工具, 逆向工程