Releases: skylot/jadx
1.3.5
Features
- Add 'simple' decompilation mode
- [gui] Add split view for different decompilation modes
Bug Fixes
-
Handle inlined classes while collecting override related methods (#1422)
-
Use correct reference for replaced bridge constructor (#1441)
-
Handle wildcard in invoke type resolver (#1238)
-
Update class set to Android 32
-
Replace fixed memory limit with
-XX:MaxRAMPercentage=70.0
(#1437) -
Various minor improvements (PR #1418)
-
[cli] Use correct converter for "--decompilation-mode" option (#1434)(PR #1435)
-
[debugger] Resolve IO read problems, proper socket closing (PR #1414)
-
[deobf] Fix writing method mappings as fields entries (#1432)(PR #1433)
-
[gui] Rename class while rename constructor (#1441)
-
[gui] Restore open tabs on project load (regression fix)
-
[gui] Don't highlight whitespaces and special symbols (#1429)
-
[gui] Check free memory after GC attempt
-
[gui] Update Traditional Chinese translation (PR #1452)
-
[res] Ignore resource chunk entries that are located after the resource chunk end (#751)(PR #1436)
Full Changelog: v1.3.4...v1.3.5
Download files description:
- jadx-gui-1.3.5-with-jre-win.zip - jadx-gui with bundled JRE
- jadx-gui-1.3.5-no-jre-win.exe - jadx-gui single exe (system JRE must be installed)
- jadx-1.3.5.zip - cross-platform cli and gui bundle (system JRE must be installed)
For system JRE the latest version is always preferred, download at oracle.com
Artifacts on maven central repository: list. How to use jadx as a library, read on wiki page.
1.3.4
Features
- Support MethodParameters attribute (#1260)
- Plugin options: add verify checksum option for dex input (#1385), options for java-convert plugin
- [gui] Dialog for showing exception details and creating an GitHub issue (PR #1399)
- [gui] Add zoom in/out actions (#1403)
Bug Fixes
- Improve class names collision detection (#1406)
- Allow implicit type cast for array operations (#1407)
- Allow zero skips for restore new filled array
- Load files also by extension (#1391)
- Prevent NPE on 'ignore' deobf map file mode
- [cli] Resolve regression in applying '-v' and '-q' options
- [debugger] Handle stream end and partial reads (#1412)
- [gui] Prevent NPE on open preferences without loaded files (#1385)
- [gui] IllegalArgumentException when saving project to a different directory than the APK file (#1387)(PR #1388)
- [gui] Initialize project name with loaded files (shown in Jadx title) (#1386)(PR #1393)
- [gui] Revert contextual keywords to identifiers (#1394)
- [gui] Handle package version in update check (#1397)
- [gui] Don't use hardcoded color for link component (#1398)
- [gui] Download only latest version info for jadx update (#1397)
- [gui] Resolve NPE and fix code style in BreakpointManager
- [gui] Reduce threads count on low memory (#1410)
Full Changelog: v1.3.3...v1.3.4
Download files description:
- jadx-gui-1.3.4-with-jre-win.zip - jadx-gui with bundled JRE
- jadx-gui-1.3.4-no-jre-win.exe - jadx-gui single exe (system JRE must be installed)
- jadx-1.3.4.zip - cross-platform cli and gui bundle (system JRE must be installed)
For system JRE the latest version is always preferred, download at oracle.com
Artifacts on maven central repository: list. How to use jadx as a library, read on wiki page.
1.3.3
Features
- [gui] Add Frida snippet copy action (#1355)(PR #1356)
- [gui] Add Xposed snippet copy action (PR #1383)
- [gui] Ctrl+c copy highlighted word in code view (#1292)
- [gui] Ctrl+c copy node string in search window (#293)
- [cli] Improve single file mode (#1344)(#1384)
- [deobf] Do not deobfuscate known top level domains with 2 or 3 characters (PR #1369)
- Add option for deobfuscation map file handle mode (#1351)
- Support multi-entry loops (simple case) (#1320)
- Check dex checksum before parsing (#1343)
Bug Fixes
- Support full class name in inner generic types (#1340)
- Correct use of class names for inner types (#1340)
- Update field usage on const replace (#1348)
- Don't inline named variables (#1338)
- Prevent endless loop in path cross search (#1360)
- Prevent endless loop in anonymous class analysis (#1382)
- Check names from Kotlin metadata before use (#1364)
- Nested try catches with overlap try blocks (#1374)(PR #1375)
- Correct code reload after rename (#1378)
- Inline nested anonymous classes (#1379)
- Remove shadowed catch handlers (#1377)
- [cli] Fix and add debug log messages in initialization phase (PR #1362)
- [deobf] Collect missing renames for
.jobf
file (#1350)(PR #1353) - [gui] Find usage for overridden methods (#1349)(PR #1352)
- [gui] Results in usage search sorted by name (PR #1363)
- [gui] Missing icons and html decorations in usage dialog
- [gui] Split decompile and index tasks for correct time counting (#1361)
- [res] Improved decoding of flag attributes in binary XML files (#1156)(PR #1359)
- [res] Skip '.9.png' decode if patch data not found (#1112)
Performance
- Improve ternary mod on big methods (#1379)
Full Changelog: v1.3.2...v1.3.3
Download files description:
- jadx-gui-1.3.3-with-jre-win.zip - jadx-gui with bundled JRE
- jadx-gui-1.3.3-no-jre-win.exe - jadx-gui single exe (system JRE must be installed)
- jadx-1.3.3.zip - cross-platform cli and gui bundle (system JRE must be installed)
For system JRE the latest version is always preferred, download at oracle.com
Artifacts on maven central repository: list
How to use jadx as a library, read on wiki page.
1.3.2
Core
- Use Kotlin intrinsic methods for variables rename (#1207)
- Improve anonymous class inline (#523)
- Correct literal negate for double and float (#1334)
- Add explicit type for non-int constants (#1336)
- Simplify cascading casts (#1336)
- Wrap negative literals before cast (#1327)
- Handle method override with several bases (#1234)
- Precalculate class deps for inline methods (#1339)
- Skip input file name checks by zip name validator (#1310)
- Use secure XML parser for process manifest
GUI
- Processing threads spinner initialization (#1331)(PR #1332)
- Correct handling for tree row click (#1324)
- Reduce tree focus switching
- Use relative file paths in .jadx project file (#1312) (PR #1313)
- For Smali debugger: support multiple main
<action>
and<activity-alias>
tags (#1322)(PR #1323)
Download files description:
- jadx-gui-1.3.2-with-jre-win.zip - jadx-gui with bundled JRE
- jadx-gui-1.3.2-no-jre-win.exe - jadx-gui single exe (system JRE must be installed)
- jadx-1.3.2.zip - cross-platform cli and gui bundle (system JRE must be installed)
For system JRE the latest version is always preferred, download at oracle.com
Artifacts on maven central repository: list
How to use jadx as a library, read on wiki page.
1.3.1
Core
- Don't unload field init values (#1277)
- Handle super case for invokespecial opcode (#1300)
- Improve try/catch bounds detection (#1303)
- Handle move-result after invoke-custom with string concat
- Use correct top block for try blocks with same start (#1304)
- Invoke in nested anonymous classes (#1305)
- Add merged condition blocks for loop region (#1307)
- Add option to use dx/d8 for convert java bytecode (#1299)
- Add comments with option references to improve usability
GUI
- Smali code highlighting (PR #1283)
- Allow to minimize/maximize search windows (#1298)
- Update Quark report parsing (#1289) (PR #1291)
- Forward navigation shortcut on macOS (#1297)(PR #1301)
- Restore usage data after class reload (#1281)
- Include inlined classes in usage search (#1285)
- Add Traditional Chinese translation (PR #1306)
- Update Chinese translation (PR #1284, PR #1287, PR #1296)
- Update German translation (PR #1290)
Download files description:
- jadx-gui-1.3.1-with-jre-win.zip - jadx-gui with bundled JRE
- jadx-gui-1.3.1-no-jre-win.exe - jadx-gui single exe (system JRE must be installed)
- jadx-1.3.1.zip - cross-platform cli and gui bundle (system JRE must be installed)
Also, jadx artifacts now available on maven central repository: view on maven
How to use jadx as a library read on wiki page.
1.3.0
Core
- Initial support for 'invoke-custom' instruction (#384)
- Initial support for java bytecode decompilation
- Concat constant strings (#1014)
- Rewrite try-catch processing
- Support AAR files as input (#1034)
- Support Android App Bundle (#1129) (PR #1131)
- Add option to change deobfuscation map file (#1117)
- Add option to disable methods inline (#1170)
- Improve decompilation speed (#1269)
GUI
- Add a smali debugger (#1136) (PR #1137)
- Support code comments (#359) (PR #1127)
- Use FlatLaf for themes support
- Use SVG icons (PR #1221)
- Add Quark-Engine integration (#1119) (PR #1135)
- Allow to use regex in the search dialog (PR #1069)
- Search in resource files (#347) (#1032) (PR #1108)
- Improve exclude package feature (#1151) (PR #1152)
- Add option to change line numbers mode (#1223)
- Rename without deobfuscation, save renames in project (#1076 #1022)
- Save open tabs in project file
- Improve smali printer to show bytecode (#1114) (PR #1126)
Download files description:
- jadx-gui-1.3.0-with-jre-win.zip - jadx-gui with bundled JRE
- jadx-gui-1.3.0-no-jre-win.exe - jadx-gui single exe (system JRE must be installed)
- jadx-1.3.0.zip - cross-platform cli and gui bundle (system JRE must be installed)
v1.2.0
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 ag...
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 c...
v1.0.0
1.0.0 (2019-06-20)
BREAKING CHANGES
- some parts of jadx was rewritten from scratch:
- type inference
- variable declaration
finally
block extraction
Features
- output decompilation results in json format (#676) (ed385e8)
- support smali files (#391) (PR #588) (d23f4ac)
- add a flag to disable debug info (#276) (PR #502) (d111fd0)
- add generic method information to .jcst (PR #564) (fe41174)
- add option to disable anonymous class inline (#633) (e7e7b66)
- add options to configure "renaming" (#570) (PR #582) (74a72a5)
- new implementation for type inference approach and variable declaration (e026345)
- cli: decompile only a single class (PR #657) (6f973ca)
- gui: add "Go To Declaration" in menu (PR #618) (aa41a4d)
- gui: save the class tree width and restore it upon jadx-gui start (PR #606) (65818dc)
- gui: save tree expansions in project (PR #605) (f803973)
- gui: select a class to open via command-line (PR #658) (fef3e55)
- gui: show smali (#197) (PR #635) (031582d)
Bug Fixes
- add cast for null in overloaded methods (#636) (PR #637) (77cee15)
- add correct type propagation for check-cast and move instructions (#401) (7bd1752)
- add labels from NOP instructions in fallback mode (#666) (5efe4bd)
- add missing import for class generics map (PR #480) (dd2e7e8)
- add more details for variable with type inference error (2dea6f5)
- add primitive cast in ternary for byte and short (PR #601) (632cc3e)
- additional checks for loop exit edges and 'for' conversion (#483) (6e66dc2)
- additional checks for synthetic methods remove, rename and inline (#452) (28d348b)
- allow APK files without code (no contained dex files) (PR #455) (91691fb)
- allow override type with wider one only from debug info (#403) (b9fffa1)
- always use FileUtils.createTempFile (PR #634) (cab3f5d)
- avoid ConcurrentModificationException in EliminatePhiNodes pass (e1ca290)
- avoid local variables collision with full class names (#647) (52ba33c)
- better String constructor from byte and char arrays (#530) (PR #533) (ec66476)
- bitwise or/and with non-boolean (#628) (PR #629) (9645f33)
- byte to number without cast (#596) (PR #638) (e1dfb4e)
- cast of int-to-(number) when int is boolean (#596) (PR #602) (c134329)
- change exception to soft warning for getType in RegisterArg (3492ec3)
- change type update collection to produce deterministic results (68d074a)
- check block before insert additional move instruction for type inference (cbdc249)
- check if synthetic class not yet processed but must be removed (#450) (d069928)
- check variable usage before convert indexed loop to for-each variant (#483) (2c07253)
- close resource (PR #546) (a6f935e)
- conditions in ternary if (#449) (PR #558) (eb77aa5)
- correct arg replace in PHI instruction (#462) (2383c40)
- don't cast overloaded methods with generics from other class (#448) (008216d)
- don't reject type update for generics (43de744)
- don't remove empty default constructor if other constructors exists (#460) (dd13edf)
- don't rename constructors (554e119)
- don't rename R class fields alias (PR #492) (5f0dbf8)
- don't rename R class in deobfuscation (#572) (PR #573) (ab4721a)
- don't replace resources names with field names (#465) (7243ab5)
- field increment (PR #550) (bae7f1b)
- forbid to change types for methods arguments (b689efc)
- generates XML key names if empty (#394) (PR #615) (c74b7f2)
- generics constructor types (PR #594) (bcfed5b)
- handle anonymous class self inlining (#604) (9d5dda1)
- handle big .jar files (using multi-dex option) (#390) (PR #568) (79ccaad)
- handle boolean condition with bitwise OR and AND (#202) (PR #522) (b78349a)
- handle cases with SSA variable used in several PHI's (#667) (6c61ce5)
- handle NOP instructions in unexpected places (#666) (1830c27)
- handle NPE for methods with removed instructions (#342) (PR #583) (395cae4)
- hide debug type inference logs (d553157)
- hide first argument instead remove for constructor in inner class (653bb2a)
- ignore NOPs in try-catch (#668) (f02a33a)
- ignore not generated insns in CodeShrinker visitor (PR #560) (7b18d3a)
- imple...
v0.9.0
0.9.0 (2019-02-12)
Features
- gui: APK signature check v1/v2 using the apksig library from Google (#431) (d1af751)
- gui: add a menu to copy class name (#351) (a8febb2)
- gui: add icons to jadx-gui (#420) (PR #428) (f8c0449)
- gui: make the import class name clickable (#378) (df9ae29)
- support multi-exception catch blocks (#421) (aec9864)
Bug Fixes
- ArrayIndexOutOfBoundsException in string concatenation visitor (#427) (72b2663)
- change not allowed access modifiers for methods (#387) (PR #439) (8c7140d), closes #370
- change resource fields generations in R class (#308) (f6f883b)
- correct code line number calculation (1d7bb43)
- don't remove synthetic class with inner classes (850bd96)
- don't remove synthetic method if args count or name not same (#361) (20b03aa)
- don't rename constructors and class init methods in deobfuscator (#415) (0f27eba)
- exports resources first (#376) (87f50ab)
- Fix for #377 (Jadx in Windows open with list) (#379) (a8a3164)
- force rename by checks from RenameVisitor (#432) (da41efa)
- force rename fields and methods with reserved names (#364) (3815d30)
- generates code of missing R class (#353) (5de4d07)
- instruction deep equals must check result (1fc92d2)
- lower regions count limit (#354) (9be62fb)
- process try/catch without move-exception instruction (#395) (6d59f77)
- refactor, improve performance and fix some issues in resource processing (82d0d62)
- rename method wrapped by synthetic only from same class (#430) (618b014)
- gui: loading of i18n resources as UTF-8 (see #363) (PR #386) (5281eed)
- gui: allow partial settings sync to not save command line options (557667b)
- gui: add "use imports" option to preferences (bc62933)
- gui: add synchronization to SimpleIndex class (#435) (b28eaa1)
- gui: add synchronizations to search index creation (#433) (9e0cd2e)
- gui: apply render hints for line numbers (58993b9)
- gui: don't skip indexing code lines starting with '}' (#426) (1272ae2)
- gui: fill background before draw line numbers (#404) (7e8435c)
- gui: limit the spare memory to max. 512MiB (#434) (ffedaea)
- return type lost after type inference (#396) (3a798cb)
- saves all resources (#375) (8eef4a9)
- search exception handler splitter block by offset if jump source unknown (#406) (e9591ef)
- show method alias in "method not decompiled" messages (#410) (fd3498a)
- update apksig library to latest version (#431) (b0e3cfe)
- update dx to version 16 (#369) (bedbf94)
- use '$' as separator for inner classes in .jobf file (#415) (e0624ce)
- use '$' for inner classes also in methods and fields (#415) (a841d0e)
- gui: make correct size truncate for recent files list (2de86b6)
- gui: various UI improvements (#419) (f60bb6b)
- gui: make link for full class names (#378) (a3464d7)
- gui: on settings reset run upgrade method (0abb51c)
- gui: override settings by cmd options (6b3e8f0)
- gui: show 'copy name' action only for supported nodes (9e24a5a)
- gui: unsynchronized search index creation results in NullPointerException upon performing search (#429) (7c353a6)
- gui: use correct font and style for certificate panel (b587b6d)
- gui: use editor font in files tree and fix bundled font loading (2931617)
- gui: use editor font in search node column (be509c7)
- gui: wait time for background jobs too short (1ac2cdf)