github skylot/jadx v1.2.0

latest releases: v1.5.0, v1.4.7, v1.4.6...
3 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: 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 instead this when super 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

Don't miss a new jadx release

NewReleases is sending notifications on new releases.