Skip to content

Commit

Permalink
feat(jadx): upgrade to jadx v1.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
stayradiated committed Sep 14, 2020
1 parent 3b79118 commit c05b561
Show file tree
Hide file tree
Showing 65 changed files with 3,790 additions and 3,200 deletions.
6,702 changes: 3,614 additions & 3,088 deletions package-lock.json

Large diffs are not rendered by default.

23 changes: 12 additions & 11 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"jadx-node": "./bin/jadx-node"
},
"scripts": {
"clean": "pkg-clean",
"build": "pkg-build",
"lint": "pkg-lint",
"tidy": "pkg-tidy",
Expand All @@ -24,19 +25,19 @@
},
"homepage": "https://github.com/mishguruorg/jadx-node#readme",
"devDependencies": {
"@mishguru/package": "7.8.4",
"@types/luxon": "1.15.2",
"@types/sinon": "7.5.0",
"@types/yargs": "13.0.3"
"@mishguru/package": "8.0.0",
"@types/luxon": "1.24.4",
"@types/sinon": "9.0.5",
"@types/yargs": "15.0.5",
"stu": "3.2.0"
},
"dependencies": {
"chalk": "2.4.2",
"execa": "3.1.0",
"luxon": "1.19.3",
"ora": "4.0.2",
"stu": "3.2.0",
"tempy": "0.3.0",
"yargs": "14.2.0"
"chalk": "4.1.0",
"execa": "4.0.3",
"luxon": "1.25.0",
"ora": "5.1.0",
"tempy": "0.7.0",
"yargs": "16.0.3"
},
"release-it": {
"scripts": {
Expand Down
Binary file not shown.
Binary file removed resources/jadx-1.0.0/lib/apksig-3.3.2.jar
Binary file not shown.
Binary file removed resources/jadx-1.0.0/lib/asm-7.1.jar
Binary file not shown.
Binary file removed resources/jadx-1.0.0/lib/checker-qual-2.5.2.jar
Binary file not shown.
Binary file removed resources/jadx-1.0.0/lib/cloning-1.9.12.jar
Binary file not shown.
Binary file removed resources/jadx-1.0.0/lib/commons-lang3-3.8.1.jar
Binary file not shown.
Binary file removed resources/jadx-1.0.0/lib/commons-text-1.6.jar
Binary file not shown.
Binary file not shown.
Binary file removed resources/jadx-1.0.0/lib/gson-2.8.5.jar
Binary file not shown.
Binary file removed resources/jadx-1.0.0/lib/jadx-cli-1.0.0.jar
Binary file not shown.
Binary file removed resources/jadx-1.0.0/lib/jcommander-1.74.jar
Binary file not shown.
Binary file removed resources/jadx-1.0.0/lib/objenesis-3.0.1.jar
Binary file not shown.
Binary file removed resources/jadx-1.0.0/lib/reactive-streams-1.0.2.jar
Binary file not shown.
Binary file removed resources/jadx-1.0.0/lib/slf4j-api-1.7.26.jar
Binary file not shown.
Binary file removed resources/jadx-1.0.0/lib/smali-2.2.7.jar
Binary file not shown.
File renamed without changes.
File renamed without changes.
98 changes: 56 additions & 42 deletions resources/jadx-1.0.0/README.md → resources/jadx-1.1.0/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

[![Build Status](https://travis-ci.org/skylot/jadx.png?branch=master)](https://travis-ci.org/skylot/jadx)
[![Code Coverage](https://codecov.io/gh/skylot/jadx/branch/master/graph/badge.svg)](https://codecov.io/gh/skylot/jadx)
[![Alerts from lgtm.com](https://img.shields.io/lgtm/alerts/g/skylot/jadx.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/skylot/jadx/alerts/)
[![SonarQube Bugs](https://sonarcloud.io/api/project_badges/measure?project=jadx&metric=bugs)](https://sonarcloud.io/dashboard?id=jadx)
[![License](http://img.shields.io/:license-apache-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0.html)
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)
Expand All @@ -10,65 +11,72 @@

Command line and GUI tools for produce Java source code from Android Dex and Apk files

**Main features:**
- decompile Dalvik bytecode to java classes from APK, dex, aar and zip files
- decode `AndroidManifest.xml` and other resources from `resources.arsc`
- deobfuscator included

**jadx-gui features:**
- view decompiled code with highlighted syntax
- jump to declaration
- find usage
- full text search

See these features in action here: [jadx-gui features overview](https://github.com/skylot/jadx/wiki/jadx-gui-features-overview)


![jadx-gui screenshot](https://i.imgur.com/h917IBZ.png)


### Downloads
### Download
- latest [unstable build: ![Download](https://api.bintray.com/packages/skylot/jadx/unstable/images/download.svg) ](https://bintray.com/skylot/jadx/unstable/_latestVersion#files)
- release from [github: ![Latest release](https://img.shields.io/github/release/skylot/jadx.svg)](https://github.com/skylot/jadx/releases/latest)
- release from [bintray: ![Download](https://api.bintray.com/packages/skylot/jadx/releases/images/download.svg) ](https://bintray.com/skylot/jadx/releases/_latestVersion#files)

After download unpack zip file go to `bin` directory and run:
- `jadx` - command line version
- `jadx-gui` - graphical version
- `jadx-gui` - UI version

On Windows run `.bat` files with double-click\
**Note:** ensure you have installed Java 8 64-bit version


### Related projects:
- [PyJadx](https://github.com/romainthomas/pyjadx) - python binding for jadx by [@romainthomas](https://github.com/romainthomas)


### Building jadx from source
**Note:** ensure you have installed Java 8 or later 64-bit version.
For windows you can download it from [adoptopenjdk.net](https://adoptopenjdk.net/releases.html?variant=openjdk11&jvmVariant=hotspot#x64_win) (select "Install JRE").

### Install
1. Arch linux
```bash
sudo pacman -S jadx
```
2. macOS
```bash
brew install jadx
```

### Build from source
JDK 8 or higher must be installed:

git clone https://github.com/skylot/jadx.git
cd jadx
./gradlew dist
```
git clone https://github.com/skylot/jadx.git
cd jadx
./gradlew dist
```
(on Windows, use `gradlew.bat` instead of `./gradlew`)
Scripts for run jadx will be placed in `build/jadx/bin`
and also packed to `build/jadx-<version>.zip`
### macOS
You can install using brew:

brew install jadx

### Run
Run **jadx** on itself:

cd build/jadx/
bin/jadx -d out lib/jadx-core-*.jar
# or
bin/jadx-gui lib/jadx-core-*.jar


### Usage
```
jadx[-gui] [options] <input file> (.apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc)
options:
-d, --output-dir - output directory
-ds, --output-dir-src - output directory for sources
-dr, --output-dir-res - output directory for resources
-j, --threads-count - processing threads count
-r, --no-res - do not decode resources
-s, --no-src - do not decompile source code
--single-class - decompile a single class
--output-format - can be 'java' or 'json' (default: java)
--output-format - can be 'java' or 'json', default: java
-e, --export-gradle - save as android gradle project
-j, --threads-count - processing threads count, default: 4
--show-bad-code - show inconsistent code (incorrectly decompiled)
--no-imports - disable use of imports, always write entire package name
--no-debug-info - disable debug info
Expand All @@ -77,35 +85,41 @@ options:
--escape-unicode - escape non latin characters in strings (with \u)
--respect-bytecode-access-modifiers - don't change original access modifiers
--deobf - activate deobfuscation
--deobf-min - min length of name, renamed if shorter (default: 3)
--deobf-max - max length of name, renamed if longer (default: 64)
--deobf-min - min length of name, renamed if shorter, default: 3
--deobf-max - max length of name, renamed if longer, default: 64
--deobf-rewrite-cfg - force to save deobfuscation map
--deobf-use-sourcename - use source file name as class name alias
--rename-flags - what to rename, comma-separated, 'case' for system case sensitivity, 'valid' for java identifiers, 'printable' characters, 'none' or 'all'
--rename-flags - what to rename, comma-separated, 'case' for system case sensitivity, 'valid' for java identifiers, 'printable' characters, 'none' or 'all' (default)
--fs-case-sensitive - treat filesystem as case sensitive, false by default
--cfg - save methods control flow graph to dot file
--raw-cfg - save methods control flow graph (use raw instructions)
-f, --fallback - make simple dump (using goto instead of 'if', 'for', etc)
-v, --verbose - verbose output
-v, --verbose - verbose output (set --log-level to DEBUG)
-q, --quiet - turn off output (set --log-level to QUIET)
--log-level - set log level, values: QUIET, PROGRESS, ERROR, WARN, INFO, DEBUG, default: PROGRESS
--version - print jadx version
-h, --help - print this help
Example:
jadx -d out classes.dex
jadx --rename-flags "none" classes.dex
jadx --rename-flags "valid,printable" classes.dex
jadx --log-level error app.apk
```
These options also worked on jadx-gui running from command line and override options from preferences dialog
### Troubleshooting
##### Out of memory error:
- Reduce processing threads count (`-j` option)
- Increase maximum java heap size:
* command line (example for linux):
`JAVA_OPTS="-Xmx4G" jadx -j 1 some.apk`
* edit 'jadx' script (jadx.bat on Windows) and setup bigger heap size:
`DEFAULT_JVM_OPTS="-Xmx2500M"`
Please check wiki page [Troubleshooting Q&A](https://github.com/skylot/jadx/wiki/Troubleshooting-Q&A)
### Contributing
To support this project you can:
- Post thoughts about new features/optimizations that important to you
- Submit decompilation issues, please read before proceed: [Open issue](CONTRIBUTING.md#Open-Issue)
- Open pull request, please follow these rules: [Pull Request Process](CONTRIBUTING.md#Pull-Request-Process)
### Related projects:
- [PyJadx](https://github.com/romainthomas/pyjadx) - python binding for jadx by [@romainthomas](https://github.com/romainthomas)
---------------------------------------
*Licensed under the Apache 2.0 License*
*Copyright 2018 by Skylot*
*Copyright 2019 by Skylot*
51 changes: 31 additions & 20 deletions resources/jadx-1.0.0/bin/jadx → resources/jadx-1.1.0/bin/jadx
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
#!/usr/bin/env sh

#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

##############################################################################
##
## jadx start up script for UN*X
Expand Down Expand Up @@ -64,7 +80,7 @@ case "`uname`" in
;;
esac

CLASSPATH=$APP_HOME/lib/jadx-cli-1.0.0.jar:$APP_HOME/lib/jadx-core-1.0.0.jar:$APP_HOME/lib/dx-1.16.jar:$APP_HOME/lib/android-5.1.jar:$APP_HOME/lib/logback-classic-1.2.3.jar:$APP_HOME/lib/slf4j-api-1.7.26.jar:$APP_HOME/lib/baksmali-2.2.7.jar:$APP_HOME/lib/smali-2.2.7.jar:$APP_HOME/lib/util-2.2.7.jar:$APP_HOME/lib/jcommander-1.74.jar:$APP_HOME/lib/asm-7.1.jar:$APP_HOME/lib/annotations-17.0.0.jar:$APP_HOME/lib/cloning-1.9.12.jar:$APP_HOME/lib/gson-2.8.5.jar:$APP_HOME/lib/dexlib2-2.2.7.jar:$APP_HOME/lib/guava-27.1-jre.jar:$APP_HOME/lib/logback-core-1.2.3.jar:$APP_HOME/lib/objenesis-3.0.1.jar:$APP_HOME/lib/antlr-runtime-3.5.2.jar:$APP_HOME/lib/stringtemplate-3.2.1.jar:$APP_HOME/lib/failureaccess-1.0.1.jar:$APP_HOME/lib/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:$APP_HOME/lib/jsr305-3.0.2.jar:$APP_HOME/lib/checker-qual-2.5.2.jar:$APP_HOME/lib/error_prone_annotations-2.2.0.jar:$APP_HOME/lib/j2objc-annotations-1.1.jar:$APP_HOME/lib/animal-sniffer-annotations-1.17.jar:$APP_HOME/lib/antlr-2.7.7.jar
CLASSPATH=$APP_HOME/lib/jadx-cli-1.1.0.jar:$APP_HOME/lib/jadx-core-1.1.0.jar:$APP_HOME/lib/dx-1.16.jar:$APP_HOME/lib/android-29-clst.jar:$APP_HOME/lib/android-29-res.jar:$APP_HOME/lib/logback-classic-1.2.3.jar:$APP_HOME/lib/slf4j-api-1.7.29.jar:$APP_HOME/lib/baksmali-2.3.4.jar:$APP_HOME/lib/smali-2.3.4.jar:$APP_HOME/lib/util-2.3.4.jar:$APP_HOME/lib/jcommander-1.78.jar:$APP_HOME/lib/asm-7.2.jar:$APP_HOME/lib/annotations-18.0.0.jar:$APP_HOME/lib/gson-2.8.6.jar:$APP_HOME/lib/dexlib2-2.3.4.jar:$APP_HOME/lib/guava-28.1-jre.jar:$APP_HOME/lib/logback-core-1.2.3.jar:$APP_HOME/lib/antlr-runtime-3.5.2.jar:$APP_HOME/lib/stringtemplate-3.2.1.jar:$APP_HOME/lib/failureaccess-1.0.1.jar:$APP_HOME/lib/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:$APP_HOME/lib/jsr305-3.0.2.jar:$APP_HOME/lib/checker-qual-2.8.1.jar:$APP_HOME/lib/error_prone_annotations-2.3.2.jar:$APP_HOME/lib/j2objc-annotations-1.3.jar:$APP_HOME/lib/animal-sniffer-annotations-1.18.jar:$APP_HOME/lib/antlr-2.7.7.jar

# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
Expand Down Expand Up @@ -109,8 +125,8 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi

# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
Expand Down Expand Up @@ -138,19 +154,19 @@ if $cygwin ; then
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
i=`expr $i + 1`
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi

Expand All @@ -159,14 +175,9 @@ save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
APP_ARGS=`save "$@"`

# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $JADX_OPTS -classpath "\"$CLASSPATH\"" jadx.cli.JadxCLI "$APP_ARGS"

# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi

exec "$JAVACMD" "$@"
Loading

0 comments on commit c05b561

Please sign in to comment.