DEX를 Java 소스코드로 디컴파일
-
12-09-2019 - |
문제
Android DEX(VM 바이트코드) 파일을 해당 Java 소스코드로 디컴파일하려면 어떻게 해야 합니까?
해결책
그것은 간단합니다
이 도구를 얻으십시오 :
1) dex2jar Dex 파일을 JAR 파일로 변환합니다
2) JD-Gui JAR에서 Java 파일을 보려면
dex2jar가 일부 최적화를 만들기 때문에 소스 코드는 읽을 수 있습니다.
절차:
그리고 여기에 디 컴파일하는 방법에 대한 절차는 다음과 같습니다.
1 단계:
test_apk-debug.apk에서 class.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
메모: Windows 기계에서 모든 것
.sh
스크립트가 대체됩니다.bat
스크립트
2 단계:
JD-Gui에서 항아리를 엽니 다
다른 팁
다소 명확히하기 위해, 당신이 달성하고자하는 것에 따라 여기서 가져갈 두 가지 주요 경로가 있습니다.
Dalvik Bytecode (Dex)를 읽을 수있는 Java 소스로 디코셔요. 당신은 이것을 쉽게 할 수 있습니다 dex2jar 그리고 JD-Gui, 프레드가 언급 한 바와 같이. 결과 소스는 앱의 기능을 읽고 이해하는 데 유용하지만 100% 사용 가능한 코드를 생성하지는 않을 것입니다. 다시 말해, 소스를 읽을 수 있지만 실제로 수정하고 다시 포장 할 수는 없습니다. 소스가 Proguard로 난독 화 된 경우 결과 소스 코드는 실질적으로 풀기가 더 어려울 것입니다.
다른 주요 대안은 바이트 코드를 분해하는 것입니다. 스말리,이 목적을 위해 설계된 조립 언어. 나는 이것을하는 가장 쉬운 방법은 apktool. APKTool을 설치 한 후에는 APK 파일로 가리킬 수 있으며 응용 프로그램에 포함 된 각 클래스에 대해 Smali 파일을 되 찾을 수 있습니다. 새로운 Java 소스에서 Smali를 생성하여 Smali를 읽고 수정하거나 클래스를 전적으로 교체 할 수 있습니다 (이를 위해 .java 소스를 Javac을 사용하여 .class 파일로 컴파일 한 다음 .class 파일을 Android의 .dex 파일로 변환 할 수 있습니다. DX Compiler, 그런 다음 Baksmali (Smali disassembler)를 사용하여 .dex를 .smali 파일로 변환합니다. 이 질문. 여기에 바로 가기가있을 수 있습니다). 완료되면 APKTool로 APK를 다시 포장 할 수 있습니다. APKTool은 결과 APK에 서명하지 않으므로이를 처리해야합니다. 다른 Android 응용 프로그램과 마찬가지로.
Smali Route에 가면 시도하고 싶을 수도 있습니다. APK 스튜디오, 위의 단계 중 일부를 자동화하여 APK를 디 컴파일하고 재 컴파일하고 장치에 설치하는 데 도움이되는 IDE입니다.
요컨대, 당신의 선택은 더 읽기 쉽지만 돌이킬 수 없을 가능성이 높거나 Smali로 분해하는 Java로 분해하는 것입니다. 이는 읽기가 어렵지만 변경하기가 훨씬 더 유연하지만 수정 된 앱을 변경하기가 훨씬 더 유연합니다. 당신이 선택한 접근법은 당신이 달성하고자하는 것에 따라 달라집니다.
마지막으로, 제안 도전 또한 주목합니다. .dex 및 .apk 파일을 Java .class 파일로 변환하여 일반적인 Java 정적 분석 도구를 사용하여 분석 할 수 있도록 리 타겟팅 도구입니다.
실제로 여기에가는 것이 좋습니다.https://github.com/jesusfreke/smali
Baksmali를 제공하며 DEX 파일을위한 가장 우수한 리버스 엔지니어링 도구입니다. 그것은 Android를 위해 명백한 롬을 만든 사람 인 Jessfreke에 의해 만들어졌습니다.
수동 방법
먼저 도구가 필요합니다 발췌 덱스의 모든 (편집 된) 클래스는 항아리에.
전화가 있습니다 dex2jar, 중국 학생이 만든.
그런 다음 사용할 수 있습니다 JD-Gui 에게 디 컴파일 항아리의 클래스는 소스 코드입니다.
dex2jar가 일부 최적화를 적용하기 때문에 결과 소스는 읽을 수 있어야합니다.
자동 방식
당신이 사용할 수있는 apktool. 그것은 할 것입니다 자동으로 모든 클래스 추출 (.dex
), 자원 (.asrc
), 그러면 변환됩니다 이진 XML 에게 인간이 읽을 수있는 XML, 그리고 그것은 또한 것입니다 해부 당신을위한 수업.
분해는 항상 소집하는 것보다 더 강력합니다. 특히 ~와 함께
항아리가 프로 가드로 난독 화되었습니다!
ApkTool에게 말하십시오 풀다 그러면 APK가 디렉토리로 들어갑니다 수정하다 당신이 원하는 것,
그리고 마지막으로 인코딩 APK로 돌아갑니다. 그게 다야.
중요한: apktool 해부. 그렇지 않습니다 디 컴파일.
생성 된 코드는 Java 소스가 아닙니다.
그러나 당신은 그것을 읽을 수 있고, 당신이 익숙하다면 그것을 편집 할 수 있어야합니다. 재스민 향수.
자바 소스를 원한다면 수동 방법.
때로는 사용할 때 코드가 깨질 수 있습니다 dex2jar
/apktool
, 특히 루프에서. 이를 피하려면 사용하십시오 Jadx, Dalvik 바이트 코드를 생성하지 않고 Java 소스 코드로 디 컴파일하는 .jar
/.class
먼저 파일 dex2jar
(apktool은 dex2jar를 사용합니다). 또한 오픈 소스이며 적극적인 개발입니다. 그것은 심지어 Gui-Fanatics를위한 GUI도 있습니다. 시도 해봐!
아무도 이것을 언급하지 않았으므로 하나 더 도구가 있습니다. DED 홈페이지
방법 및 일부 설명을 설치하십시오. 설치.
그것은 최고의 시장 앱의 보안에 대한 매우 흥미로운 연구에 사용되었습니다 (실제로 호기심이없는 경우에는 관련이 없습니다). 안드로이드 애플리케이션 보안 설문 조사
APK 파일을 다운로드한 후 편집 가능한 자바 코드/문서를 얻으려면 다음 단계를 수행해야 합니다.
- 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을 보관한 폴더와 동일한 폴더에 있어야 합니다.)
- 다음에서 Jad를 다운로드하세요. http://www.viralpatel.net/blogs/download/jad/jad.zip 그리고 그것을 추출하십시오.추출되면 "jad.exe" 및 "Readme.txt"와 같은 두 개의 파일을 볼 수 있습니다(때때로 "jad.exe" 대신 "jad.txt"가 있을 수 있으므로 실행하려면 확장자 이름을 as.exe로 바꾸면 됩니다).
- 마지막으로 명령 프롬프트에서 다음과 같이 언급해야 합니다. [D:\jad>jad -sjava 파일 이름.클래스] 클래스 파일을 편집 가능한 Java 문서로 구문 분석합니다.
안드로이드 리버스 엔지니어링이 가능합니다 . 다음 단계를 따라 APK 파일에서 .java 파일을 얻으십시오.
1 단계 . dex2jar 사용
- .apk 파일에서 .jar 파일을 생성합니다
- 명령 :
dex2jar sampleApp.apk
2 단계 . jd-gui를 사용하여 .jar를 디 컴파일합니다
- .class 파일을 분해합니다. 즉, 우리는 얻을 수 있습니다 난독 화 된 . APK에서 다시 돌아 왔습니다.
최근 데비안에는 파이썬 패키지가 있습니다 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 + Decompile에서 :
$ androdd -i app.apk -o ./dir-for-output
APK 파일은 더 이상 JAVA Archive (JAR)가 아닙니다.
$ unzip app.apk -d ./dir-for-output
이 답변의 대부분이 게시 된 이후로 많은 변화가있었습니다. 요즘에는 GUI와 같은 많은 쉬운 도구가 있습니다.
APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit
그들을 찾기에 가장 좋은 곳은 XDA 개발자 포럼에 있습니다.
부터 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
파일
그런 다음 Java 소스 코드를 표시 할 수 있습니다.
File
->save as gradle project
그런 다음 java sourcecode를 얻었습니다.
두 단계 솔루션
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
도구
- JD-Gui: 가장 인기가 있지만
many
코드는 오류가 해석됩니다 - CRF: 인기 있는,
minor
코드는 오류가 해석됩니다 - Procyon: 인기 있는,
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
자세한 설명은 온라인을 참조하십시오 중국인 전자 책 : 安卓 安卓 的 应用 和 破解 破解
Jadx를 시도 할 수 있습니다 (https://bitbucket.org/mstrobel/procyon/wiki/java%20decompiler), 이것은 DEX 디 컴파일을위한 완벽한 도구입니다.
그렇습니다. 온라인으로 (My : 0)) 새 사이트에서도 제공됩니다. http://www.javadecompilers.com/apk/
다음은 5 단계로 수행 할 수 있습니다.
이 보석은 필요한 도구의 설치조차 자동으로 이러한 작업을 수행합니다.
- APK 파일을 zip으로 변환합니다
- 파일을 압축 해제하십시오
- classs.dex를 추출하십시오
- Dex를 사용하여 JAR을 사용하여 클래스를 변환합니다 .DEX는 JAR 파일로
- Jadx GUI를 사용하여 JAR 파일을 Java 소스 코드로 엽니 다.
안드로이드 앱을 디 컴파일하는 가장 쉬운 방법은 이름이 지정된 앱을 다운로드하는 것입니다. Showjava Playstore에서. 응용 프로그램 목록에서 해제 해야하는 응용 프로그램 만 선택하십시오. 앱을 디 컴파일하는 데 사용할 수있는 세 가지 디 컴파일러가 있습니다.
CFR 0.110, JADX 0.6.1 또는 FERNFLOWER (분석 디 컴파일러).
dex2jar를 다운로드하려는 경우 apk_grabber
파이썬 스크립트 APK를 JAR 파일로 디 컴파일하려면. 그런 다음 JD-Gui로 읽습니다.