Releases: Col-E/Recaf
Releases · Col-E/Recaf
Beta 9
What's New
- Agent functionality
- Requires running Recaf via JDK
- Attach to other java processes and update bytecode in-memory
- Done via running recaf and selecting from the navbar
injection->jvm's
and selecting which one you want to attach to.
- Done via running recaf and selecting from the navbar
- Make edits, mark classes as modified and apply the changes at any time
- Decompiled classes and methods can be recompiled via a right-click context menu option
recompile
.- Requires running Recaf via JDK
- User interface customization
- UI text can now be translated
- Located in
src/resources/lang
- Language option in UI is
options->user interface
, requires restart to apply changes in GUI. - Currently translation is the user's responsibility but I would really appreciate a pull-request with some other languages
- Located in
- Uncommonly edited attributes in the class inner-window can be hidden (EnclosingMethod, InnerClasses, SourceDebug)
- Member & Opcode right-click context menu's now customizable
- User can define the order of items and even hide items from showing up (hiding requires removal via setting in
rcinterface.json
, but order is editable in UI viaoptions->user interface
)
processes that already have a potentially outdated ASM library loaded
- User can define the order of items and even hide items from showing up (hiding requires removal via setting in
- UI text can now be translated
- Logging now written to
rclog.txt
in addition to console- Separate logging levels for console output vs log file output (Defaults -> console:info, file:fine)
- Plugins
- New events
- Opening class display
- Opening Method opcode list display
- Context-menu creation
- File loading / saving
- New events
- Opcode block saving now supports switch opcodes
- Class file input support (As opposed to originally only jar support)
- Proper editing support for InvokeDynamic instructions
- Search results now fetchable
- Useful for writing plugins when you want to look something up, now you don't need to implement the searching yourself.
- ASM version used for saving/loading configurable via
options->ASM flags
- Useful for agent-mode when attaching to java processes with an older version of ASM already loaded into the classpath.
- Deletion warning option now warns when recaf window closed (allows user to cancel shutdown)
What's Fixed
- Types not being properly shortened when simplify option enabled
- Also this led to a crash if a class name was one-char long
- Desync between actual method instructions and what's shown in the list display
- Search's case insensitive option not lowering case of input text
- Better plugin load handling
- Fix: One bad plugin canceling load of other plugins
- Fix: Not all plugin classes being loaded properly resulting in ClassNotFoundExceptions when loading correctly designed plugins
Beta 8
What's New
- WIP plugin API implemented
- Tile windows by right clicking the tab background and selecting "Tile windows"
- Class window shows more editable fields
- UI config new name is
rcinterface.json
. Old name isrcoptions.json
. Renamed due to name not making sense since there are now multiple config files. - Members
- Add try-catches to methods if none were there already
- Method code can be run through a verifyer
- Method variables can now be accessed via the member context menu
- Inserting new methods and fields
- Opcodes
- Ability to move selected opcode(s) up or down in method code
- Support for inserting labels in method code
- Type of LDC content can be specified when inserting the opcode
- Opcode blocks
- Select and save opcodes, insert them anywhere
- Search
- Ability to specify regex in string searches
- Ability to specify exact match for all search types (As opposed to checking for value containment)
- Ability to search for constant numeric values in fields and method code
- Hitting enter/return in a text box now executes the search
What's Fixed
- Functionality
- Editing LDC content retains the initial type
- Wrong stack-frames auto-generated by ASM
- NPE related to auto-generating stack frames.
- Editing a field's default value no longer sets the value to a string type
- Removing large groups of opcodes is much much faster now
- UI / consistency
- Aligned more text-boxes to grid layout
- Fixed items appearing in non-alphabetical order in multiple components
- Decompilation opened exception tags despite decompilation being a success
- Array types not showing up properly in some opcodes
- Try-Catch editing window being too small
- Right clicking opcodes now selects whatever the mouse is over if there is no current selection
Beta 7
What's New
- Look and feel can be set from the options menu
- Persists in "rcoptions.json". If you want a theme that does not appear, edit the json and add your LAF to the classpath. It will be applied on launch.
- A file can be loaded at launch via command line
java -jar recaf.jar MyJarFile.jar
- The color scheme of the opcode and member lists can be updated in "rcstyle.json"
- Searching references to members can be done by right clicking them and clicking "Find references"
What's Changed
- Clicking opcode results in the search menu opens the method's opcodes and selects the specific index
- Before, would only open the containing class.
- Member attributes moved from separate windows into definition window. This is found by selecting "Edit definition" from the right-click context menu.
- Search result trees are expanded by default
- Gui labels / inputs align to a grid
Note: If releases are not up to date, you can download or clone the repository and run mvn compile package
to generate the very latest build.
Beta 6
What's New
- Decompilation for:
- Entire classes
- Single methods
Small update, but an internal decompiler is really handy. It will allow quickly checking for valid bytecode edits (As opposed to exporting, running an external decompiler, re-exporting after fixing, etc.). Not to worry, I will add a fully fledged verifier in the future.
Beta 5
What's New
- Input can be dragged and dropped into recaf (The file tree on the left accepts the input)
- Exceptions can be added
- Try-Catch block ranges can be edited
- New try-catch blocks can be inserted
- Jump labels can be changed
- Switch labels can be changed
- Member definitions can be modified
- Name
- Descriptor
- Signature (Generic type)
- Local variables can be modified from the variable opcode editor window
- Name
- Descriptor
- Signature (Generic type)
- Labels no longer show as just (F_NEW), now include an arbitrary name
- Selecting labels shows where they are referenced
What's Changed
- Line opcodes rendered as light grey instead of green.
- Class data window shows more attributes
What's Fixed
- Removed duplicate input on try-catch window
- Removed typos in documentation.
- Try-Catch window no longer named "Exceptions"
Beta 4
What's New
- Settings are now persistent
- MultiANewArray opcodes can now be edited
- Method exceptions can be edited & removed
- Try-catch blocks can be edited (limited) & removed
- Only the exception type can be edited for now.
What's Fixed
- The latter half of the docs are no longer accidentally italicized.
- Deleting opcodes now prompts the user if they're sure (Unless the option is disabled in the options)
- Access panel's initial values now correctly reflect the values they represent
- Access panel's output flags no longer change the input's values (Whoops)
Beta 3
What's New
- Usage documentation on github pages.
- ASM input/output options are now accessible via the gui.
- You can now shift-click / control-click to select multiple opcodes. Used so you can delete multiple things at once.
- Middle clicking an opcode now opens the edit window
- New search feature
- Search for strings (Optional case-sensitivity)
- Search for fields and methods (Input should be exact)
- Search for classes by name: (Optional, exact vs containment)
- Search for references (Optional inputs: Class owner, member name, member description)
What's Fixed
- Tree displays opening content now check if the mouse is in the selection bounds. This prevents mis-clicks from opening files.
- Tree displays now properly open files on double-click (left mouse button)
Beta 2
What's New
- You can now add your own opcodes by right clicking one, and selecting
Insert new before...
orInsert new after...
- Added support for editing existing InvokeDynamic instructions
What's Fixed
- No more IndexOutOfBounds for displaying a method's variable table if it was lacking debugging info.
- Icons and member lines are now the same height