JADX
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
- Arch linux
sudo pacman -S jadx
- 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 라이선스에 따라 라이선스가 부여됨