[java] 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

주 1 : 모든 윈도우 머신에서 .sh스크립트로 대체 .bat스크립트

주 2 : 리눅스 / 맥에 대해 잊지 마세요 shbash. 전체 명령은 다음과 같아야합니다.

sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk 

참고 3 : 또한 dex2jar-X.X디렉토리 에 실행 권한을 추가해야합니다. 예 :sudo chmod -R +x dex2jar-2.0

dex2jar 문서

2 단계:

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

디 컴파일 된 소스


답변

다소 명확하게 설명하기 위해 달성하려는 목표에 따라 여기에서 취할 수있는 두 가지 주요 경로가 있습니다.

Dalvik 바이트 코드 (dex)를 읽을 수있는 Java 소스로 디 컴파일하십시오. fred가 언급 했듯이 dex2jarjd-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가 만든 것입니다.


답변

프레드대답 의 더 완전한 버전 :

수동 방법

먼저 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도 있습니다. 시도 해봐!


답변

나는 사용했다

  1. dex2jar + jd-gui
  2. javadecompilers.com
  3. 포위하다
  4. APKTool

그러나 아무도 구글의 도구를 능가하지 않습니다.

1) Android Studio 2.x :
빌드> APK 분석
여기에 이미지 설명을 입력하십시오

2) Android Studio 3.0 :
프로파일 또는 디버그 APK
여기에 이미지 설명을 입력하십시오
여기에 이미지 설명을 입력하십시오


답변

아무도 이것을 언급하지 않았으므로 도구가 하나 더 있습니다. DED 홈페이지

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

그것은 최고 시장 앱의 보안에 대한 흥미로운 연구에서 사용되었습니다 (정말 궁금하지 않은 경우 실제로 관련이 없음) : Android 응용 프로그램 보안 조사