Skip to content

Releases: Col-E/Recaf

Beta 9

28 Jan 23:27
Compare
Choose a tag to compare
Beta 9 Pre-release
Pre-release

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.
    • 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
    • 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 via options->user interface)
        processes that already have a potentially outdated ASM library loaded
  • 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
  • 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

05 Dec 15:00
Compare
Choose a tag to compare
Beta 8 Pre-release
Pre-release

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 is rcoptions.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

21 Oct 11:33
Compare
Choose a tag to compare
Beta 7 Pre-release
Pre-release

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

13 Oct 11:29
Compare
Choose a tag to compare
Beta 6 Pre-release
Pre-release

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

30 Sep 06:37
Compare
Choose a tag to compare
Beta 5 Pre-release
Pre-release

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

19 Sep 08:48
Compare
Choose a tag to compare
Beta 4 Pre-release
Pre-release

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

25 Aug 05:26
Compare
Choose a tag to compare
Beta 3 Pre-release
Pre-release

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

13 Aug 09:19
Compare
Choose a tag to compare
Beta 2 Pre-release
Pre-release

What's New

  • You can now add your own opcodes by right clicking one, and selecting Insert new before... or Insert 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

Beta 1

04 Aug 09:52
Compare
Choose a tag to compare
Beta 1 Pre-release
Pre-release

Just a release so a pre-compiled build is available.