JADX

Build status Alerts from lgtm.com semantic-release Maven Central License

jadx - Dex to Java 디컴파일러

Android Dex 및 Apk 파일에서 Java 소스 코드를 생성하기 위한 명령줄 및 GUI 도구

대부분의 경우 jadx 는 코드의 100%를 모두 디컴파일할 수 없으므로 오류가 발생합니다. 해결 방법은 문제 해결 가이드 를 확인하세요 .

Main features:

  • APK, dex, aar, aab 및 zip 파일에서 Dalvik 바이트코드를 Java 클래스로 디컴파일
  • AndroidManifest.xml 및 기타 resources.arsc 디코딩
  • deobfuscator included

jadx-gui features:

  • 강조 표시된 구문으로 디컴파일된 코드 보기
  • 선언으로 이동
  • find usage
  • 전체 텍스트 검색
  • smali 디버거, 설정 및 사용에 대한 Wiki 페이지 확인

Jadx-gui 키 바인딩은 여기 에서 찾을 수 있습니다.

여기에서 작동 중인 기능을 확인하십시오. jadx-gui 기능 개요

Download

압축을 푼 zip 파일을 다운로드한 후 bin 디렉토리로 이동하여 다음을 실행합니다.

  • jadx - 명령줄 버전
  • jadx-gui - UI 버전

Windows에서 두 번 클릭하여 .bat 파일 실행
참고: Java 11 이상 64비트 버전을 설치했는지 확인하십시오. Windows의 경우 oracle.com 에서 다운로드할 수 있습니다 (x64 설치 프로그램 선택).

Install

  1. Arch linux
        sudo pacman -S jadx
  2. macOS
        brew install jadx

jadx를 라이브러리로 사용

Java 프로젝트에서 jadx를 사용할 수 있습니다. Wiki 페이지 에서 세부 정보를 확인하십시오.

소스에서 빌드

JDK 8 이상이 설치되어 있어야 합니다.

git clone https://github.com/skylot/jadx.git
cd jadx
./gradlew dist

(Windows에서는 gradlew.bat 대신 ./gradlew 사용 )

jadx 실행을 위한 스크립트는 build/jadx/bin 에 배치되고 build build/jadx-<version>.zip 에도 압축됩니다.

Usage

jadx[-gui] [options] <input files> (.apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc, .aab)
options:
  -d, --output-dir - 출력 디렉토리
  -ds, --output-dir-src - 소스의 출력 디렉토리
  -dr, --output-dir-res - 리소스의 출력 디렉토리
  -r, --no-res - 리소스를 디코딩하지 않음
  -s, --no-src - 소스 코드를 디컴파일하지 않음
  --single-class - 단일 클래스, 전체 이름, 원시 또는 별칭을 디컴파일합니다.
  --single-class-output - 단일 클래스를 디컴파일하는 경우 쓰기 위한 파일 또는 디렉토리
  --output-format - 'java' 또는 'json'일 수 있음, 기본값: java
  -e, --export-gradle - 안드로이드 gradle 프로젝트로 저장
  -j, --threads-count - 처리 스레드 수, 기본값: 4
  -m, --decompilation-mode - 코드 출력 모드:
                                         'auto' - trying best options (default)
                                         'restructure' - restore code structure (normal java code)
                                         'simple' - simplified instructions (linear, with goto's)
                                         'fallback' - raw instructions without modifications
  --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
  --add-debug-lines                   - add comments with debug line numbers if available
  --no-inline-anonymous               - disable anonymous classes inline
  --no-inline-methods                 - disable methods inline
  --no-replace-consts                 - don't replace constant value with matching constant field
  --escape-unicode - 문자열에서 라틴 문자가 아닌 문자를 이스케이프합니다(\u 사용).
  --respect-bytecode-access-modifiers - 원래 액세스 수정자를 변경하지 마십시오.
  --deobf - 난독화 해제 활성화
  --deobf-min - 이름의 최소 길이, 더 짧으면 이름 변경, 기본값: 3
  --deobf-max - 이름의 최대 길이, 더 길면 이름 변경, 기본값: 64
  --deobf-cfg-file - 난독화 맵 파일, 기본값: '.jobf' 확장자를 가진 입력 파일과 동일한 디렉토리 및 이름
  --deobf-cfg-file-mode - 난독화 맵 파일 핸들의 모드 설정:
                                         'read' - read if found, don't save (default)
                                         'read-or-save' - read if found, save otherwise (don't overwrite)
                                         'overwrite' - don't read, always save
                                         'ignore' - don't read and don't save
  --deobf-rewrite-cfg                 - set '--deobf-cfg-file-mode'를 '덮어쓰기'(더 이상 사용되지 않음)
  --deobf-use-sourcename - 소스 파일 이름을 클래스 이름 별칭으로 사용
  --deobf-parse-kotlin-metadata - kotlin 메타데이터를 클래스 및 패키지 이름으로 구문 분석
  --use-kotlin-methods-for-var-names - kotlin 내장 메서드를 사용하여 변수 이름 변경, 값: 비활성화, 적용, 적용 및 숨기기, 기본값: 적용
  --rename-flags - 수정 옵션(쉼표로 구분된 목록):
                                         'case' - fix case sensitivity issues (according to --fs-case-sensitive option),
                                         'valid' - rename java identifiers to make them valid,
                                         'printable' - remove non-printable chars from identifiers,
                                        or single 'none' - to disable all renames
                                        or single 'all' - to enable all (default)
  --fs-case-sensitive - 파일 시스템을 대소문자 구분, 기본적으로 false로 처리
  --cfg - 저장 메소드 제어 흐름 그래프를 도트 파일에 저장
  --raw-cfg - 저장 방법 제어 흐름 그래프(원시 지침 사용)
  -f, --fallback - '--decompilation-mode'를 'fallback'으로 설정(더 이상 사용되지 않음)
  --use-dx - dx/d8을 사용하여 Java 바이트 코드 변환
  --comments-level - 코드 주석 수준 설정, 값: 오류, 경고, 정보, 디버그, 사용자 전용, 없음, 기본값: 정보
  --log-level - 로그 수준 설정, 값: 자동, 진행, 오류, 경고, 정보, 디버그, 기본값: 진행
  -v, --verbose - 자세한 출력(--log-level을 DEBUG로 설정)
  -q, --quiet - 출력 끄기(--log-level을 QUIET으로 설정)
  --version - jadx 버전 인쇄
  -h, --help - 이 도움말 인쇄

Plugin options (-P<name>=<value>):
  1) dex-input (Load .dex and .apk files)
    -Pdex-input.verify-checksum       - Verify dex file checksum before load, values: [yes, no], default: yes
  2) java-convert (Convert .jar and .class files to dex)
    -Pjava-convert.mode               - Convert mode, values: [dx, d8, both], default: both
    -Pjava-convert.d8-desugar         - Use desugar in d8, values: [yes, no], default: no

Examples:
  jadx -d out classes.dex
  jadx --rename-flags "없음" classes.dex
  jadx --rename-flags "유효하고 인쇄 가능한" classes.dex
  jadx --log-level 오류 app.apk
  jadx -Pdex-input.verify-checksum=no app.apk

이 옵션은 명령줄에서 실행되는 jadx-gui에서도 작동하고 기본 설정 대화 상자의 옵션을 재정의합니다.

Troubleshooting

위키 페이지 문제 해결 Q&A 를 확인하세요.

Contributing

이 프로젝트를 지원하기 위해 다음을 수행할 수 있습니다.

  • 귀하에게 중요한 새로운 기능/최적화에 대한 생각 게시
  • 디컴파일 문제를 제출하고 진행하기 전에 읽으십시오: 공개 문제
  • 풀 리퀘스트를 열려면 다음 규칙을 따르십시오. 풀 리퀘스트 프로세스

Apache 2.0 라이선스에 따라 라이선스가 부여됨