JoyelTheDev/JByteMod-ReForked
GitHub: JoyelTheDev/JByteMod-ReForked
一款基于原版 JByteMod 构建的增强型 Java 字节码编辑器与分析器,集成多种反编译器、混淆检测、反混淆工具和实时 JVM 附加功能。
Stars: 0 | Forks: 0
# JByteMod Remastered
[](https://ci.mdma.dev/apkreader/JByteMod-Remastered)

[](https://app.codacy.com/gh/apkreader/JByteMod-Remastered/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)


**JByteMod Remastered** 是一款基于原版 JByteMod 构建的增强型 Java bytecode 编辑器和分析器。它提供了一个直观的 GUI,用于加载、检查、编辑和保存 `.jar`、`.class` 和 `.apk` 文件,深度集成了多种反编译器、控制流可视化工具、混淆检测、反混淆实用程序、实时附加模式以及用于扩展的插件系统。
当前版本:**2.9.1** — 需要 JDK 21。
## 功能
- **高级 Bytecode 编辑** — 在交互式列表中查看并直接修改 Java bytecode 指令。使用专用的编辑器编辑 opcodes、operands、LDC 常量、annotations、局部变量表和 try-catch 块。
- **多反编译器后端** — 在六种反编译器之间无缝切换:CFR、Procyon、Vineflower (Fernflower)、JD-Core、ASMifier 和 Koffee。
- **控制流可视化** — 生成任意方法的图形化控制流图 (CFG)。可将图表保存为图像。
- **混淆检测** — 分析已加载的类以检测名称混淆(非 ASCII 名称、关键字滥用、保留文件名)和方法级混淆模式(try-catch 块混淆、POP2 滥用、invokedynamic 技巧、字符串混淆)。检测来自 Allatori、Stringer 和 ZKM 的签名。
- **反混淆实用程序** — 运行自动清理过程,包括常量折叠、签名修复、行号/局部变量剥离、synthetic bridge 移除、非法 varargs 修复、goto 重排、trap handler 合并、无条件 switch 移除以及非法 annotation 移除。
- **Android APK 支持** — 加载并反编译 `.apk` 文件(通过 dex-translator)。APK 类将被转换为 ASM `ClassNode` 以便使用与 JAR 相同的界面进行检查。(目前尚不支持编辑和保存 APK。)
- **实时附加与 Retransform** — 使用 Java Attach API 附加到正在运行的 JVM 进程,并实时重新转换已加载的类,无需重启目标应用程序。
- **搜索与替换** — 在整个加载的 JAR 中搜索 LDC 字符串常量、字段/方法引用和字符串模式。
- **Constant Pool 编辑器** — 浏览并修改常量池条目。
- **插件系统** — 使用自定义插件扩展该工具。将 `.jar` 文件放入 `plugins/` 文件夹;它会在启动时被加载,并拥有对类树、选定节点和菜单栏的完全访问权限。
- **拖拽支持** — 将 `.jar`、`.apk` 或 `.class` 文件直接拖到窗口上即可打开它们。
- **跨平台** — 可在 Windows、macOS 和 Linux 上运行。
- **本地化** — UI 字符串提供英语、德语、西班牙语、葡萄牙语(巴西)、俄语、简体中文、繁体中文和中文版本。
- **Discord Rich Presence** — 可选地在你的 Discord 状态中显示你正在编辑的文件。
- **自动更新检查** — 启动时检查 GitHub releases API 并通知你有新版本。
- **深色/浅色主题** — 由 DarkLaf (FlatLaf) 提供支持,并带有自定义的 RSyntaxTextArea 主题。
## 要求
- **JDK 21 或更高版本**(用于包含 APK 支持和实时附加的完整功能集)。
- 另外提供了一个兼容 Java 8 的构建版本,但不支持 APK 加载或某些较新的功能。
## 安装与使用
### 下载
从 [releases 页面](https://github.com/apkreader/JByteMod-Remastered/releases) 下载最新的发布版 JAR。
### 启动
```
java -jar JByteMod-Remastered.jar
```
#### 命令行选项
| Flag | 长格式 | 描述 |
|------|-----------|-------------|
| `-f ` | `--file` | 启动时打开 `.jar` 或 `.class` 文件 |
| `-d ` | `--dir` | 设置工作目录 |
| `-c ` | `--config` | 指定配置文件名 |
| `-?` | `--help` | 打印帮助信息并退出 |
示例:
```
java -jar JByteMod-Remastered.jar -f MyApp.jar
```
### 打开文件
使用 `File > Open`,或者将 `.jar`、`.apk` 或 `.class` 文件拖拽到窗口上。
## 界面概述
### 类树(左侧面板)
列出已加载文件中的所有包、类和成员。点击方法或字段即可在编辑器中加载它。右键点击以查看上下文操作(复制名称、添加/移除成员等)。
### Bytecode 编辑器(中间面板)
显示所选方法的指令列表 (`MyCodeList`)。双击指令可打开 `InsnEditDialogue` 进行编辑。支持所有 ASM 指令类型,包括 `LdcInsnNode`、`MethodInsnNode`、`FieldInsnNode`、`JumpInsnNode`、`TableSwitchInsnNode`、`LookupSwitchInsnNode` 等。
附加子面板:
- **LVP(局部变量参数)** — 查看和编辑局部变量表。
- **TCB(Try-Catch 块)** — 查看和管理 exception handler 范围。
- **地址列表** — 显示 bytecode 偏移量。
### 反编译器选项卡
切换到 `Decompiler` 选项卡以查看所选类的反编译 Java 源代码。从菜单或设置中更改活动的反编译器。该编辑器使用带有 Java 语法高亮的 RSyntaxTextArea。
### 控制流面板
在 `Analysis` 菜单中,选择一个方法以生成其控制流图。该图使用 jgraphx 以分层布局进行渲染。使用 `Save` 将图表导出为图像。
### 信息面板
显示有关所选类的元数据:版本、访问标志、超类、接口、字段计数和方法计数。
### 搜索
使用工具栏上的搜索按钮或 `Edit > Search`,在已加载的 JAR 中搜索 LDC 字符串、字段/方法引用或其他模式。结果显示在搜索列表中。
## 反编译器后端
| 后端 | 库 | 备注 |
|---------|---------|-------|
| CFR | cfr 0.152 | 优秀的通用反编译器 |
| Procyon | procyon 0.6.0 | 处理 CFR 遗漏的一些边缘情况 |
| Vineflower | vineflower 1.12.0 | Fernflower(IntelliJ 反编译器)的分支;对 lambda 支持良好 |
| JD-Core | jd-core 1.1.3 | 快速、轻量 |
| ASMifier | ASM util | 生成原始的 ASM API 代码,而不是 Java 源代码 |
| Koffee | koffee 1.0.2 | Kotlin DSL 输出 |
## 混淆检测
`ObfuscationAnalyzer` 会扫描已加载 JAR 中的每个类和方法,并报告:
**名称混淆类型**(类、方法、字段名):
- 非 ASCII / 不可打印字符
- 使用 Java 关键字作为标识符
- Windows 保留文件名(`con`、`nul`、`aux`、`prn`)
- 单字符或极短的名称
**方法混淆类型**:
- Try-catch 块混淆 (TCBO)
- POP2 滥用
- InvokeDynamic 技巧
- 字符串混淆(加密的 LDC 常量)
识别到的混淆器签名包括 **Allatori**、**Stringer**、**ZKM5** 和 **ZKM8**。
## 反混淆实用程序
`DeobfusacteUtils` 提供了一组自动转换过程,你可以通过菜单将其应用于已加载的 JAR:
| 实用程序 | 描述 |
|---------|-------------|
| `fixSignature` | 移除导致反编译器失败的无效 generic signatures |
| `removeLineNumber` | 剥离 `LineNumberNode` 条目 |
| `removeLocalVariable` | 剥离 `LocalVariableNode` 表 |
| `removeSyntheticBridge` | 移除 synthetic bridge 方法 |
| `removeIllegalVarargs` | 修复被错误标记的 varargs 方法 |
| `foldConstant` | 计算并内联简单的常量表达式 |
| `rearrangeGoto` | 简化无条件跳转链 |
| `mergeTrapHandler` | 合并冗余的 exception handler 范围 |
| `removeUnconditionalSwitch` | 简化只有一个可达 case 的 switch 语句 |
| `removeIllegalInvisibleAnnotations` | 剥离格式错误的 invisible annotations |
这些实用程序的来源与 [java-deobfuscator](https://github.com/java-deobfuscator) 和 [Radon](https://github.com/ItzSomebody/Radon) 项目兼容。
## Android / APK 支持
JByteMod Remastered 可以打开 `.apk` 文件进行检查和反编译。APK 处理流程如下:
1. APK 中的 DEX bytecode 使用 `dex-reader` 读取。
2. `dex-translator` 将 DEX 类转换为 JVM bytecode。
3. `Dex2ASMVisitorFactory` 将翻译后的 bytecode 桥接到 ASM `ClassNode` 对象中。
4. 所有标准的编辑面板(bytecode 列表、反编译器、CFG)均可在转换后的节点上工作。
## 实时附加与 Retransform
JByteMod Remastered 可以附加到正在运行的 JVM,并在不重启目标的情况下重新转换已加载的类:
1. 转到 `File > Attach to JVM`(或等效的菜单项)。
2. `AttachTask` 使用 `com.sun.tools.attach.VirtualMachine` 列出正在运行的 JVM 进程。
3. 选择一个进程;该工具会注入一个 agent JAR 并获取 `Instrumentation` 句柄。
4. 在 bytecode 编辑器中编辑类之后,使用 `File > Retransform` 通过 `RetransformTask` 将修改后的字节推入正在运行的 JVM 中。
## 插件系统
插件是放置在工作目录的 `plugins/` 子目录中的 `.jar` 文件。在启动时,`PluginManager` 会扫描该文件夹,通过 `URLClassLoader` 将每个 JAR 加载到系统 classloader 中,并实例化任何继承了 `Plugin` 的类。
### 插件 API
继承 `de.xbrowniecodez.jbytemod.plugin.Plugin`:
```
public class MyPlugin extends Plugin {
public MyPlugin() {
super("My Plugin", "1.0.0", "YourName");
}
@Override
public void init() {
// Called once when the plugin is loaded
}
@Override
public void loadFile(Map classes) {
// Called whenever a new JAR/APK is opened
}
@Override
public boolean isClickable() {
return true; // Show a menu entry for this plugin
}
@Override
public void menuClick() {
// Called when the user clicks the plugin's menu entry
}
}
```
#### 提供的辅助方法(在 Plugin 基类中)
| 方法 | 返回类型 | 描述 |
|--------|---------|-------------|
| `getCurrentFile()` | `Map` | 当前加载文件中的所有类 |
| `getSelectedNode()` | `ClassNode` | 树中当前选定的类 |
| `getSelectedMethod()` | `MethodNode` | 树中当前选定的方法 |
| `getTree()` | `JTree` | 类树组件 |
| `getMenu()` | `JMenuBar` | 应用程序菜单栏 |
| `updateTree()` | `void` | 修改类之后刷新类树 |
## 从源码构建
### 前置条件
- JDK 21
- Maven 3.9+
### 构建
```
mvn clean package
```
输出的 JAR(包含所有 shaded 依赖项)被放置在 `target/` 目录中。
### CI/CD
该项目使用了两个 CI 系统:
- **GitHub Actions** (`.github/workflows/master.yml`):每次推送到 `master` 时使用 JDK 21(在 Ubuntu 24 上的 Microsoft 发行版)进行构建,运行 `mvn clean package`,根据自上次 tag 以来的 git 历史记录生成更新日志,并自动发布新的 GitHub Release。
- **Drone CI** (`.drone.yml`):使用 `maven:3.9.7-amazoncorretto-21` 进行构建,针对私有 Nexus 仓库进行身份验证以获取快照依赖项(ASM 9.10-SNAPSHOT)。
Dependabot 配置为每天检查 Maven 依赖项。
## 关键依赖
| 库 | 版本 | 用途 |
|---------|---------|---------|
| ASM | 9.10-SNAPSHOT | Bytecode 读取、写入、tree API |
| CFR | 0.152 | 反编译器后端 |
| Procyon | 0.6.0 | 反编译器后端 |
| Vineflower | 1.12.0 | 反编译器后端(Fernflower 分支) |
| JD-Core | 1.1.3 | 反编译器后端 |
| Koffee | 1.0.2 | Kotlin DSL编译器后端 |
| jgraphx | 4.2.2 | 控制流图渲染 |
| JFreeChart | 1.5.5 | 图表渲染 |
| DarkLaf | 3.0.2 | 深色/浅色主题(基于 FlatLaf) |
| RSyntaxTextArea | 3.5.1 | 带有语法高亮的源代码编辑器 |
| DiscordIPC | 0.6.1 | Discord Rich Presence |
| dex-translator | 2.3 | DEX 到 JVM bytecode 转换(APK 支持) |
| Guava | 32.1.3-jre | 实用工具 |
| Gson | 2.11.0 | JSON 解析(更新检查器) |
| Lombok | latest | 样板代码减少 |
| commons-io | 2.16.1 | 文件实用工具 |
| commons-cli | 1.9.0 | 命令行参数解析 |
| attach | 1.8 | JVM 附加 API |
| Ant | 1.10.14 | 构建实用工具 |
| Kotlin stdlib | 1.9.21 | Koffee 必需 |
## 项目结构
```
src/main/java/
├── de/xbrowniecodez/jbytemod/ # Remastered layer (main application)
│ ├── Main.java # Entry point (singleton enum), CLI parsing
│ ├── JByteMod.java # Application JFrame, state owner
│ ├── asm/ # Custom ClassReader / ClassWriter
│ ├── decompiler/ # ASMifier, JD-Core, Vineflower backends
│ ├── discord/ # Discord Rich Presence integration
│ ├── plugin/ # Plugin & PluginManager
│ ├── ui/ # MemoryBar, NotificationManager, lists
│ └── utils/ # BytecodeUtils, ClassUtils, UpdateChecker
│
├── me/grax/jbytemod/ # Original JByteMod layer
│ ├── JarArchive.java # Map container
│ ├── analysis/ # ObfuscationAnalyzer, InsnAnalyzer
│ ├── decompiler/ # CFR, Procyon, Koffee backends; Decompilers enum
│ ├── logging/ # Logging
│ ├── res/ # Options, LanguageRes (i18n)
│ ├── ui/ # ClassTree, MyCodeList, MyMenuBar, dialogues, graph
│ └── utils/ # DeobfuscateUtils, InstrUtils, attach, task, asm
│
├── me/lpk/util/ # Utility library (AccessHelper, JarUtils, OpUtils)
│
├── com/javadeobfuscator/deobfuscator/ # Embedded deobfuscator / frame-based analyzer
│ ├── analyzer/ # MethodAnalyzer, ArgsAnalyzer, frame types
│ └── utils/ # TransformerHelper, Utils, PrimitiveUtils
│
├── de/xbrowniecodez/android/asm/ # APK support: Dex2ASMVisitorFactory
│
└── org/objectweb/asm/ # Locally patched ASM classes (ClassWriter, tree nodes)
src/main/resources/
├── locale/ # i18n XML files (en, de, es, pt-br, ru, zh, zh-cn, zh-tr)
└── resources/ # Icons, themes, opcode reference HTML, properties
```
## 本地化
UI 使用 `src/main/resources/locale/` 下的 XML 资源文件进行本地化。支持的区域设置:
| 代码 | 语言 |
|------|----------|
| `en` | English |
| `de` | German |
| `es` | Spanish |
| `pt-br` | Portuguese (Brazil) |
| `ru` | Russian |
| `zh` | Chinese |
| `zh-cn` | 简体中文 |
| `zh-tr` | 繁体中文 |
## 许可证
JByteMod Remastered 在 **MIT License** 下授权。有关详细信息,请参阅 `LICENSE` 文件。
本项目的部分内容衍生自或包含以下项目的代码:
- [java-deobfuscator](https://github.com/java-deobfuscator) — 反混淆实用程序和基于 frame 的分析器
- [Radon](https://github.com/ItzSomebody/Radon) — 额外的反混淆转换
- [ObjectWeb ASM](https://asm.ow2.io/) — 本地修补的 ClassWriter 和 tree node 类 (BSD-3-Clause)
有关第三方的许可证文本,请参阅 `src/main/resources/resources/LICENSES`。
## 致谢
感谢所有贡献者、原版 JByteMod 作者,以及让这款工具得以实现的反编译器和 bytecode 分析库的维护者。
标签:JS文件枚举, URL提取, 云资产清单, 代码混淆与还原, 反编译, 域名枚举, 字节码编辑, 逆向工程