Releases: Col-E/recaf-3x-issues
Snapshot 17
Recaf 3X is currently undergoing massive internal rewrites, so the next release will be very different in terms of back-end functionality. Ideally the only user-facing change will be a new lick of paint.
For more info see this page.
Fixes
- Updated ASM to support Java 21
- Updated LL-Java-Zip to support some additional JAR/ZIP edge cases when loading inputs
- Fixed assembler analyzer switching treatment of DUP2_X1 and DUP2_X2
Snapshot 16
Recaf 3X is currently undergoing massive internal rewrites, so the next release will be very different in terms of back-end functionality. Ideally the only user-facing change will be a new lick of paint.
For more info see this page.
Features
- WIP attach to process via Instrumentation-Server
- Video playback support from content within workspaces
Fixes
- Improvements to assembler tab completion suggestions
- Updated bundled QuiltFlower to 1.9.0
- Fix wrong order of output in Engima mappings
- Fix not escaping space chars in some instruction types when disassembling
- Fix
NaNf
not being a recognized constant in assembler - Fix byte and char not being in a number of places in the assembler
- Fix invoke-dynamic args causing NPE in some cases
- Fix module class support in assembler
- Fix casting null in assembler input to not being marked as verifiable
- Fix crash in package-selection dialog
- Fix infinite loop handling invalid class hierarchies
- Fix a crash on MacOS due to some JavaFX internals
- Error message emitted when editing a field definition
- Updates to German & Chinese translations
Snapshot 15
This is a pre-release for bug reporting and UX polishing. Expect bugs (and please report them) and give feedback on what you think is done right or wrong.
Features
- Add procyon decompiler
- Add text suggestions to assembler for completing instruction names, class names, field and method references (Currently shown on demand with a keybind)
- Add support for font scaling (
Control + Scrollwheel
andControl + 'PLUS/MINUS'
) - Add support for full class definitions in script engine (must define
public static void run() { ... }
to use) - Add support for
itf
flag invokestatic viainvokestaticinterface
- Add display for current aggregate mappings (Mappings > Current mappings)
- Add logging output to SSVM optimize panel (makes diagnosing errors easier)
- Add more advanced filtering options to "Fields and methods" tab
- Add breadcrumbs to root of tree in "Fields and methods" tab
- Add inner classes to tree in "Fields and methods" tab
- Add multi-line tab indentation support
- Add jadx & engima mappings formats
- Add option to configure update speed of assembler (for stack-analysis and other features, default is 200 milliseconds)
- Add automatic illegal signature stripping on workspace pre-load
- Add mapping generator filters for "any non-ascii name" and "any name with whitespaces"
- Add support for changing config directory using
RECAF
environment variable
Bug fixes
- Fix issue where loading workspaces on single core computers would hang
- Fix various text escapes (
\n
,\t
, etc) not being applied to various UI components - Fix
expr ... end
and expression playground panels not supportingfor
loops due to invalid jump offset calculation - Fix fallback decompiler failing to decompile
java/lang/Object
due tonull
super-type - Fix fallback decompiler failing to decompile illegal annotation signatures/types
- Fix script engine evaluation being non-deterministic (migrate from beanshell backend to javac)
- Fix mapping generator renaming override methods even if super methods do not get renamed due to filter policies
- Fix NPE in context resolution for Java source files (Source, not decompilations)
- Fix JavaFX version not being set, not shown in system information UI
- Fix Recaf logo not being applied to Mac dock
- Fix combo-boxes not updating when UI translations are updated
- Fix recent files menu showing wrong icons for certain file extensions
- Fix search panel breaking when dragging it to a new docking region
- Fix assembler not warning about popping values off an empty stack
- Fix assembler analysis yielding wrong types with backward jumps
From: Col-E/Recaf@8579648
Snapshot 14
This is a heavy WIP pre-release for bug reporting. Expect bugs (and please report them) and give feedback on what you think is done right or wrong.
Features
- Beginning of method control flow graphing (Right click on a method declaration,
view > control flow graph
) - Col-E/Recaf#556- Follow-up work on improving the display is planned
- Beginning of mapping-generation work
- Preview and apply mappings to classes and members in your workspace with customizable filters to narrow down what gets updated
- Old recaf log files now get moved to the
/logs
folder in the Recaf directory - New config option under "Decompiler" for toggling unicode escaping in output
- New config option to disable SSVM initialization
- Support for opening
jmod
andmodules
file formats as workspace inputs - Support for previewing common audio file formats - Col-E/Recaf#562
- Support for inlining numeric operations in decompiled code & converting integer number bases (dec/hex/binary) - Col-E/Recaf#566
Bug fixes
- Fix regression breaking SSVM integration
- Fix recompile failing due to workspace classes not being virtually supplied to the compiler
- Fix reference search yielding bogus values due to improper filtering of matches
- Fix not flushing JPhantom state after usage causing following uses to fail with conflicting constraints
- Fix array types not being updated when applying mappings
- Fix incorrect zip file base offset assumption preventing certain jar files from loading in the workspace
- Fix situation where remapping a class prevents the tab from receiving further update callbacks
- Fix
record
keyword not being syntax highlighted in decompilation - Fix "close tab" keybind losing focus on the current tab-pane
- Fix "max tree length" not applying to "fields & methods" tab
- Optimize assembler by reducing AST update frequency
- Optimize assembler by skipping highlight operations on selection/dragging operations
- Optimize all syntax area components by using internal paragraph visibility lookups
- Optimize search by skipping stack-frame parsing
- Optimize decompilation loading graphic further
- Optimize context resolution logic (Decompiler right click menus should open faster now) - Col-E/Recaf#560
- Disable console logging from non-recaf packages (should still appear in log files)
From: Col-E/Recaf@fe9e30d
Snapshot 13
This is a heavy WIP pre-release for bug reporting. Expect bugs (and please report them) and give feedback on what you think is done right or wrong.
Features
- Support for applying proguard mappings
- Workspace diff viewer now supports bytecode representation in addition to decompilation
- Configurable under "Editor components" tab.
Bug fixes
- Fix high GPU usage when decompiled code is on screen (JavaFX bruh moment)
- Fix some JavaFX incompatibilities if migrating from an older version of Recaf (added cache deletion for older lib versions)
- Fix reference searches to
@annotation
classes not showing applications of the interface to classes/fields/methods in search results - Fix some additional obscure zip obfuscation tricks
- Fix wrong type cast in fallback decompiler for annotation usage with enum values
- Fix some mappings not correctly applying to complete class hierarchies
- Fix aggregate mappings not fully tracking fields/methods with non-primitive descriptors
- Fix stupid mac dylib files attempting to be loaded as classes because the geniuses at apple made a dynamic magic header that just so happens to occasionally be
cafedude
From: Col-E/Recaf@59c3afb
Snapshot 12
This is a heavy WIP pre-release for bug reporting. Expect bugs (and please report them) and give feedback on what you think is done right or wrong.
Features
- New assembler implementation (Col-E/Recaf#536)
- More obfuscation resilient
- Support for macros
- New assembler integrations
- New icons in analysis tab for array types
- Additional analysis insights for illegal code shown inline
- New script API classes
- Defined as
me.coley.recaf.scripting.impl.AsmAPI
- Convert various data-types to ASM
ClassNode
- Convert
ClassNode
back tobyte[]
- Find fields/methods in
ClassNode
by name/descriptor
- Defined as
- New plugin manager UI (Col-E/Recaf#537)
- No 3X plugins exist yet, but the design for a github-hosted remote plugin listing exists for later
- New history/diff viewer
- Visualize changes made in Recaf with a comparison before/after decompilations
Bug fixes
- Fix fallback decompiler crash on enums with shuffled field order
- Fix fallback decompiler emitting extra flags for
<clinit>
- Fix fallback decompiler emitting junk imports with invalid class names
- Fix mapping export skipping field/methods if declaring class was not renamed
- Fix JavaParser recovery logic crash when reported problem is not given a line number
- Fix assembler analysis failure due to not correctly merging frames with object/arrays and null constants
- Fix assembler checkcast not supporting array types
- Fix assembly playground tab crash when assembler text is empty
- Fix disassembly not using parameter names
- Fix reference search results of
invokedynamic
using the wrong descriptor - Fix search results root item icon being assigned to wrong icon when scrolling in and out of view
- Fix 'goto definition' not bringing target window to front
- Better name collision detection in disassembly
From: Col-E/Recaf@bafad87
Snapshot 11
This is a heavy WIP pre-release for bug reporting. Expect bugs (and please report them) and give feedback on what you think is done right or wrong.
Features
- QuiltFlower decompiler
- SSVM IO passthrough options now configurable (Disabled by default)
- Instruction results in search result tree now have their own context menu (for opening the parent method, and opening the assembler)
Bug fixes
- Default search value for string search not provided, so immediately starting a search fails due to NPE
- Text editor tab size now 4 spaces instead of obnoxious 8 spaces
- Text editor style clearing could attempt to clear data beyond text length and crash
- VM menus not appearing in all valid locations (optimize static-init/constructor)
- VM menus crashing when operating on methods with name of a single character
- Right click could not select the static initializer
- Right click not recognizing enum constants as field declarations
- Fallback decompiler crashing when encountering non-asm-abstracted opcodes like
LDC_W
- Disassembler last label emitted as
nullA
,nullB
etc sincenull
was being prefixed instead of empty string - Assembler not handling table-switch instructions properly
- Assembler analysis logic missing range and cast checks preventing assembling
MANIFEST.MF
main class entry ofMain-Class:
not rendering correctly when the key is lower cased,main-class:
Optimization
- Icon generation for text vs binary files for general cases vastly sped up
- Async search improvements and result cell rendering improvements for almost instant search results
Known Issues
- New Jar/Zip parsing issues
- Reflection restrictions on Java 16+ break the new Jar/Zip parsing routines, please use Java 11 through 15 until this has been resolved, or run using
--illegal-access=permit
- File locks on files opened may stay open until Recaf is closed
- Reflection restrictions on Java 16+ break the new Jar/Zip parsing routines, please use Java 11 through 15 until this has been resolved, or run using
From: Col-E/Recaf@beaa2d8
Snapshot 9
This is a heavy WIP pre-release for bug reporting. Expect bugs (and please report them) and give feedback on what you think is done right or wrong.
Features
- Beginning of SSVM integration
- UI support for invoking methods and seeing return values in sandbox accessible via method context menus
- New Jar/Zip exploit patching routines supported by LL-Java-Zip
Main-Class
attribute inMANIFEST.MF
files is now hyperlinked / clickable- Hex view now supports ASCII search with
Control + F
Changes
- Dividers in main UI now do not scale by default
- Outline panel in class views show synthetic members by default
Bug fixes
DCMP/LCMP
instruction pushed the wrong value type onto the stack, busting the assembler in methods using the instruction- Range check
_ASTORE
array instruction indices, marking invalid usage frames as 'wonky' - Context menus on methods not working if argument type has a type parameter and is also a phantom class
- Loading workspace from main menu not triggering loading overlay display
- Tab context menu item for
close all
only closing a single tab - Tab context menu item for
close others
closing unclosable tabs (tabs lost forever until restart) - Tab cache not cleared, preventing classes from being re-opened after reloading the same workspace
- Few cleanups in German/Chinese translations
- UI thread crash due to some cleanup actions being run on the wrong background threads
- Workspace closed from open-workspace prompt even when the cancel button is pressed
- Enum constants not showing in nav menu
- JadX decompiler warning about duplicate classes once an edit to the class has been made
- Combo-boxes in config menu showing the wrong initial values
- Opening help/discord links broken on certain OS's where the AWT desktop API is broken.
Known Issues
- New Jar/Zip parsing issues
- Reflection restrictions on Java 16+ break the new Jar/Zip parsing routines, please use Java 11 through 15 until this has been resolved, or run using
--illegal-access=permit
- File locks on files opened may stay open until Recaf is closed
- Reflection restrictions on Java 16+ break the new Jar/Zip parsing routines, please use Java 11 through 15 until this has been resolved, or run using
From: Col-E/Recaf@3116881
Snapshot 10
This is a heavy WIP pre-release for bug reporting. Expect bugs (and please report them) and give feedback on what you think is done right or wrong.
Features
- Obfuscation optimization via SSVM
- Inline string decryption calls / math obfuscation / etc
- String searches now search workspace files in addition to class string constants
- Warn when Java code is not parsable (and thus context actions are broken due to a bad decompilation)
- This is why the "Fields and methods" side panel exists, it allows you to still interact with the class
- Script manager window allowing easy management of beanshell scripts
- Assembler window "analysis" tab now shows local variable and stack state
- Also renamed the tab to "variables and stack"
Bug fixes
- Tab "Close others" and "Close all" options not doing what they should
- Workspace / search result tree context menus being incorrect due to cell recycling
- Last label in assembler output being prefixed with
null
- Lessened jank when using "Goto definition" on methods
- Beanshell scripts now support generics and varargs methods
- Renaming a class from a right-click context menu on the workspace causing the next class in the tree to open when pressing enter to complete the rename action
Known Issues
- New Jar/Zip parsing issues
- Reflection restrictions on Java 16+ break the new Jar/Zip parsing routines, please use Java 11 through 15 until this has been resolved, or run using
--illegal-access=permit
- File locks on files opened may stay open until Recaf is closed
- Reflection restrictions on Java 16+ break the new Jar/Zip parsing routines, please use Java 11 through 15 until this has been resolved, or run using
From: Col-E/Recaf@f049b83
Snapshot 8
This is a heavy WIP pre-release for bug reporting. Expect bugs (and please report them) and give feedback on what you think is done right or wrong.
Features
- Basic Android support
- Smali disassemble/reassemble
- Binary XML decoding (read only for now)
- Welcome page is closable but the space it occupies remains, and still opens classes/file content
Bug fixes
- Tab context menus not appearing
- Infinite loop in assembler playground
- Side/bottom utility tabs not fully closing (off by 3 pixels)
- Search bar in text controls not centering results on screen
- Unclosable tabs could be closed (and lost forever, requiring a restart) if dragged to a new window and the window was closed
- Unclosable tabs prevent secondary window closure now (primary window still closes and prompts for saving)
- Docking not behaving when dragged over workspace tree
- Improper Unicode escaping of
\uXXXX
patterns in decompilation - Entries in the recent file menu not using the correct icons
- Releases not filtering out 10 MB of unnecessary junk data from Icu4J.
- Crash when opening field/method with annotations
From: Col-E/Recaf@5af6919