문제

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 스크립트

dex2jar 문서

2 단계:

JD-Gui에서 항아리를 엽니 다

The decompiled source

다른 팁

다소 명확히하기 위해, 당신이 달성하고자하는 것에 따라 여기서 가져갈 두 가지 주요 경로가 있습니다.

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 홈페이지

방법 및 일부 설명을 설치하십시오. 설치.

그것은 최고의 시장 앱의 보안에 대한 매우 흥미로운 연구에 사용되었습니다 (실제로 호기심이없는 경우에는 관련이 없습니다). 안드로이드 애플리케이션 보안 설문 조사

나는 사용했다

  1. dex2jar + jd-gui
  2. javadecompilers.com
  3. anjarify
  4. apktool

그러나 아무도 Google의 자체 도구를 능가하지 않습니다

1)Android Studio 2.X :빌드> APK 분석enter image description here

2)Android Studio 3.0 :프로필 또는 디버그 APKenter image description here enter image description here

APK 파일을 다운로드한 후 편집 가능한 자바 코드/문서를 얻으려면 다음 단계를 수행해야 합니다.

  1. apk 파일을 zip으로 변환하세요(다운로드를 시작하는 동안 "저장" 옵션을 사용하지 말고 "다른 이름으로 저장"을 사용하여 확장자를 .zip으로 언급하세요). 이렇게 하면 APKTOOL을 피할 수 있습니다...
  2. zip 파일을 추출하면 somefilename.dex를 찾을 수 있습니다.이제 dex -> .class를 변환해야 합니다.
  3. 그렇게 하려면 "dex2jar"이 필요합니다(다음에서 다운로드할 수 있습니다). http://code.google.com/p/dex2jar/ , 추출한 후 명령 프롬프트에서 다음과 같이 언급해야 합니다. [D:\dex2jar-0.09>dex2jar somefilename.dex] (somefilename.dex는 dex2jar을 보관한 폴더와 동일한 폴더에 있어야 합니다.)
  4. 다음에서 Jad를 다운로드하세요. http://www.viralpatel.net/blogs/download/jad/jad.zip 그리고 그것을 추출하십시오.추출되면 "jad.exe" 및 "Readme.txt"와 같은 두 개의 파일을 볼 수 있습니다(때때로 "jad.exe" 대신 "jad.txt"가 있을 수 있으므로 실행하려면 확장자 이름을 as.exe로 바꾸면 됩니다).
  5. 마지막으로 명령 프롬프트에서 다음과 같이 언급해야 합니다. [D:\jad>jad -sjava 파일 이름.클래스] 클래스 파일을 편집 가능한 Java 문서로 구문 분석합니다.

와 함께 dedexer, 당신은 그것을 분해 할 수 있습니다 .dex Dalvik 바이트 코드로 파일 (.ddx).

내가 아는 한 Java로 향하는 것은 불가능합니다.
Dalvik 바이트 코드에 대해 읽을 수 있습니다 여기.

안드로이드 리버스 엔지니어링이 가능합니다 . 다음 단계를 따라 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

도구

프로세스

  1. 다운로드 Jadx-0.9.0.zip, 압축을 풀어주십시오 bin 폴더는 명령 줄을 볼 수 있습니다 jadx 또는 GUI 버전 jadx-gui, GUI 버전을 실행하려면 더블 클릭 : jadx-gui

  1. 열려 있는 dex 파일

그런 다음 Java 소스 코드를 표시 할 수 있습니다.

  1. 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

도구

프로세스

여기 데모 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 단계로 수행 할 수 있습니다.

이 보석은 필요한 도구의 설치조차 자동으로 이러한 작업을 수행합니다.

  1. APK 파일을 zip으로 변환합니다
  2. 파일을 압축 해제하십시오
  3. classs.dex를 추출하십시오
  4. Dex를 사용하여 JAR을 사용하여 클래스를 변환합니다 .DEX는 JAR 파일로
  5. Jadx GUI를 사용하여 JAR 파일을 Java 소스 코드로 엽니 다.

안드로이드 앱을 디 컴파일하는 가장 쉬운 방법은 이름이 지정된 앱을 다운로드하는 것입니다. Showjava Playstore에서. 응용 프로그램 목록에서 해제 해야하는 응용 프로그램 만 선택하십시오. 앱을 디 컴파일하는 데 사용할 수있는 세 가지 디 컴파일러가 있습니다.

CFR 0.110, JADX 0.6.1 또는 FERNFLOWER (분석 디 컴파일러).

dex2jar를 다운로드하려는 경우 apk_grabber 파이썬 스크립트 APK를 JAR 파일로 디 컴파일하려면. 그런 다음 JD-Gui로 읽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top