冰星
本帖最后由 冰星 于 2021-2-2 00:30 编辑

题记


说是一个字节码编辑器,其实它只是被我用来当做汉化工具的.但实际上它的功能远比这个强大.
我用的汉化工具历程是这样的IntTMCT→JByteMod→Recaf
IntTMCT已经处于一个弃坑状态(2020.2.18历史性的编辑),而且它使用起来非常不友好,所以我就换成了JByteMod.这也是个非常不错的插件,有很多IntTMCT不具有的功能,但因为它不支持换行符所以我将它舍弃了
Recaf是我在github逛的时候发现的,这是一个非常友好,强大,更新迅速的插件,后面我将慢慢介绍它的功能.
同时此贴篇幅过长(采用人翻+机翻的方式),如有翻译不同或有歧义的地方请联系我修改!

简单介绍

什么是Recaf?Recaf是一个基于Objectweb的ASM构建的开源Java字节码编辑器。ASM是一个字节码操作库,它抽象出常量池和一些其他类文件属性。由于不再需要跟踪常量池和管理正确的堆栈帧,因此可以相对容易地进行复杂的更改。Recaf是一个借助其他功能来协助编辑类,功能最丰富的免费字节码编辑器。

有用的信息

虽然ASM使字节码操作变得非常简单,但这并不意味着你应该首先考虑编辑java程序而不去了解一些基本的编程概念和Java类文件架构。以下是这些方面信息的一些参考:

下载和构建

可下载的jar二进制文件将会在Github发布。
或者你可以从源通过克隆(或下载)存储库并使用maven构建可执行文件。
蓝奏云(1.15.10+最新版) https://wwa.lanzous.com/b0epwb7hc

使用需求

Recaf需要使用Java 8来运行.为了使用一些特别功能,您将需要JDK而不是JDE(例如重编译,后面会讲到)。如果要在Java 9及更高版本上运行,请阅读使用指南以了解如何操作。编辑功能独立于用于运行Recaf的java版本。

帮助

使用指南及更多信息
联系与支持
要报告错误并建议新功能,请使用github repo的问题页面并提交新问题。 如需其他咨询,请在此处加入discord服务器:discord.gg/Bya5HaA

2021.12 数据,可能有更多内容

题记


说是一个字节码编辑器,其实它只是被我用来当做汉化工具的.但实际上它的功能远比这个强大.
我用的汉化工具历程是这样的IntTMCT→JByteMod→Recaf
IntTMCT已经处于一个弃坑状态(2020.2.18历史性的编辑),而且它使用起来非常不友好,所以我就换成了JByteMod.这也是个非常不错的插件,有很多IntTMCT不具有的功能,但因为它不支持换行符所以我将它舍弃了
Recaf是我在github逛的时候发现的,这是一个非常友好,强大,更新迅速的插件,后面我将慢慢介绍它的功能.
同时此贴篇幅过长(采用人翻+机翻的方式),如有翻译不同或有歧义的地方请联系我修改!

简单介绍

什么是Recaf?
Recaf是一个基于Objectweb的ASM构建的开源Java字节码编辑器。ASM是一个字节码操作库,它抽象出常量池和一些其他类文件属性。由于不再需要跟踪常量池和管理正确的堆栈帧,因此可以相对容易地进行复杂的更改。Recaf是一个借助其他功能来协助编辑类,功能最丰富的免费字节码编辑器。

有用的信息

虽然ASM使字节码操作变得非常简单,但这并不意味着你应该首先考虑编辑java程序而不去了解一些基本的编程概念和Java类文件架构。以下是这些方面信息的一些参考:

下载和构建

可下载的jar二进制文件将会在Github发布。
或者你可以从源通过克隆(或下载)存储库并使用maven构建可执行文件。
蓝奏云(1.15.10+最新版) https://wwa.lanzous.com/b0epwb7hc

使用需求

Recaf需要使用Java 8来运行.为了使用一些特别功能,您将需要JDK而不是JDE(例如重编译,后面会讲到)。如果要在Java 9及更高版本上运行,请阅读使用指南以了解如何操作。编辑功能独立于用于运行Recaf的java版本。

帮助

使用指南及更多信息
联系与支持
要报告错误并建议新功能,请使用github repo的问题页面并提交新问题。 如需其他咨询,请在此处加入discord服务器:discord.gg/Bya5HaA



Recaf
JByteMod
Bytecode Viewer
reJ
JBE
dirtyJOE
支持的文件类型
Class, Jar
Class, Jar
Class, Jar, APK, DEX
Class, Jar
Class
Class
最新的java支持
13
11
13
7
5
8
多语言支持
Supported(See: Issue 34)
支持
不支持
不支持
不支持
不支持
文本汇编程序
Supported(See: Assembler guide)
不支持
不支持
不支持
支持(No quality-of-life features)
不支持
验证提示
支持
支持
不支持
不支持
不支持
不支持
插件 API
支持(See: Plugins)
支持
支持
不支持
不支持
支持Kinda(具有有限的脚本功能
可编辑类属性
大多数(缺失:注释,模块)
大多数(缺失:模块)
大多数(通过编译反编译代码做更改)
所有
(可查看但不可编辑)
所有
可编辑的成员属性
大多数(缺失: 注释)
所有
所有
大多数(无法编辑defaultValue,缺少签名,缺少某些修饰符)
一些(缺少签名,缺少某些访问修饰符)
一些(缺失签名)
搜索项目
Strings, constants, declared members, member references, opcode patterns
Strings, member references
Not supported(Closest thing is the string dumper plugin)
Strings + Display text(Display search looks for text in the code editor tab.)
不支持
不支持
重新映射类和成员名称
支持
不支持
不支持
不支持
不支持
不支持
自动生成堆栈帧
支持(自动)
支持(手动)
支持(自动)
不支持
不支持
不支持
保存状态和撤销
支持(C创建保存状态并随时恢复它们)
不支持
不支持
不支持
不支持
不支持
编辑器内的帮助
支持(在编辑器中显示跳转操作码逻辑+用于标签的鼠标悬停工具提示)
支持(来自维基百科的操作码表显示在单独的选项卡中)
有一些?(帮助按钮在Windows 8+中似乎不起作用)
支持(帮助菜单中嵌入了迷你wiki,包含操作码详细信息和工具使用)
控制流程显示
Supported(Selecting a jump / switch opcode shows destinations. Selecting a label shows where it is referenced)
Supported(Control flow graph with simplified opcode logic in "Analysis" page)
不支持
不支持
不支持
不支持
反编译
支持(CFR)
支持(Procyon / Fernflower / CFR / Krakatau [crashes])
支持(Procyon / CFR / JD-GUI / FernFlower / Krakatau / Smali / Bytecode / Hex)
不支持
不支持
不支持
将字节码编辑为反编译代码
支持(Right-click decompiled code to open the menu, select recompile)
不支持
支持
不支持
不支持
不支持
编辑运行java进程的字节码
SupportedFrom the navbar, select attach then select a process from the list
不支持(Crashes, currently an open issue since 6/5/2018)
不支持
Not supported?(Can set breakpoints in code editor, does not affect saved output. Can't find usage of it otherwise.)
不支持
不支持
同时编辑多个成员
支持(正在编辑的每个项目都有自己的窗口)
不支持(一次只能查看一个项目.)
支持(编辑的反编译代码显示所有成员)
支持(所有成员显示的样式类似于BytecodeViewer的字节码显示)
不支持(一次只能查看一个项目.)
不支持(一次只能查看一个项目.)
编辑局部变量表
支持
支持
支持
不支持
不支持
支持(缺少签名)

详细介绍
入门

需求
Java 8: Github上的发布是针对Java 8的. 无需额外的步骤来运行。
Java 9/10: 不支持,使用Java 8或更新到Java 11+
Java 11+: 支持.Recaf可以自行修补以修复缺少的JDK 11依赖项。

运行和更新

要获得最新版本的Recaf,您可以下载源代码并使用maven编译或从Release页面获取文件.
作为jar文件,您可以双击它以运行Recaf。但是,建议您通过命令行启动,以便指定JDK运行Recaf。这样做可以使用依赖于JDK功能的其他功能(tools.jar)。例如,在Windows上,您将使用以下命令:

代码:

  1. “C:\ Program Files \ Java \ jdk1.8.0_202 \ bin \ java.exe”-jar recaf.jar
注意:要确保类路径包含jdk\lib\tools.jar的内容,请将其复制到jdk\jre\lib\ext文件夹中.注意:您可以通过命令行自动打开文件:java -jar recaf.jar -i MyJar.jar -c com/example/MyClass注意:启动Recaf时,您会收到有关更新的通知。您可以在配置菜单中禁用此行为。

用户界面:主窗口

导航栏和工具栏   



窗口顶部是两个栏,Navbar和工具栏。Navbar是第一个栏,是一系列文本下拉菜单。
  • 文件
    • 加载:打开文件(类,jar)
    • 导出:保存修改(与输入相同的类型)
  • 搜索:打开搜索菜单
  • 配置:打开配置菜单
  • 历史
    • 创建保存状态:在内存中保存修改。
    • 查看状态:打开保存状态管理器,允许回滚到先前的保存状态。
  • 附加:打开附加窗口 (仅限JDK功能)
第二个栏是工具栏,用于快速访问常用功能。您可以在配置菜单中隐藏此栏。
  • 加载:打开文件(类,jar)
  • 导出:保存修改(与输入相同的类型)
  • 创建保存状态:在内存中保存修改。
  • 搜索:打开搜索菜单
  • 配置:打开配置菜单

文件树
文件树显示已加载程序的当前内容。类名旁边的图标表示类的访问修饰符(蓝色表示接口,棕色表示枚举,绿色表示标准类。如抽象,合成等修饰符添加为叠加)。选择树后,您可以使用方向键或鼠标浏览文件树。按Enter或双击将打开一个类。您还可以将文件拖放到此区域以加载新程序。
主要面板   

主面板包含有关类的所有信息。顶部是一系列目前打开的类。下面是当前类的详细面板。每个类有三个选项卡,一个用于类信息,另外两个用于字段和方法表。此面板的底部是一个日志记录面板。这将包括有关当前操作以及错误消息的信息性消息(可以通过单击该行来扩展)。

用户界面:辅助窗口
搜索:
搜索窗口允许在整个加载的程序中进行多种类型的搜索。搜索时并非所有参数都是必需的。例如,如果您希望查找对类java/io/File的所有引用,请使用引用搜索,并仅将所有者指定为java/io/File。这将显示对该类的所有引用。如果您希望将结果缩小到仅布尔函数调用,则可以将描述符指定为()Z。相同的方法适用于所有多参数搜索类型。
  • 字符串:搜索字符串常量
    • 文字:要搜索的文字。
    • 匹配模式:如何匹配文本。
      • 包含:匹配将包含给定的文本。
      • 开头:匹配将从给定文本开始。
      • 结束于:匹配将以给定文本结束。
      • 平等:匹配将与给定文本完全匹配。
      • 正则表达式:匹配将满足文本中给出的正则表达式模式。
    • 区分大小写:匹配模式的修饰符,强制匹配区分大小写。如果匹配模式设置为正则表达式,则数值会被覆盖。
    • 忽略的前缀:要忽略的类前缀列表。在此列表中指定名称将排除该类或包的所有结果。
  • 值:搜索数字常量
    • 值:要搜索的数值。
    • 忽略的前缀:要忽略的类前缀列表。在此列表中指定名称将排除该类或包的所有结果。
  • 声明:搜索声明的成员
    • 所有者:定义成员的类名。
    • 名称:已定义成员的名称。
    • 描述符:已定义成员的描述符。
    • 匹配模式:如何匹配文本输入(所有者,名称,描述符)。
      • 包含:匹配将包含给定的文本。
      • 开头匹配将从给定文本开始。
      • 结束于:匹配将以给定文本结束。
      • 平等:匹配将与给定文本完全匹配。
      • 正则表达式:匹配将满足文本中给出的正则表达式模式。
    • 区分大小写:匹配模式的修饰符,强制匹配区分大小写。如果匹配模式设置为正则表达式,则数值会被覆盖。
    • 忽略的前缀:要忽略的类前缀列表。在此列表中指定名称将排除该类或包的所有结果。
  • 参考:搜索对成员的引用
    • 所有者:定义引用成员的类名。
    • 名称:引用成员的名称。
    • 描述符:引用成员的描述符。
    • 匹配模式:如何匹配文本输入(所有者,名称,描述符)。
      • 包含:匹配将包含给定的文本。
      • 开头匹配将从给定文本开始。
      • 结束于:匹配将以给定文本结束。
      • 平等:匹配将与给定文本完全匹配。
      • 正则表达式:匹配将满足文本中给出的正则表达式模式。
    • 区分大小写:匹配模式的修饰符,强制匹配区分大小写。如果匹配模式设置为正则表达式,则数值会被覆盖。
    • 忽略的前缀:要忽略的类前缀列表。在此列表中指定名称将排除该类或包的所有结果。
  • 操作码模式:在方法指令中搜索模式
    • 操作码:要匹配的操作码列表。您可以通过查看Recaf如何显示现有操作码来指定其他信息。
    • 忽略的前缀:要忽略的类前缀列表。在此列表中指定名称将排除该类或包的所有结果。
    • 匹配模式:如何匹配操作码模式文本
      • 包含:匹配将包含给定的文本。
      • 开头匹配将从给定文本开始。
      • 结束于:匹配将以给定文本结束。
      • 平等:匹配将与给定文本完全匹配。
      • 正则表达式:匹配将满足文本中给出的正则表达式模式。
    • 区分大小写:匹配模式的修饰符,强制匹配区分大小写。如果匹配模式设置为正则表达式,则数值会被覆盖。
   




配置   

配置窗口将所有不同选项组合在一起。有关每个选项的说明,您可以将鼠标悬停在名称上或阅读此处选项表。某些选项可能需要重新启动才能生效。

历史 

历史记录窗口显示具有保存状态的所有类的列表。选择其中一个类后,您可以按创建时间的顺序查看现有的保存状态。您可以通过单击“还原到最后”按钮将任何更改还原到最新状态。这将从列表中删除状态,并丢弃在创建保存状态后所做的任何更改。

Attach(没懂,暂不翻译)   

附加窗口显示正在运行的java进程。选择一个并单击下面的按钮(更改以匹配所选的JVM进程)将在此过程中将Recaf作为Java代理加载。这将允许您在运行过程中修改进程中的现有代码。当Recaf作为代理打开时,您可以通过“文件 - >应用更改”将更改保存到实时应用程序。您可以使用标准导出功能转储附加程序的类。注意:根据您安装的任何Java虚拟机中的工具实现方式,可能会有限制。通常,唯一的限制是无法向类添加新字段和方法定义。一切都可以修改,但不能添加新的定义。注意:值得一提的是,方法重新定义仅在跟随对方法的调用后生效。例如,您无法调用具有无限循环的方法并在退出条件下进行编辑。

用户界面:编辑

类面板   


反编译   

在类面板的底部,反编译按钮将使用CFR显示反编译的代码。如果您通过JDK运行recaf,您也可以编辑此代码并重新编译它。要重新编译反编译的代码,请右键单击并选择“重新编译”。由于反编译并不总是完美的,因此在复杂或混淆的类中可能不可行,但在小型和简单的类中非常有效。
此窗口还尝试使用JavaParser api来检测引用的类,字段和方法。这将允许使用以下功能:
  • 跳转到成员定义
  • 搜索成员参考
  • 搜索类引用
代码解析器还允许在方法本体中进行此检测。右键单击时,大多数项目都会支持某些操作。

字段表 
字段表显示可排序表中类中的所有字段。第一,二,三列分别是字段的访问修饰符,类型和名称。单击列的顶部将按该值对表进行排序。要编辑字段,请双击该字段的行。要添加或删除字段,请右键单击该表(任意位置)并分别选择“添加”或“删除”。要搜索程序中引用字段的位置,请右键单击该字段的行,然后从菜单中选择“引用”。
方法表   
方法表显示了可排序表中类中的所有方法。第一,二,三列分别是方法的访问修饰符,返回类型,名称和参数类型。单击列的顶部将按该值对表进行排序。要编辑方法,请双击该方法的行。要添加或删除方法,请右键单击该表(任意位置)并分别选择“添加”或“删除”。作为添加方法的替代方法,您还可以选择“复制”以复制现有方法。要搜索程序中引用方法的位置,请右键单击方法的行,然后从菜单中选择“引用”。要查看方法的反编译代码,请选择“反编译”。这将使用CFR反编译该方法。要编辑方法的代码,请从菜单中选择“编辑指令”或“使用汇编程序编辑”。选择“编辑指令”将打开“指令” 窗口。选择“使用汇编器编辑”将打开汇编器窗口

字段窗口 
字段窗口显示字段的信息。这包括与字段定义有关的任何内容,例如访问修饰符,名称,类型描述符和注释。对于原始字段(int,long等),也可以指定默认值。对象类型不能在此字段中设置默认值,而是必须在类的构造函数或静态块中定义(取决于字段的访问修饰符)。注释 
字段可以应用不同类型的注释,但它们都共享同一窗口。要删除注释,请单击它并选择“删除”。要添加注释,请使用内部描述符格式(Lyour/type/Here;)指定名称,然后单击“添加”按钮。指定属性数据尚未制作完成。

方法窗口 
方法窗口显示方法的信息。这包括与方法定义有关的任何内容,例如访问修饰符,名称,类型描述符,指令,局部变量和注释。
Exceptions窗口(不懂,不翻译)   
Exceptions”窗口显示适用于该方法的所有Exceptions。要删除Exceptions,请右键单击它并选择“删除”,或选择它并按Delete键。要添加新例外,请输入Exceptions类的全名,然后单击“添加”按钮。

参数   
参数窗口显示带有访问修饰符的参数变量。即使方法有参数,此列表也可以为空。

注释方法可以应用不同类型的注释,但它们都共享同一个窗口。要删除注释,请右键单击它并选择“删除”,或选择它并按Delete键。要添加注释,请使用内部描述符格式(Lyour/type/Here;)指定名称,然后单击“添加”按钮。指定属性数据尚未制作完成。

Try-Catch   
try-catch窗口显示方法说明中的所有try-catch块。要编辑块范围,可以单击标签按钮,然后从下拉菜单中选择一个新标签。要插入新的try-catch块,请在底部填写标签按钮,然后指定exception类型。单击“添加”以提交新的try-catch块。按顺序排列的字段是:
  • 开始索引:尝试出现之前的第一帧。这标志着try块的开始。
  • 结束索引:捕获出现之前的最后一帧。这标志着try块的结束。
  • 处理程序索引:捕获出现后的第一帧。这标志着catch块的开始。

局部变量   
局部变量窗口显示方法中的所有变量。像其他窗口一样,悬停在底部的输入字段会告诉你它们是什么。供参考,它们是:
  • 索引:变量的索引。
  • 名称:变量的名称。仅用作调试信息。
  • 类型描述符:变量的声明类型。
  • 类型签名:变量的通用声明类型。可选,仅用作调试信息。
  • Begin index:引用变量之前的第一帧。
  • 结束索引:变量完成后的最后一帧被引用。

反编译   
可以通过方法面板中的右键单击菜单反编译方法。如果在方法反编译窗口打开时更新方法的字节码,则反编译将更新以反映您的更改。与全类反编译窗口不同,您无法在此窗口中重新编译代码。

汇编   
汇编程序窗口是反编译窗口和指令窗口的混合。有关其功能的完整指南,请参阅汇编程序指南.(汉化常用,务必认准)经与作者反馈,此窗口已支持各类型如\n换行符的输入
说明   
您可以在指令窗口中编辑方法的操作码。右键单击操作码将显示一些选项:
  • 编辑:显示操作码的属性窗口。(也可通过双击操作码完成)
  • 显示堆栈/本地:打开显示堆栈的窗口。当您在方法中选择不同的操作码时,它将更新以显示当前堆栈值。
  • 上移:向上移动选定的操作码。
  • 下移:向下移动选定的操作码。
  • 另存为块:将选定的操作码保存为“块”。这样您就可以将块粘贴到您喜欢的任何其他位置。保存的块存储在config目录的rc_blocks.json文件中。您可以在此文件中编辑,删除和创建自己的块。
    (您需要选择多个操作码才能显示此选项。)
  • 插入块:打开块窗口并提示您选择要在所选操作码之前或之后插入方法的块。
  • 插入:在所选操作码之前或之后添加新操作码。打开操作码创建窗口。
  • 使用汇编程序插入:在选定的操作码之后添加新的操作码。打开操作码汇编程序窗口
  • 删除:删除选定的操作码。
如上面的动画所示,选择不同的操作码会出现一些不同的高光。
  • 选择引用索引变量的操作码时,会突出显示引用该变量的所有其他操作码。
  • 选择跳转操作码时,会突出显示潜在目的地。
    • 如果跳转操作成功,绿色是程序将跳转到的位置。
    • 如果跳转操作失败,则红色是程序跳转到的位置。
  • 选择开关操作码时,会突出显示案例目的地。
  • 选择标签时,任何将其列为潜在目的地的操作码(跳转或切换)都将突出显示这些操作码。
 
对于操作码编辑和插入窗口,操作码将显示在下拉菜单中。您可以通过键入所需操作码的名称来缩短菜单列表。不匹配的项目将暂时隐藏。

StackWatcher   
右键单击任何操作码并选择“显示堆栈/本地”,即可打开StackWatcher窗口。它根据方法指令窗口中当前选定的操作码显示堆栈和本地表的当前值。如动画中所示,当选择在代码中移动时,堆栈会更新。调用局部变量存储操作码时,堆栈将转移到本地列。

 

块窗口显示2xN网格中当前保存的块。您可以单击块标题以自动完成下面的文本输入。单击“加载”将指定的块插入到方法中。为了更快地访问和非永久存储,您可以使用复制和粘贴键直接选择操作码并将其粘贴到其他位置。

验证   
所有更改都通过验证过程进行。如果对方法指令的更改导致无法验证的代码,则会突出显示导致验证失败的指令,并显示错误。如果您尝试导出错误的程序,则会显示更大的验证窗口。它显示了相关方法以及有关验证失败的一些其他信息,以显示问题所在。

定制和插件

Recaf使用JavaFX,它允许用CSS界面设置用户界面。有关更改recaf视觉样式的更多信息,请参阅主题指南可以通过插件系统将其他功能添加到Recaf。要了解有关使用和创建插件的信息,请参阅插件指南

题外话

这个应用远不止汉化插件这么简单的功能.如果你是一个开发者,这将可以帮助你实现很多东西.
作者是一个很友善的人√
当我有一次去向作者反馈的时候,我发现回复我的居然是梨子大大,So supirise!
   

搬运汉化不易,给金锭会扣自己的,给之前先想一想是不是应该给点人气?


NoName德里奇
“功能表”的链接裂了,跳转到http://www.mcbbs.net/Feature%20table
顺便,我觉得汉化一下它的使用指南会比较好,照顾英语不行的大佬嘛。

冰星
本帖最后由 冰星 于 2019-6-14 12:09 编辑
NoName德里奇 发表于 2019-6-14 11:58
“功能表”的链接裂了,跳转到http://www.mcbbs.net/Feature%20table
顺便,我觉得汉化一下它的使用指南 ...

使用指南就是目录的详细介绍呀

東風
大佬稳的,收了收了

QAQexe
顶一下,支持

唐雨沐
大佬在不i在线

下一页 最后一页