Skip to content

Releases: skylot/jadx

1.3.4

20 Mar 10:17
d2bef10
Compare
Choose a tag to compare

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

20 Feb 16:53
0933539
Compare
Choose a tag to compare

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

20 Jan 12:31
d22db30
Compare
Choose a tag to compare

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

19 Dec 20:30
4bd8e26
Compare
Choose a tag to compare

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

20 Nov 15:09
445e91e
Compare
Choose a tag to compare

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

14 Nov 16:23
Compare
Choose a tag to compare

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...
Read more

v1.1.0

07 Dec 15:39
Compare
Choose a tag to compare

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

  • gui: speed up line numbers rendering (#714) (3bc9671)

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...
Read more

v1.0.0

20 Jun 09:17
Compare
Choose a tag to compare

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...
Read more

v0.9.0

12 Feb 09:26
8c7140d
Compare
Choose a tag to compare

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)

v0.8.0

26 Aug 19:22
Compare
Choose a tag to compare

0.8.0 (2018-08-26)

Features

  • core: fixed deobfuscation for method and fields
  • core: many fixes for try/catch blocks and loop
  • gui: speed impovements for search dialog
  • gui: fixed memory leaks
  • gui: show app certificate
  • build: use semantic-release for automatic release publishing (156e420)
  • build: added jadx-gui executable for windows