programing

DEX를 Java 소스 코드로 디컴파일

bestcode 2022. 7. 21. 00:36
반응형

DEX를 Java 소스 코드로 디컴파일

Android DEX(VM 바이트 코드) 파일을 해당 Java 소스 코드로 디컴파일하려면 어떻게 해야 합니까?

쉬워요

다음 툴을 입수합니다.

  1. 덱스 파일을 jar 파일로 변환하기 위한 dex2jar

  2. jd-gui: jar 내의 Java 파일을 표시합니다.

소스 코드는 dex2jar가 최적화하기 때문에 상당히 읽을 수 있습니다.

순서:

디컴파일 방법은 다음과 같습니다.

순서 1:

test_apk-debug의 class.dex를 변환합니다.apk를 test_apk-syslog_syslog2jar로 설정합니다.항아리

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: Windows 머신의 모든 경우.sh스크립트스크립트는다음으로 대체됩니다로 대체된다..batscripts스크립트

2: Linux/mac에서는 다음 사항을 잊지 마십시오.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

dex2jar 문서

순서 2:

JD-GUI에서 병을 엽니다.

디컴파일된 소스

어느 정도 명확하게 하면, 여기서 무엇을 달성하고 싶은지에 따라, 다음의 2개의 주요한 패스가 있습니다.

Dalvik 바이트 코드(dex)를 읽을 수 있는 Java 소스로 디컴파일합니다.fred가 말한 바와 같이 dex2jar와 jd-gui를 사용하면 이 작업을 쉽게 수행할 수 있습니다.결과 소스는 앱의 기능을 읽고 이해하는 데 유용하지만 100% 사용 가능한 코드를 생성하지는 않습니다.즉, 소스를 읽을 수는 있지만 실제로 수정하고 다시 패키징할 수는 없습니다.소스가 proguard에 의해 난독화되어 있는 경우 결과 소스 코드를 풀기가 상당히 어려워집니다.

다른 주요 대안은 바이트 코드를 정확히 이 목적을 위해 설계된 어셈블리 언어인 smali로 분해하는 것입니다.가장 쉬운 방법은 apktool을 사용하는 것입니다.apktool을 설치하면 apk 파일을 가리키기만 하면 응용 프로그램에 포함된 각 클래스의 smali 파일을 얻을 수 있습니다.새로운 Java 소스에서 smali를 생성함으로써 smali를 읽고 수정할 수도 있고 클래스 전체를 대체할 수도 있습니다(이를 위해 javac을 사용하여 .java 소스를 .class 파일로 컴파일하고 Android의 dx 컴파일러를 사용하여 .dex 파일로 변환한 다음 baksmali(smali disassembly)를 사용하여 .dex 파일로 변환할 수도 있습니다.질문에서 d.여기에 지름길이 있을 수 있습니다.)작업이 완료되면 apk를 다시 apktool로 쉽게 패키징할 수 있습니다.apktool은 결과 apk에 서명하지 않으므로 다른 Android 어플리케이션과 마찬가지로 관리해야 합니다.

smali 루트를 사용하는 경우 APK Studio를 사용해 보는 것이 좋습니다.APK Studio는 위의 절차 중 일부를 자동화하여 APK를 디컴파일 및 재컴파일하여 디바이스에 설치하는 데 도움이 됩니다.

즉, 읽기 쉽지만 돌이킬 수 없는 Java로 디컴파일하거나 smali로 디어셈블리하는 방법이 선택됩니다.이거는 읽기 어렵지만 변경된 앱을 변경 및 재패키지하는 데 훨씬 유연합니다.어떤 접근방식을 선택할지는 무엇을 달성하느냐에 따라 달라집니다.

마지막으로 도전의 제안도 주목할 만하다.이것은 .dex 및 .apk 파일을 java.class 파일로 변환하기 위한 리타겟팅 도구입니다.이것에 의해, 일반적인 Java 스태틱 분석 툴을 사용해 분석할 수 있습니다.

실제로 다음 사이트를 방문하실 것을 권장합니다.https://github.com/JesusFreke/smali

DEX 파일을 위한 가장 뛰어난 리버스 엔지니어링 도구인 BAKSMALI를 제공합니다.그것은 유명한 안드로이드용 ROM을 만든 JesusFreke에 의해 만들어졌다.

부터기 때문에Dheeraj Bhaskar의 답 비교적 많은 과거입니다.오래된 것입니다 비교적님의 답변은.

다음은 저의 최신(2019년) 답변입니다.

메인 로직

부터에서dex로.java sourcecode현재:해결책 2종류의 가지고 있다.에는 현재 다음 두 가지 솔루션이 있습니다.

  • One Step 변환 : "Direct converted : " " "dex로로 합니다.java sourcecode
  • Two Step convert : 첫 : : : 。dex로로 합니다.jar convert , 「」jar로로 합니다.java sourcecode

솔루션:dex에에로 java sourcecode

도구들

과정

  1. jadx-0.9.0.zip을 다운로드하여 압축을 푼 후bin에는 명령줄 " " " 가 됩니다.jadx 버전 GUIjadx-gui 클릭하여 버전을 GUI 버전은 " " " " " 입니다.jadx-gui

  1. dex

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

  1. File->save as gradle project

자바 소스 코드를 취득했습니다.


2단계 솔루션

1: 서 1:dex로로 합니다.jar

도구들

과정

다운로드 dex2jar zip, 압축 해제d2j-dex2jar.sh 그럼아니다,아니다,아니다,아니다,아니다,아니다.

  • apk로로 합니다.jarsh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
  • dex로로 합니다.jarsh 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: 서 2 2:jar로로 합니다.java sourcecode

도구들

과정

데모 ★★★★★Procyon jar source code jarva "jar" java "java " " " :

다운로드 procyon-timeoutiler-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를 사용하여 내보낸 소스 코드를 엽니다.

결론

의 정확성 : " " " " : "JadxProcyonCRFJD-GUI

( : (1단계)Jadx


for more detailed explanation, please refer my online Chinese ebook: 安卓应用的安全和破解

Fred의 답변보다 완전한 버전:

수동 방식

먼저 DEX의 모든 (컴파일된) 클래스를 JAR로 추출하는 도구가 필요합니다.
중국 학생이 만든 'dex2jar'라는 게 있어요.

그런 다음 jd-gui를 사용하여 JAR의 클래스를 소스 코드로 디컴파일할 수 있습니다.
가 몇 optimizations.dex2jar를 입니다.

자동 방식

APKTool을 사용할 수 있습니다.모든 클래스가 자동으로 추출됩니다(.dex ).asrc그런 다음 이진 XML을 사람이 읽을 수 있는 XML로 변환하고 클래스를 분해합니다.
디스어셈블리는 항상 디컴파일보다 강력합니다(특히
JARs!

APKTool에게 APK를 디렉토리로 디코딩하라고 한 다음 원하는 것을 수정하면 됩니다.
마지막으로 APK로 인코딩합니다.그게 다예요.

중요: APKTool 분해.디컴파일도 안 돼요
자바어
하지만 Jasmin에 익숙하다면 읽을 수도 있고 편집할 수도 있을 것입니다.
Java 소스를 원하는 경우 Manual 방식으로 진행하십시오.

코드가 수 요.dex2jar/apktool특히 루프가 두드러집니다.이를 피하기 위해 jadx를 사용합니다.jadx는 dalvik 바이트 코드를 자바 소스 코드로 디컴파일합니다..jar/.classdex2jar를 사용하는 것 (apktool dex dex2jar 、 apktool ) 。을 사용법GUI 'GUI' 'GUI' 'GUI'해!!

사용한 적이 있다

  1. dex2jar + jd-gui
  2. javadecompilers.com
  3. 금지하다
  4. 앱툴

그러나 구글 자체 툴을 능가하는 것은 없다.

1) Android Studio 2.x: build> apk 분석

2) Android Studio 3.0: 프로파일 또는 디버깅 APK

아무도 이에 대해 언급하지 않았기 때문에 DED homepage라는 툴이 하나 더 많은 툴이 있습니다.

사용법과 몇 가지 설명을 설치합니다.인스톨

상위 시장 앱의 보안에 대한 흥미로운 연구에 사용되었습니다(궁금할 뿐 실제로 관련이 있는 것은 아닙니다).Android 응용 프로그램 보안 조사

APK 파일을 다운로드한 후 편집 가능한 Java 코드/문서를 가져오려면 다음 절차를 수행해야 합니다.

  1. 이렇게 함으로써 APK 파일을 zip으로 변환합니다(다운로드 시작 시 "save" 옵션이 아닌 "save" 옵션을 사용하여 확장자를 .zip으로 표시). APKTOOL을 피할 수 있습니다.
  2. zip 파일을 압축 해제하면 몇 가지 파일명.dex를 찾을 수 있으므로 dex -> .class를 변환해야 합니다.
  3. 그러기 위해서는 "filename2jar" (해동 후 http://code.google.com/p/dex2jar/ 에서 다운로드 할 수 있습니다)명령 프롬프트에서 [D:\dex2jar-0.09>dex2jar somefilename.jar] (일부 filename.jar는 dex2jar를 보관하고 있는 폴더 내에 있어야 합니다.)
  4. http://www.viralpatel.net/blogs/download/jad/jad.zip에서 jad를 다운로드하여 압축을 풉니다.압축을 풀면 "jad.exe" 및 "Readme"와 같은 두 개의 파일을 볼 수 있습니다.txt" (때로는 "jad.exe" 대신 "jad.txt"가 있을 수 있으므로 확장자 이름을 as.exe로 변경해 실행합니다.)
  5. 마지막으로 명령 프롬프트에서 [D:\jad>jad -sjava yourfilename.class]와 같이 지정해야 합니다.클래스 파일은 편집 가능한 Java 문서로 해석됩니다.

Android Reverse Engineering이 가능합니다.apk 파일에서 .java 파일을 가져오는 절차는 다음과 같습니다.

스텝1. dex2jar 사용

  • .apk 파일에서 .jar 파일을 생성합니다.
  • : " " " :dex2jar sampleApp.apk

스텝 2. JD-GUI를 사용한 .jar의 디컴파일

  • .class 파일을 디컴파일합니다.즉, APK에서 .class 파일을 난독화합니다.

Dedexer를 사용하면 Dedexer의.dex 코드dalvik 바이트 코드)에 합니다..ddx를 참조해 주세요.

자바로의 디컴파일은 제가 알기로는 불가능합니다.
Dalvik 바이트 코드에 대한 내용은 여기를 참조하십시오.

패키지 「Debian」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.dexApk + + ap :

$ androdd -i app.apk -o ./dir-for-output

Apk 파일은 Java 아카이브(JAR)에 지나지 않습니다.아카이브(archive)에서 파일을 추출 방법은 다음과 같습니다.

$ 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 Developers 포럼에 있는 것이 가장 좋습니다.

JADX(https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler),는 DEX를 디컴파일하기 위한 완벽한 도구입니다.

네, (my:0) 새로운 사이트 http://www.javadecompilers.com/apk/에서도 온라인으로 이용하실 수 있습니다.

이것은, 다음의 5개의 스텝으로 실행할 수 있습니다.

이 보석은 필요한 도구의 설치까지 자동으로 수행합니다.

  1. apk 파일을 zip으로 변환하다
  2. 파일을 압축 해제하다
  3. 추출 classes.classes에서 추출
  4. dex를 사용하여 classes.dar 파일을 jar 파일로 변환합니다.
  5. jadx gui를 사용하여 jar 파일을 Java 소스 코드로 엽니다.

Android 앱을 디컴파일하는 가장 쉬운 방법은 플레이스토어에서 ShowJava라는 을 다운로드하는 것입니다.어플리케이션 목록에서 디컴파일해야 하는 애플리케이션을 선택하면 됩니다.앱을 디컴파일하기 위해 사용할 수 있는 디컴파일러는 세 가지가 있습니다.즉, 다음과 같습니다.

CFR 0.110, JaDX 0.6.1 또는 FernFlower(분석용 디컴파일러)

dex2jar를 다운로드하지 않을 경우 python 스크립트를 사용하여 apk를 jar 파일로 디컴파일합니다.그럼 jd-gui로 읽어주세요.

언급URL : https://stackoverflow.com/questions/1249973/decompiling-dex-into-java-sourcecode

반응형