jadx v1.2.0 Release Notes
Release Date: 2020-11-14 // almost 4 years ago-
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: 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: 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
Previous changes from v1.1.0
-
1.1.0 (2019-12-07)
๐ Features
- ๐ initial deboxing implementation (#717) (fd7d08c)
- cli: add options for change log level (#735) (bc7a748)
- gui: add class links for AndroidManifest.xml and other minor fixes (c8df26f)
- gui: support APK signature v3 (PR #773) (cf3e17c)
๐ Performance Improvements
๐ Bug Fixes
- โ add assign for inlined getter methods (ccb8ed1)
- โ add dummy class if class loading exception occur (#763) (d3ecc1f)
- โ add explicit cast for byte literal in method invoke (#719) (be9dae5)
- โ add generic types propagation (#695) (ed8c662)
- adjust insn reorder check in code shrink visitor (#695) (3eee83c)
- always cast null objects in overloaded method (#707) (12bb632)
- check that iteration variable in for-each loop not used outside (#708) (24dc686)
- comment out instructions also before other constructor call (#685) (533b686)
- comment out instructions before super call in constructor (#685) (c6c54f9)
- convert inner enums and fix inner classes reference (#719) (4629043)
- don't change AST before checks in ternary transform (#710) (b32dc17)
- don't eliminate StringBuilder if no String arg present (4b314e9)
- don't override type of method parameter in const deboxing (#723) (ddedb8d)
- don't run class process from visitors to avoid deadlock (#743) (db892ad)
- don't stop loading classes in case of an error (PR #764) (902247f)
- duplicate result arg on instruction copy (11db454)
- ๐ฎ force cast for null args in method invoke (temp fix for #724) (08f9a90)
- ๐ฎ force one branch ternary in constructors (#685) (8410e62)
- ๐ handle incorrect args count in signature (#763) (00f5e83)
- ๐ handle methods with all NOPs (#744) (bd9e109)
- ignore finally extraction with only one 'if' instruction (#709) (a587ce8)
- ignore incorrect dex files in apk (#700) (c3f7a04)
- ๐ improve exception handler remove (#703) (3ae8359)
- ๐ improve finally extraction (49e234d)
- ๐ improve StringBuilder elimination (#704) (a530371)
- incorrect init values of inherited fields (ed9fe8a)
- increase region iterative traversal limit (#767) (9f06d67)
- inline assign in complex conditions (#699) (d1a6841)
- inline constant strings (#685) (424a8ff)
- ๐ instead commenting move constructor call to the top (#704) (c8de7b9)
- jadx-gui.bat and jadx.bat do not work (#692) (PR #694) (29a137b)
- ๐ make correct class members loading in jadx api (#742) (1cbaad3)
- ๐ make correct hash calculation for GenericObject type (#705) (e4fc677)
- ๐ merge const block before return (#699) (bae36f9)
- preserve arg type on PHI insn inline (#718) (8321d5e)
- protect method from second load (6b76a3c)
- ๐ read correct buffer size for string pool parsing (#712) (15d56ab)
- โ remove synchronization lock for code generation (#726) (068234f)
- ๐ฆ rename packages with reserved names (#711) (c555cd0)
- resolve code generation error for interface methods (#775) (a48ce29)
- resolve error if input file don't has extension (600842a)
- resolve some multi-thread issues (472aa52)
- several improvements for multi-variable type search (#720) (1e6b303)
- sort inner classes and methods by source lines (e4e6f37)
- ๐ support instructions removing in SimplifyVisitor (2dbdd1f)
- try to resolve generic type variables (#662) (db2b537)
- unbind unused ssa variable after ternary conversion (#708) (aad2d24)
- ๐ฆ use nice name for 'package-private' in modifiers change message (e842e02)
- ๐ workaround for IntelliJ bug on import line in build.gradle (PR #766) (3249a5e)
- gui: add default contructor for classes serialized with GSON (#752) (d1ac43d)
- gui: compare files extension in case insensitive way (9fbf9ef)
- gui: fix "Go to declaration" and "Find usage" menu actions (ff5f6fc)
- gui: fix search if class contains not generated inner class (#755) (f228a72)
- gui: ignore mouse click on empty space in tree (#737) (7bc01dc)
- gui: update Chinese translation (PR #697) (0f5fd4e)
- gui: use editor font on tabs (3578f7d)
- gui: yet another fix for broken find usage action (a71bb7a)
- res: skip string if parsing failed (#712) (8e8a2fa)