Skip to content
This repository was archived by the owner on Sep 21, 2023. It is now read-only.

Releases: Col-E/recaf-3x-issues

Snapshot 17

11 Aug 00:25
7306653
Compare
Choose a tag to compare
Snapshot 17 Pre-release
Pre-release

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

27 Mar 00:44
7306653
Compare
Choose a tag to compare
Snapshot 16 Pre-release
Pre-release

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

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

21 Sep 14:56
0b8c334
Compare
Choose a tag to compare
Snapshot 15 Pre-release
Pre-release

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 and Control + '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 via invokestaticinterface
  • 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 supporting for loops due to invalid jump offset calculation
  • Fix fallback decompiler failing to decompile java/lang/Object due to null 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

30 Jul 07:10
0b8c334
Compare
Choose a tag to compare
Snapshot 14 Pre-release
Pre-release

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 and modules 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

02 Jul 12:21
0b8c334
Compare
Choose a tag to compare
Snapshot 13 Pre-release
Pre-release

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

25 Jun 10:32
0b8c334
Compare
Choose a tag to compare
Snapshot 12 Pre-release
Pre-release

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 to byte[]
    • Find fields/methods in ClassNode by name/descriptor
  • 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

14 May 06:46
8205995
Compare
Choose a tag to compare
Snapshot 11 Pre-release
Pre-release

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 since null 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 of Main-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

From: Col-E/Recaf@beaa2d8

Snapshot 9

28 Apr 02:04
075f134
Compare
Choose a tag to compare
Snapshot 9 Pre-release
Pre-release

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 in MANIFEST.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

From: Col-E/Recaf@3116881

Snapshot 10

09 May 04:09
075f134
Compare
Choose a tag to compare
Snapshot 10 Pre-release
Pre-release

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

From: Col-E/Recaf@f049b83

Snapshot 8

01 Apr 10:07
b295429
Compare
Choose a tag to compare
Snapshot 8 Pre-release
Pre-release

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