DEX를 Java 소스 코드로 디 컴파일
Android DEX (VM 바이트 코드) 파일을 해당 Java 소스 코드로 디 컴파일하려면 어떻게해야합니까?
그것은 간단합니다
다음 도구를 얻으십시오.
1) dex2jar 를 사용하여 dex 파일을 jar 파일로 번역
2) jar에서 Java 파일을 보는 jd-gui
소스 코드는 dex2jar가 일부 최적화를 수행하므로 매우 읽기 쉽습니다.
순서:
다음은 디 컴파일하는 방법에 대한 절차입니다.
1 단계:
test_apk-debug.apk의 classes.dex를 test_apk-debug_dex2jar.jar로 변환하십시오.
d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex
참고 : 모든 윈도우 머신에서
.sh
스크립트로 대체.bat
스크립트
2 단계:
JD-GUI에서 항아리 열기
다소 명확히하기 위해 수행하려는 작업에 따라 여기에서 취할 수있는 두 가지 주요 경로가 있습니다.
Dalvik 바이트 코드 (dex)를 읽을 수있는 Java 소스로 디 컴파일하십시오. fred가 언급 했듯이 dex2jar 및 jd-gui를 사용 하여 쉽게 수행 할 수 있습니다 . 결과 소스는 앱의 기능을 읽고 이해하는 데 유용하지만 100 % 사용 가능한 코드를 생성하지는 않습니다. 즉, 소스를 읽을 수 있지만 실제로 수정하고 다시 패키징 할 수는 없습니다. 소스가 proguard로 난독 화 된 경우 결과 소스 코드를 풀기가 훨씬 더 어려워집니다.
또 다른 주요 대안은 바이트 코드를 정확히 이러한 목적으로 설계된 어셈블리 언어 인 smali 로 디스 어셈블하는 것입니다. 이 작업을 수행하는 가장 쉬운 방법은 apktool 입니다. apktool이 설치되면 apk 파일을 가리 키기 만하면 응용 프로그램에 포함 된 각 클래스에 대한 smali 파일이 반환됩니다. 새 Java 소스에서 smali를 생성하여 smali를 읽고 수정하거나 클래스를 완전히 바꿀 수도 있습니다 (이를 수행하려면 javac를 사용하여 .java 소스를 .class 파일로 컴파일 한 다음 Android의 .class 파일을 .dex 파일로 변환 할 수 있습니다. dx 컴파일러를 사용한 다음 baksmali (smali 디스어셈블러)를 사용하여이 질문에 설명 된대로 .dex를 .smali 파일로 변환합니다.. 여기에 바로 가기가있을 수 있습니다.) 완료되면 apktool로 다시 apk 백업을 쉽게 패키징 할 수 있습니다. apktool은 결과 apk에 서명하지 않으므로 다른 Android 애플리케이션과 마찬가지로 처리해야 합니다 .
smali 경로로 이동하는 경우, APK 를 디 컴파일 및 재 컴파일하고 기기에 설치하는 데 도움을주기 위해 위 단계 중 일부를 자동화하는 IDE 인 APK Studio 를 사용해 볼 수 있습니다 .
요컨대, 더 읽기 쉽지만 되돌릴 수없는 자바로 디 컴파일하거나 읽기 어렵지만 수정 된 앱을 변경하고 다시 패키징하는 데 훨씬 더 유연한 smali로 디스 어셈블하는 것입니다. 선택하는 접근 방식은 달성하려는 목표에 따라 다릅니다.
마지막으로 감히 제안하는 것도 주목할 만하다. .dex 및 .apk 파일을 java .class 파일로 변환하여 일반적인 Java 정적 분석 도구를 사용하여 분석 할 수있는 대상 변경 도구입니다.
실제로 여기에가는 것이 좋습니다 : https://github.com/JesusFreke/smali
DEX 파일에 대한 가장 우수한 리버스 엔지니어링 도구 인 BAKSMALI를 제공합니다. 유명한 Android 용 ROM을 만든 사람인 JesusFreke가 만들었습니다.
수동 방법
먼저 DEX의 모든 (컴파일 된) 클래스를 JAR 로 추출 하는 도구가 필요합니다 . 중국 학생이 만든 dex2jar
라는 것이 있습니다.
그런 다음 jd-gui 를 사용 하여 JAR의 클래스를 소스 코드 로 디 컴파일 할 수 있습니다 .
결과 소스는 dex2jar가 일부 최적화를 적용하므로 읽기가 매우 쉬워야합니다.
자동 방법
APKTool 을 사용할 수 있습니다 . 그것은 것이다 자동으로 모든 클래스를 (추출 .dex
) 자원 ( .asrc
), 다음 변환됩니다 바이너리 XML을 에 사람이 읽을 수있는 XML , 또한 것이다 dissassemble 당신을위한 클래스를.
분해 항상 디 컴파일보다 더 강력한 것입니다 특히 와
프로 가드로 난독 JAR 파일!
APKTool에 APK를 디렉터리로 디코딩 한 다음 원하는 항목 을 수정
하고 마지막으로 APK로 다시 인코딩 하도록 지시하십시오. 그게 다야.
중요 : APKTool 은 . 디 컴파일 하지 않습니다 .
생성 된 코드는 Java 소스가 아닙니다.
하지만 jasmin에 익숙하다면 읽을 수 있고 편집 할 수도 있습니다 .
Java 소스를 원하면 수동 방식으로 이동하십시오 .
dex2jar
/를 사용할 때 apktool
, 특히 루프에서 코드가 깨지는 경우 가 있습니다. 이, 사용 방지하기 위해 jadx 생성하지 않고, 자바 소스 코드로, 컴파일 해제 달빅 바이트 코드를 .jar
/의 .class
로 첫 번째 파일을 dex2jar
(apktool 사용 내가 생각 dex2jar)한다. 또한 오픈 소스이며 활발하게 개발 중입니다. GUI 매니아를위한 GUI도 있습니다. 시도 해봐!
아무도 이것을 언급하지 않았기 때문에 하나 더 도구가 있습니다 : DED 홈페이지
설치 방법 및 몇 가지 설명 : 설치 .
이것은 상위 시장 앱의 보안에 대한 매우 흥미로운 연구에 사용되었습니다 (호기심이 있다면 실제로 관련이 없음) : A Survey of Android Application Security
나는 사용했다
- dex2jar + jd-gui
- javadecompilers.com
- 익히다
- Apktool
하지만 구글의 도구를 능가하는 것은 없다
1) Android Studio 2.x : 빌드> APK 분석
2) Android Studio 3.0 : 프로필 또는 디버그 APK
APK 파일을 다운로드 한 후 편집 가능한 Java 코드 / 문서를 얻으려면 다음 단계를 수행해야합니다.
- apk 파일을 zip으로 변환합니다 (다운로드를 시작하는 동안 "저장"옵션을 사용하지 말고 "다른 이름으로 저장"으로 이동하고 확장자를 .zip으로 언급). 이렇게하면 APKTOOL을 피할 수 있습니다.
- zip 파일을 추출하면 somefilename.dex를 찾을 수 있습니다. 이제 dex-> .class로 변환해야합니다.
- 이렇게하려면 "dex2jar"가 필요합니다 ( http://code.google.com/p/dex2jar/ 에서 다운로드 할 수 있습니다. 압축을 푼 후 명령 프롬프트에서 [D : \ dex2jar-0.09>) dex2jar somefilename.dex] ( somefilename.dex는 dex2jar을 보관하고있는 동일한 폴더 안에 있어야합니다.)
- http://www.viralpatel.net/blogs/download/jad/jad.zip 에서 jad를 다운로드 하고 압축을 풉니 다. 압축이 풀리면 "jad.exe"및 "Readme.txt"와 같은 두 개의 파일을 볼 수 있습니다 (때로는 "jad.exe"대신 "jad.txt"가있을 수 있으므로 확장명을 as.exe로 변경하여 실행).
- 마지막으로 명령 프롬프트에서 [D : \ jad> jad -sjava yourfilename.class] 와 같이 언급해야합니다 . 그러면 클래스 파일이 편집 가능한 Java 문서로 구문 분석됩니다.
로 Dedexer , 당신은 분해 할 수 .dex
달빅 바이트 코드로 파일을 ( .ddx
).
내가 아는 한 Java로 디 컴파일하는 것은 불가능합니다. 여기서
dalvik 바이트 코드에 대해 읽을 수 있습니다 .
Android 리버스 엔지니어링이 가능합니다 . 다음 단계에 따라 apk 파일에서 .java 파일을 가져옵니다.
1 단계 . dex2jar 사용
- .apk 파일에서 .jar 파일 생성
- 명령 :
dex2jar sampleApp.apk
2 단계 . JD-GUI를 사용하여 .jar 디 컴파일
- .class 파일을 디 컴파일합니다. 즉, apk에서 난독 화 된 .java를 다시 가져옵니다.
최근 데비안에는 Python 패키지가 있습니다 androguard
.
Description-en: full Python tool to play with Android files
Androguard is a full Python tool to play with Android files.
* DEX, ODEX
* APK
* Android's binary xml
* Android resources
* Disassemble DEX/ODEX bytecodes
* Decompiler for DEX/ODEX files
해당 패키지를 설치합니다.
sudo apt-get install androguard python-networkx
DEX 파일 디 컴파일 :
$ androdd -i classes.dex -o ./dir-for-output
classes.dex
Apk에서 추출 + 디 컴파일 :
$ androdd -i app.apk -o ./dir-for-output
Apk 파일은 Java 아카이브 (JAR)에 불과합니다. 다음을 통해 아카이브에서 파일을 추출 할 수 있습니다.
$ unzip app.apk -d ./dir-for-output
이후 Dheeraj Bhaskar
의 대답은 지난 몇 년 상대적으로 오래되었습니다.
내 최근 (2019 년) 답변은 다음과 같습니다.
주요 논리
에서 dex
까지 java sourcecode
, 현재 두 가지 종류의 솔루션이 있습니다.
One Step
: 직접 변환dex
에java sourcecode
Two Step
: 첫 번째 변환dex
에jar
, 두 번째 변환jar
에java sourcecode
원스텝 솔루션 : dex
직접java sourcecode
도구
방법
- jadx-0.9.0.zip을 다운로드 하고 압축을 풀고
bin
폴더 에서 명령 줄jadx
또는 GUI 버전을 볼 수jadx-gui
있으며 두 번 클릭하여 GUI 버전을 실행합니다.jadx-gui
dex
파일 열기
그런 다음 자바 소스 코드를 표시 할 수 있습니다.
File
->save as gradle project
그런 다음 자바 소스 코드를 얻었습니다.
2 단계 솔루션
1 단계 : dex
에jar
도구
방법
dex2jar zip을 다운로드 하고 압축 을 푼 d2j-dex2jar.sh
다음 :
apk
받는 사람jar
:sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
dex
받는 사람jar
:sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dex
예:
➜ v3.4.8 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.huili.readingclub8825612.dex
dex2jar com.huili.readingclub8825612.dex -> ./com.huili.readingclub8825612-dex2jar.jar
➜ v3.4.8 ll
-rw------- 1 crifan staff 9.5M 3 21 10:00 com.huili.readingclub8825612-dex2jar.jar
-rw------- 1 crifan staff 8.4M 3 19 14:04 com.huili.readingclub8825612.dex
2 단계 : jar
에java sourcecode
도구
방법
여기 데모 Procyon
는 jar를 자바 소스 코드로 변환합니다.
procyon-decompiler-0.5.34.jar 다운로드
그런 다음 구문을 사용합니다.
java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderName
예:
java -jar /Users/crifan/dev/dev_tool/android/reverse_engineering/Procyon/procyon-decompiler-0.5.34.jar -jar com.huili.readingclub8825612-dex2jar.jar -o com.huili.readingclub8825612
편집기 VSCode 를 사용하여 내 보낸 소스 코드를 여는 것은 다음과 같습니다.
결론
변환의 정확성 : Jadx
> Procyon
> CRF
>JD-GUI
사용 권장 : (원스텝 솔루션) Jadx
자세한 설명은 내 온라인 중국어 ebook을 참조하십시오 :安卓 应用 的 安全 和 破解
이 답변의 대부분이 게시 된 이후로 많은 것이 변경되었습니다. 요즘에는 다음과 같이 GUI를 사용하는 쉬운 도구가 많이 있습니다.
APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit
그들을 찾을 수있는 가장 좋은 곳은 XDA 개발자 포럼입니다.
JADX ( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler )를 사용해 볼 수 있습니다 . 이것은 DEX 디 컴파일을위한 완벽한 도구입니다.
그리고 예, (my : 0)) 새 사이트에서 온라인으로 사용할 수도 있습니다 : http://www.javadecompilers.com/apk/
이 작업은 다음 5 단계로 수행 할 수 있습니다.
이 gem은 필요한 도구를 설치해도 자동으로 이러한 작업을 수행합니다.
- apk 파일을 zip으로 변환
- 파일의 압축을 풉니 다
- 그것에서 classes.dex 추출
- dex를 jar로 사용하여 classes.dex를 jar 파일로 변환하십시오.
- jadx gui를 사용하여 jar 파일을 Java 소스 코드로 엽니 다.
Android 앱을 디 컴파일하는 가장 쉬운 방법 은 playstore에서 ShowJava 라는 앱을 다운로드하는 것입니다. 응용 프로그램 목록에서 디 컴파일해야하는 응용 프로그램을 선택하기 만하면됩니다. 앱을 디 컴파일하는 데 사용할 수있는 세 가지 디 컴파일러가 있습니다.
CFR 0.110, JaDX 0.6.1 또는 FernFlower (분석 디 컴파일러).
dex2jar를 다운로드하지 않으려면 apk_grabber
python 스크립트 를 사용하여 apk를 jar 파일로 디 컴파일하십시오. 그런 다음 jd-gui로 읽습니다.
참고 URL : https://stackoverflow.com/questions/1249973/decompiling-dex-into-java-sourcecode
'developer tip' 카테고리의 다른 글
자바 스크립트에서 localStorage를 지우시겠습니까? (0) | 2020.09.30 |
---|---|
Jackson을 사용하여 객체 배열을 역 직렬화하는 방법 (0) | 2020.09.30 |
CSS 클래스가 하나 이상의 다른 클래스를 상속 할 수 있습니까? (0) | 2020.09.30 |
javadoc에서 메소드를 참조하는 방법은 무엇입니까? (0) | 2020.09.29 |
.NET String.Format () : 숫자에 대해 천 자리에 쉼표를 추가합니다. (0) | 2020.09.29 |