Main changes
- gui: support for renaming methods, classes and fields
- gui: allow to load multiple files, button for add files
- res: fix duplicate entries and deobfuscate file names in XML resources
- core: improved generics and varargs restore
All changes
Features
- add methods information from standard library, improve generics and varargs restore (#836) (dea7714)
- deobf: add classname parsing for Kotlin metadata (PR #842, #758) (492a3f6)
- deobf: improve deobfuscated class names by including class properties and info about super class respectively implemented interfaces (PR #969) (1774dc7)
- gui: add Messages_de_DE.properties (PR #804) (553f5b0)
- gui: allow to load multiple files, button for add files (#936) (278c5f6)
- gui: allow to search for full method/field signature, not only the name (PR #880) (c1f4302)
- gui: map back and forward mouse keys for navigation (#807) (9ab003d)
- gui: on mouse hover highlight identifiers with enabled actions (like 'find usage' or 'rename') (94a06d9)
- gui: rename classes and fields by popup menu in tree panel (PR #993) (9f68493)
- gui: reopened tabs on file reload (PR #793 #792) (78eed86)
- gui: support for renaming methods, classes and fields (PR #794 #791) (e3055b9)
- res: fix duplicate entries and deobfuscate file names in XML resources (PR #995) (71617a1)
- res: rename resources keys if contains unprintable chars or duplicates (#844) (PR #909) (315c07d)
Performance Improvements
- gui: reduce updates count for memory usage bar (#1000) (9277341)
- res: speed up rename of deobfuscated resources (d1e5186)
Bug Fixes
- add cast to exact type on field access (#729) (ae31fee)
- add methods and fields types into usage info (#729) (e7b00cc)
- added another enum restore pattern (#926) (aa8fd3c)
- additional casts at use place to help type inference (#1002) (2b7d7ce)
- additional checks before insert move to help type inference (#843) (5502d93)
- additional checks for 'if' blocks inside loops (#809) (04e309a)
- additional checks for class signature (e09e933)
- additional patterns to restore enum classes (#830) (62ca30b)
- additionally show smali code of all inner classes (recursively) (PR #849, #848) (bd0d248)
- additionally show smali code of inner classes (PR #824) (c97e504)
- adjust limits to skip processing of large methods (#1012) (e054ea6)
- adjust types for arithmetic instructions (#921) (60b2353)
- allow cross-block move inline (#946) (440357d)
- allow to inline variables around 'monitor-exit' in synchronized block (13609a5)
- allow to regenerate class code (#791) (1c6e51f)
- attach method details before OverrideMethodVisitor (d59c99d)
- bring back smali files support (#961) (558a867)
- check enum constructor content before removing (#922) (f3cd4e3)
- checks for casts in field access, move method inline to visitor (#962) (691bf8f)
- class resolving issues (#867) (5eec8f7)
- collect class usage and fix class access modifiers (#729) (d720179)
- concurrent access may cause an java.lang.ClassCastException in JNodeCache (PR #864) (4520747)
- correct detection of exits in synchronized block (#942) (d6ad21f)
- correct merge code variables across PHI instructions (#930) (0deafb7)
- correct method exit blocks collection (#876) (4cdad0e)
- correct parsing for array-data-payload (bcd6e53)
- correct skip size for sparse switch payload (7d29c5d)
- correct type and data merge for filled-array instruction (89b4ae6)
- correctly process extended enums if class is not inner (#924) (4e3d858)
- deep reload for inner classes, const values and anonymous classes (9dbffef)
- do not copy input files as resources to output folder (2a2b83a)
- don't add @OverRide for static methods (#976) (6428f29)
- don't add @OverRide if super method is private (#976) (cfaa6ab)
- don't add cast for PHI insn (#1002) (a22efc2)
- don't apply again already resolved types (#1012) (5f659c8)
- don't apply const split if not needed (71bf2aa)
- don't apply types if search failed (#840) (1ce8fa8)
- don't duplicate result arg with instruction copy (breaks SSA variable assign) (4dc4aa1)
- don't generate string concatenation without assign to variable (58722d3)
- don't inline 'null' object to make code compilable (#964) (545cd4e)
- don't inline constants in synchronized statement (#799) (f5d1f28)
- don't modify method argument types in MethodInvokeVisitor (#927 #836) (b1d5ed0)
- don't print commented case value if it is an instruction (#850) (fcb70e6)
- don't remove synthetic methods from enum (#884) (9d8066f)
- don't trust type info in signature, check before apply (#858) (2d641bf)
- don't use FileChannel on ZipFs to avoid creation of temp files (#950) (a83ca1f)
- don't use OS specific new line chars (#861) (fa0a38d)
- don't use static vars of mutable LiteralArg class (#1005) (8ca3cd3)
- exclude directories from dex convertion results (b219ab6)
- handle method arguments in primitive types conversion (#956) (bfd60b7)
- handle xor on boolean (#921) (1bbcac2)
- improve 'out' block detection in switch (#826) (2107da2)
- improve boolean type handling in type inference (3143418)
- improve checks for boolean to int conversion (#921) (714b935)
- improve ClassNode reloading and revert some changes (0c4b807)
- improve limit calculation for type updates in type inference (#854) (3e9f4a5)
- improve resource type detection and remove deprecated method (cd006ce)
- improve type inference for arrays (#837) (519a74e)
- improve type inference for generics in invoke insn (#927) (404136c)
- improve type inference of type variables in method invoke (#913) (6192ced)
- improve wildcard types compare (#857) (e444ecb)
- inline assignment instruction from same block (#820) (c24a3ed)
- inline class constants to fix enum transform (#916) (2207cd7)
- inline move instructions to help process constructors (#927) (e22474e)
- load .class files (444ea9e)
- make class public if some method going to be inlined (#729) (15776c4)
- make correct replacement for synthetic constructor (#808) (0221380)
- mark override methods and fix return type (#913) (0692464)
- method info cache error (#868) (49a82c8)
- more visibility checks for @OverRide (#984) (4e4c7f7)
- move class unload to synchronized block (#977) (73ca2e0)
- preserve code semantics on array-for-each transform (#893) (a5ea560)
- prevent endless loop in method signature parsing (#1007) (009939f)
- prevent zipbomb forged headers attacks (#980, PR #982) (9b1761f)
- record inlined classes and generate Smali code for them (PR #851, #848) (4859629)
- redone shadowed fields handling (#897) (7f5092c)
- reload request for correct class in method inline visitor (#999) (aec8ebe)
- remove enum methods after instructions check (#884) (2f780da)
- remove move instructions with unused result (#835) (49ce92f)
- replace constants for arrays in annotations (#831) (26bad4a)
- replace constants inside annotations (#831) (2921c66)
- replace type variables in arrays (#913) (85760cc)
- rerun signature parser on class reload (#981) (14cbfbc)
- resolve char literal incorrect print as string (#856) (0f808d5)
- resolve class cast exception introduced in CodeWriter refactoring (#810) (0c55ab9)
- resolve ClassCastException on encoded value access (#946) (5e62b90)
- resolve error in SkipMethodArgsAttr if method not yet loaded (#924) (8785232)
- resolve exception on assign inline (f1e2291)
- resolve generic types in method arguments (#913) (09e267f)
- resolve multi-threaded unloading (bb0fad2)
- resolve NPE while compare outer generic types (89dbae8)
- resolve several issues with package rename and class reload (#987) (e2b4280)
- resolve some cases of switch in loop (#876) (2da772d)
- resolved regression in Kotlin metadata parser (91ee756)
- restart comment to escape strings in insn fallback dump (f482b8b)
- restore android R class (#947) (regression) (65553c1)
- restore enum for java 15 (408201b)
- restore enum for several blocks in class init method (57c28c6)
- several improvements for generics and type inference (459f12d), closes #956
- shrink code if region maker add FORCE_ASSIGN_INLINE to insn (#845) (d0f197e)
- speed up switch processing by skip not relevant exits (#846) (1336c47)
- split CONST used in PHI to help type inference (#900) (a7f315f)
- transform loop to
for
with branching at end (33f2c3f) - try raw types to help type inference (#913) (7cd77ae)
- use
super
insteadthis
whensuper
member is shadowed (PR #878) (3c7be5e) - use correct class for Throwable, insert catch arg name if not defined (#896) (47dadf0)
- use internal usage info for rename, fix index refresh (#791) (ae26512)
- use recursive objects for nested inner generic classes (#869) (f5767dd)
- workaround for link clicks in RSyntaxTextArea (#929) (45b7304)
- deobf: resolve NPE when package is empty (if rename is disabled) (e3f388a)
- gui: add Deutsch to locales list (#804) (8421157)
- gui: add dots for progress titles (99eb31b)
- gui: allow to rename packages (#987) (c0a8197)
- gui: clear jumps history on file close (12dc4fd)
- gui: correct app close on menu exit action (a2df92d)
- gui: fix rename dialog pack (#972) (b76c882)
- gui: improve Deutsch translation (PR #806) (1568008)
- gui: load file in background thread and show progress indicator (9c88f70)
- gui: merge plugins service files (#949) (4b18867)
- gui: only show renaming option for JClass, JField and JMethod (PR #1001) (7353790)
- gui: RenameDialog: Warn user if deobfuscation settings are invalid (PR #935) (705ceca)
- gui: resolve --select-class option regression (PR #816) (287275d)
- gui: resolve exceptions during index (#812) (af6f8b5)
- gui: run indexJob before rename (PR #910) (8a8b945)
- gui: search class with --select-class also by not deobfuscated names (55eb86d)
- gui: search only in short names of methods and fields (#818) (8365855)
- gui: update Deutsch translation (PR #811) (3b9b103)
- gui: update Messages_zh_CN.properties (PR #959) (f696dc7)
- gui: use correct charset when writing mapping file (PR #992) (ff6665c)
- gui: use env %JAVA_HOME% as the JRE path (PR #895) (c62039f)
- res: fixes deobfuscated resource text files saving (PR #1004) (804c8ef)
- res: put deobfuscated files to res/ folder (PR #995) (f0e6c8e)
- res: resource XML generation for parent attribute added (PR #933, #931) (c7a12ad)
- res: skip unused bytes in xml attributes parsing (#1013) (82d4099)
- res: XML parsing: handling of TYPE_DYNAMIC_REFERENCE entries (#919, PR #923) (258ecad)
- xml: reset nsMap in parse method (PR #798 #796) (ef5da49)
Download files description:
- jadx-gui-1.2.0-with-jre-win.zip - jadx-gui with bundled JRE
- jadx-gui-1.2.0-no-jre-win.exe - jadx-gui single exe, system JRE must be installed
- jadx-1.2.0.zip - cross-platform cli and gui bundle, system JRE must be installed