Android DEX (VM 바이트 코드) 파일을 해당 Java 소스 코드로 어떻게 디 컴파일 할 수 있습니까?
Android DEX (VM 바이트 코드) 파일을 해당 Java 소스 코드로 어떻게 디 컴파일 할 수 있습니까?
답변:
다음 도구를 사용하십시오.
1) dex2jar 를 사용하여 dex 파일을 jar 파일로 변환
2) jar에서 Java 파일을 보는 jd-gui
dex2jar가 일부 최적화를 수행하므로 소스 코드를 읽을 수 있습니다.
그리고 디 컴파일하는 방법에 대한 절차는 다음과 같습니다.
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
주 1 : 모든 윈도우 머신에서
.sh
스크립트로 대체.bat
스크립트주 2 : 리눅스 / 맥에 대해 잊지 마세요
sh
나bash
. 전체 명령은 다음과 같아야합니다.
sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
참고 3 : 또한
dex2jar-X.X
디렉토리 에 실행 권한을 추가해야합니다. 예 :sudo chmod -R +x dex2jar-2.0
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 를 사용해 볼 수 있습니다 .
요컨대, 더 읽기 쉽지만 돌이킬 수없는 Java로 디 컴파일하거나 수정하기가 쉽지 않지만 수정 된 응용 프로그램을 다시 패키지하는 데 훨씬 융통성이있는 smali로 분해 할 수 있습니다. 어떤 접근 방식을 선택 하느냐는 달성하고자하는 대상에 따라 다릅니다.
마지막으로, 감히 제안하는 것도 주목할 만하다. .dex 및 .apk 파일을 java .class 파일로 변환하여 일반적인 Java 정적 분석 도구를 사용하여 분석 할 수있는 리 타겟팅 도구입니다.
나는 실제로 여기에가는 것이 좋습니다 : https://github.com/JesusFreke/smali
DEX 파일을위한 가장 훌륭한 리버스 엔지니어링 툴인 BAKSMALI를 제공합니다. Android 용의 유명한 ROM을 만든 JesusFreke가 만든 것입니다.
./apktool d myprogram.apk
. 내 답변을 참조하십시오 .
먼저 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
파일을 먼저 만들지 않고 dalvik 바이트 코드를 Java 소스 코드로 디 컴파일 합니다 dex2jar
(apktool은 dex2jar을 사용합니다). 또한 오픈 소스이며 활발한 개발 중입니다. GUI 광신자에게는 GUI도 있습니다. 시도 해봐!
javac "$(find . -name '*.java')"
입니까?
나는 사용했다
그러나 아무도 구글의 도구를 능가하지 않습니다.
이후 Dheeraj Bhaskar
의 대답은 지난 몇 년 상대적으로 오래되었습니다.
내 최신 (2019 년) 답변은 다음과 같습니다.
에서 dex
~ java sourcecode
까지 현재 두 가지 솔루션이 있습니다.
One Step
: 직접 변환 dex
에java sourcecode
Two Step
: 첫 번째 변환 dex
에 jar
, 두 번째 변환 jar
에java sourcecode
dex
직접에java sourcecode
bin
폴더 에서 명령 행 jadx
또는 GUI 버전을 볼 수 있습니다. GUI 버전 jadx-gui
을 두 번 클릭하여 실행하십시오.jadx-gui
dex
파일 열기그런 다음 Java 소스 코드를 표시 할 수 있습니다.
File
-> save as gradle project
그런 다음 Java 소스 코드를 얻었습니다.
dex
에jar
dex2jar zip , unzip got을 다운로드 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
jar
에java sourcecode
many
코드는 오류를 디 컴파일합니다minor
코드는 디 컴파일 오류no
코드 디 컴파일 오류
여기 데모 Procyon
는 jar를 Java 소스 코드로 변환합니다.
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
권장 사용법 : (1 단계 솔루션) Jadx
더 자세한 설명은, 내 온라인 참조하시기 바랍니다 중국어 전자 책을 : 安卓应用的安全和破解
dex2jar-2.0>d2j-dex2jar.bat -f D:\android\some_dex_file.dex
예외가 발생합니다.java.io.IOException: the src file not a .dex or zip file
d2j-dex2jar.bat "D:\android\some_dex_file.dex"
괜찮아요?
>d2j-dex2jar.bat file.dex
했지만 괜찮습니다. 내 .dex
파일이에서 복사 되었기 때문일 수 있습니다 dalvik-cache
.
dex is copied from dalvik-cache
것입니다dex is decompiled from apk
APK 파일을 다운로드 한 후 편집 가능한 Java 코드 / 문서를 얻으려면 다음 단계를 수행해야합니다.
안드로이드 리버스 엔지니어링이 가능합니다 . 다음 단계에 따라 apk 파일에서 .java 파일을 가져 오십시오.
1 단계 . dex2jar 사용
dex2jar sampleApp.apk
2 단계 . JD-GUI를 사용하여 .jar 디 컴파일
최근 데비안은 파이썬 패키지를 가지고 있습니다 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 파일은 JAR (Java Archive)에 지나지 않습니다. 다음을 통해 아카이브에서 파일을 추출 할 수 있습니다.
$ unzip app.apk -d ./dir-for-output
JADX ( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler )를 사용해보십시오 . 이것은 DEX 디 컴파일을위한 완벽한 도구입니다.
그리고 그렇습니다. (my : 0)) 새 사이트 http://www.javadecompilers.com/apk/ 에서도 온라인으로 제공됩니다 .
다음 다섯 단계로 수행 할 수 있습니다.
이 보석은 필요한 도구를 설치하더라도 자동으로 이러한 작업을 수행합니다.
dex2jar를 다운로드하지 않으려면 apk_grabber
python 스크립트 를 사용하여 apk를 jar 파일로 디 컴파일하십시오. 그런 다음 jd-gui로 읽습니다.