랩톱의 하드 드라이브가 갑자기 작동을 멈추고 지난 2 개월 동안 작업했던 앱의 모든 소스 코드가 손실되었습니다. 내가 가진 것은 친구에게 보낼 때 이메일에 저장된 APK 파일입니다.
이 APK 파일에서 소스 코드를 추출 할 수있는 방법이 있습니까?
javac -decompile
SO 지침에 맞을 수 있습니다 . 대답은 질문이 아닌 주제가 아닌 것으로 보입니다 .
랩톱의 하드 드라이브가 갑자기 작동을 멈추고 지난 2 개월 동안 작업했던 앱의 모든 소스 코드가 손실되었습니다. 내가 가진 것은 친구에게 보낼 때 이메일에 저장된 APK 파일입니다.
이 APK 파일에서 소스 코드를 추출 할 수있는 방법이 있습니까?
javac -decompile
SO 지침에 맞을 수 있습니다 . 대답은 질문이 아닌 주제가 아닌 것으로 보입니다 .
답변:
간단한 방법 : 온라인 도구 http://www.javadecompilers.com/apk를 사용 하고 apk를 업로드하고 소스 코드를 얻으십시오.
.apk 파일 디코딩 절차, 단계별 방법 :
새 폴더를 만들고 디코딩하려는 .apk 파일을 복사하십시오.
이제이 .apk 파일의 확장자를 .zip으로 바꾸고 (예 : filename.apk에서 filename.zip으로 이름 바꾸기) 저장하십시오. 이제 classes.dex 파일 등에 액세스 할 수 있습니다.이 단계에서는 드로어 블을 볼 수 있지만 xml 및 java 파일은 볼 수 없으므로 계속하십시오.
이제이 .zip 파일을 같은 폴더 (또는 NEW FOLDER)에 추출하십시오.
dex2jar를 다운로드 하여 동일한 폴더 (또는 NEW FOLDER)에 추출하십시오.
classes.dex 파일을 dex2jar 폴더로 이동하십시오.
이제 명령 프롬프트를 열고 디렉토리를 해당 폴더 (또는 NEW FOLDER)로 변경하십시오. 그런 다음 d2j-dex2jar classes.dex
(Mac 터미널 또는 우분투 쓰기 ./d2j-dex2jar.sh classes.dex
)을 입력하고 Enter를 누르십시오. 이제 같은 폴더에 classes.dex.dex2jar 파일이 있습니다.
java decompiler를 다운로드 하고 jd-gui를 두 번 클릭하고 열린 파일을 클릭 한 다음 해당 폴더에서 classes.dex.dex2jar 파일을 엽니 다. 이제 클래스 파일을 얻습니다.
이 클래스 파일을 모두 src 이름으로 저장하십시오 (jd-gui에서 파일-> 모든 소스 저장을 클릭하십시오). 이 단계에서 Java 소스를 얻지 만 .xml 파일을 여전히 읽을 수 없으므로 계속하십시오.
이제 다른 새 폴더를여십시오
디코딩하려는 .apk 파일을 넣습니다.
최신 버전의 apktool AND apktool 설치 창을 다운로드하여 (동일한 링크에서 다운로드 할 수 있음) 동일한 폴더에 배치하십시오.
명령 창을 엽니 다
이제 같은 명령을 실행 하십시오 (여기apktool if framework-res.apk
가 없으면 여기에 가져옵니다 ).
apktool d myApp.apk
여기서 myApp.apk는 디코딩하려는 파일 이름을 나타냅니다.
이제 해당 폴더에 파일 폴더가 있으며 apk의 xml 파일을 쉽게 읽을 수 있습니다.
단계가 아니며 두 폴더 (이 경우 새 폴더)의 내용을 단일 폴더로 복사하면됩니다.
그리고 소스 코드를 즐기십시오 ...
framework-res.apk
. 여기
이것은 누군가가 위의 설명에 갇힌 경우를 대비 한 대체 설명입니다. 다음 단계를 수행하십시오.
apktool.bat
(또는 apktool
Linux 용)과 apktool_<version>.jar
에서 http://ibotpeaches.github.io/Apktool/install/을 apktool.jar
두 파일을 같은 폴더에 넣습니다.cmd.exe
)를 열고 해당 폴더로 변경하십시오. Java 환경이 설치되어 있는지 확인하십시오 (Linux의 경우 필요한 라이브러리에 대한 참고 사항도 확인하십시오)apktool decode [apk file]
중간 결과 : 리소스 파일,AndroidManifest.xml
중간 결과 :classes.dex
dex2jar-0.0.9.15.zip
에서 다운로드 및 추출classes.dex
위에 dex2jar.bat
(또는 입력 <path_to>\dex2jar.bat classes.dex
DOS 창에서, 리눅스 사용 dex2jar.sh
)
중간 결과 :classes_dex2jar.jar
classes_dex2jar.jar
(사용되는 디 컴파일러에 따라 선택 될 수 있음)결과 : 소스 코드
참고 : 타사 패키지를 디 컴파일 할 수 없습니다. 이 안내서는 APK 파일에서만 개인 소스 코드를 복구하기위한 것입니다. 마지막으로 결과 코드가 난독 화 될 가능성이 높습니다
apktool
반환 smali
합니까? java
파일 을 얻는 방법 ?
APK
파일 을 디 컴파일 할 수 있지만 큰 문제가 발생할 수 있습니다 .
작성한 코드를 반환하지 않습니다. 대신 임의의 이름이 주어진 변수와 임의의 이름이 주어진 함수와 함께 컴파일러가 인라인 된 모든 것을 반환합니다. 다시 컴파일하는 것보다 코드를 디 컴파일하고 복원하는 데 시간이 훨씬 더 걸릴 수 있습니다.
슬프게도, 이와 같은 것들이 많은 프로젝트를 죽였습니다.
앞으로 CVS , SVN 및 git 등과 같은 버전 제어 시스템을 배우는 것이 좋습니다 .
그리고 그것을 백업하는 방법.
Play 스토어 에는 APK (시스템 응용 프로그램도)를 디 컴파일하고 스마트 폰에서 바로 소스 코드를 볼 수 있는 새로운 응용 프로그램도 있습니다. 파일을 SD 카드에 저장하여 컴퓨터에서도 볼 수 있습니다. 루트 나 다른 것이 필요하지 않습니다.
그냥 설치하고 즐기십시오. 이것이 앱을 디 컴파일하는 가장 쉬운 방법이라고 생각합니다.
apktool 은 가장 좋은 방법입니다. XML을 저장했지만 솔직히 .java 코드에서 어떻게 작동하는지 모르겠습니다.
귀하가 유일한 코더 인 경우에도 코드 저장소를 사용하는 것이 좋습니다. 내 프로젝트에 Project Locker 를 사용 하고 있습니다. 그것은 당신에게 무료 svn 및 git repos를 제공합니다.
이 두 기사의 사용을 결합하는 방법에 대해 설명 apktool
하고 dex2jar
취할 APK
파일을 빌드하고 실행할 수있는 이클립스 프로젝트를 만듭니다.
http://blog.inyourbits.com/2012/11/extending-existing-android-applications.html
http://blog.inyourbits.com/2012/12/extending-existing-android-applications.html
기본적으로 당신 :
apktool
APK에서 리소스 파일을 가져 오기 위해 사용dex2jar
Eclipse가 원하는 형식으로 클래스를 포함하는 jar 파일을 얻는 데 사용하십시오 .JDGui
소스 파일 을 보려면 jar 파일을여십시오.JDGui
Eclipse 내부의 클래스에 넣고 수정하십시오.apktool이 작동합니다. 소스 코드를 추출하기 위해 키 저장소를 알 필요조차 없습니다 (약간 무섭습니다). 주요 단점은 소스가 Java 대신 Smali 형식으로 표시된다는 것입니다. icon 및 main.xml과 같은 다른 파일은 완벽하게 잘 나오므로 적어도 복구 할 가치가 있습니다. 궁극적으로 Java 코드를 처음부터 다시 작성해야합니다.
여기서 apktool을 찾을 수 있습니다 . apktool과 적절한 도우미 (Windows, Linux 또는 Mac OS 용)를 다운로드하기 만하면됩니다. 7-zip과 같은 도구를 사용하여 포장을 푸는 것이 좋습니다.
이를 수행하는 몇 가지 방법이 있습니다.
Android Studio 3.0에서 "프로필 또는 APK 디버그"기능을 사용하십시오.
Android Studio에서 APK를 열고 탐색 할 수 있습니다. 클래스는 smali로 디 컴파일됩니다. 리소스가 추출되지 않고 "정의로 이동", "모든 참조 찾기"및 디버깅과 같은 소스 코드가 없으면 작동하지 않습니다 (android studio 3.0 canary 9). 일부 추가 smali 기능은 smalidea 와 함께 작동 할 수 있습니다 .
jadx 사용 .
Jadx는 주어진 APK의 코드를 Java 소스 파일로 디 컴파일합니다.
apktool 사용 .
Apktool은 주어진 apk에 대한 리소스를 추출하고 코드를 smali로 디 컴파일하는 명령 줄 도구입니다. apktool을 사용하여 다시 컴파일 할 수도 있습니다. 다음은 실제로 사용되는 예입니다.
$ apktool d test.apk
I: Using Apktool 2.2.4 on test.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: 1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
$ apktool b test
I: Using Apktool 2.2.4 on test
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Building resources...
I: Building apk file...
I: Copying unknown files/dir...
소스를 쉽게 볼 수 있습니다.
안드로이드 스튜디오 2.3에서 Build -> Analyze APK -> Select the apk that you want to decompile
.
소스 코드임을 알 수 있습니다.
참조 링크 :
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2
.apk 를 디 컴파일하는 다른 방법을 보여 드리겠습니다 파일 .
" prankul garg 에서 처음 2 단계를 수행 할 수 있습니다 " . 따라서 다른 기회가 있습니다.
3 단계 :
"JD-GUI"를 다운로드하면 쉽게 찾을 수 있습니다. "jd-gui.exe"에서 .jar 파일을 엽니 다 . (파일> 파일 열기> ' .jar 파일을 찾았습니다 '). 이 절차가 끝나면 모든 리소스를 .zip 파일로 저장할 수 있습니다 파일로 .
그래서,
첫 번째 -.apk 파일의 이름 을 .zip
2 - 당신은 디코딩에있는 덱스 원하는 경우 디코딩 (파일 .apk 파일 에 파일 dex2jar을 가능)
3 -JD-GUI로 .jar 파일 을 디코딩해야합니다.
온라인 아래 도구 :
http://www.javadecompilers.com/apk
한 번의 클릭으로 모든 작업을 수행합니다. 디 컴파일 된 .java 파일 + resources + xml (하나의 .zip 파일)로 매우 좋은 디 컴파일러 (jadx는 장소 / 함수에서 자바 코드를 리턴합니다. 안드로이드 어셈블러 / 기계 코드)
이 사이트 https://www.apkdecompilers.com/ 자동으로 수행했습니다.
나는 받아 들인 대답에 언급 된 사이트를 먼저 시도했지만 그게 효과가 없었습니다.
리버스 엔지니어링 타사, 폐쇄 형, 바이너리 Android 앱용 Apktool .
리소스를 거의 원래의 형식으로 디코딩하고 수정 한 후 다시 작성할 수 있습니다.
smali 코드를 단계별로 디버깅 할 수 있습니다. 또한 프로젝트와 같은 파일 구조와 APK 빌드와 같은 일부 반복적 인 작업의 자동화로 인해 앱 작업이 더 쉬워집니다.
apktool 은 갈 길입니다. 온라인 apktool 서비스도 있습니다 : http://www.javadecompilers.com/apktool
서비스 '온라인 특성'으로 인해 몇 가지 제한 사항이 존재합니다. 자산과 매니페스트 파일을 추출하고 연구 할 수 있지만 현재 응용 프로그램을 다시 컴파일하는 것은 불가능합니다.
여전히 이것은 안드로이드 응용 프로그램을 '열기'쉬운 방법입니다.
DexPatcher 사용해 볼 수 있습니다 . 심지어 Android Studio와 통합됩니다. 내부적으로 Apktool 과 Dex2Jar를 사용합니다 .
해당 도구를 독립적으로 사용할 수도 있습니다.
Apktool은 apk를 디 컴파일하고 .dex 파일을 추출하여 Dex2Jar를 사용하여 jar로 변환 할 수 있습니다. JD-GUI 를 사용하여 Jar를 디 컴파일 할 수 있습니다 . 해당 도구를 사용하여 Java 코드를 볼 수 있습니다. 디 컴파일 된 코드와 실제 코드의 유사성은 보장 할 수 없지만. 시중 에는 일부 고급 코드 난독 화 도구가 있으며,이 코드를 해독하여 디 컴파일 / 이해하기가 어렵습니다. 예. 프로 가드
귀하의 안드로이드 APK 인 경우 귀하의 상태에 따라 :
같은 :
이동:
apk에서 java 소스 코드로 자동 디코딩
단계 :
upload
apk 파일 + 클릭 Run
+ 시간 대기 + 클릭 Download
하여 zip + unzip 가져 오기->
sources/com/{yourCompanyName}/{yourProjectName}
예상되는 자바 소스 코드입니다
관련 도구를 사용하여 스스로 디 컴파일 / 크랙하십시오 :
jadx
/ jadx-gui
변환 apk
에java sourcecode
jadx-0.9.0.zip 을 다운로드 한 후 압축을 풉니 다 bin/jadx
.
jadx-0.9.0/bin/jadx -o output_folder /path_to_your_apk/your_apk_file.apk
sources
되고resources
sources/com/{yourCompanyName}/{yourProjectName}
당신의 예상입니다 java sourcecode
jadx-0.9.0/bin/jadx-gui
(Linux jadx-gui.sh
/ Windows jadx-gui.bat
)apk
파일 열기save all
또는 save as Gradle project
예 :
주요 방법 3 steps
:
apk/app to dex
dex to jar
jar to java src
상해:
apk/app to dex
실행중인 앱에서 도구 ( FDex2
/ DumpDex) 덤프 / 훅 아웃 (하나 또는 여러) dex
파일 사용
단계 :
root
ED 로이드
FDex2
/ DumpDex 및 활성화
dex
실행중인 앱에서 덤프실행 FDex2
후 APK 이름을 클릭하여 나중에 덱스를 캡처 / 훅 아웃 할 수 있습니다
/data/data/com/yourCompanyName/yourProjectName
dex
파일이 있습니다.dex to jar
도구 ( dex2jar
)를 사용 하여 (특정한 응용 프로그램 논리를 포함하는) dex
파일을 jar
파일 로 변환 하십시오.
다운로드 dex2jar이 있어 dex-tools-2.1-SNAPSHOT.zip을 압축 해제 GOT, dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh
다음,
sh dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f your_dex_name.dex
예 :
dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.xxx.yyy8825612.dex
dex2jar com.xxx.yyy8825612.dex -> ./com.xxx.yyy8825612-dex2jar.jar
jar to java src
도구 중 하나를 사용하십시오.
변환 jar
에java src
jar에서 java src 변환 효과로 :
Jadx
> Procyon
> CRF
>>JD-GUI
사용을 권장합니다 : Jadx
/jadx-gui
단계 :
jadx-gui
dex
파일 열기File
-> save all
예 :
내 보낸 자바 src :
더 자세한 설명은 온라인 전자 책 중국어 자습서를 볼 수 있습니다 .
안드로이드 스튜디오는 모든 APK 파일을 분석 할 수 있습니다.
1-빌드 메뉴에서 apk 옵션 분석을 선택하고 apk 파일을 선택하십시오. 2-이렇게하면 classes.dex 파일 및 기타 파일이 생성됩니다. 3-classes.dex를 클릭하면 폴더, 패키지, 라이브러리 및 파일 목록이 표시됩니다. 4-Android Studio 설정에서 "Dex to Jar"라는 플러그인을 설치하십시오. 5-추출한 프로젝트의 활동 파일을 클릭하고 빌드 메뉴에서 jar to dex를 선택하십시오.
결과적으로 Java 파일의 실제 코드가 생성됩니다.
건배.
가장 간단한 방법은 APK OneClick 디 컴파일러를 사용하는 것입니다. APK를 디 컴파일 및 디스 어셈블하는 툴 패키지입니다 (안드로이드 패키지).
풍모
요구 사항
JRE (Java Runtime Environment)가 설치되어 있어야합니다.
이 링크에서 다운로드 할 수 있습니다 Apk OneClick Decompiler
즐기세요.
이를위한 앱이 있으며 일반적으로 몇 번의 클릭만으로 완료됩니다. https://github.com/Nuvolect/DeepDive-Android
그런 다음 소스 코드를 찾아보고 elFinder를 사용하여 다른 컴퓨터로 다운로드하거나 Lucene을 사용하여 검색하십시오.
Jadx 외에도 CFR 및 Fernflower 디 컴파일러가 있습니다.
dex2jar가 페도라 31 랩톱에서 작동하지 않는 APK에 대해 작동하도록 며칠 동안 나를 미치게 만들었습니다. 이 python 3 스크립트는 몇 분 안에 트릭을 수행했으며 jd-gui를 설치하면 클래스 파일을 읽을 수있게 만들었습니다.
http://java-decompiler.github.io/
https://github.com/Storyyeller/enjarify
구체적으로, 여기 내가 실행 한 것이 있습니다.
# i installed apktool before the rest of the stuff, may not need it but here it is
$> cd /opt
$> sudo mkdir apktool
$> cd apktool/
$> sudo wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool
$> sudo wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.4.1.jar
$> sudo mv apktool_2.4.1.jar apktool.jar
$> sudo mv apktool* /usr/bin/
$> sudo chmod a+x /usr/bin/apktool*
# and enjarify
$> cd /opt
$> sudo git clone https://github.com/Storyyeller/enjarify.git
$> cd enjarify/
$> sudo ln -s /opt/enjarify/enjarify.sh /usr/bin/enjarify
# and finally jd-gui
$> cd /opt
$> sudo git clone https://github.com/java-decompiler/jd-gui.git
$> cd jd-gui/
$> sudo ./gradlew build
# I made an alias to kick of the jd-gui with short commandline rather than long java -jar blahblahblah :)
$> echo "jd-gui='java -jar /opt/jd-gui/build/launch4j/lib/jd-gui-1.6.6.jar'" >> ~/.bashrc
이제 클래스 파일을 얻기 위해 다음을 럼주 할 수 있어야합니다.
$> enjarify yourapkfile.apk
그리고 jd-gui를 시작하려면 :
$> jd-gui
그런 다음 수업 파일을여십시오!
이 도구를 사용하십시오 http://www.javadecompilers.com/
그러나 최근에는 프로키온, CFR, JD, Fernflower, Krakatau, Candle 등 새로운 디 컴파일러가 시장 에 나왔습니다.
이 사이트에 제공되는 디 컴파일러 목록은 다음과 같습니다.
CFR- 무료, 소스 코드 없음, http://www.benf.org/other/cfr/ 저자 : Lee Benfield
매우 잘 업데이트 된 디 컴파일러! CFR은 Java 9 모듈, Java 8 람다, Java 7 String 스위치 등과 같은 최신 Java 기능을 디 컴파일 할 수 있습니다. 다른 JVM 언어의 클래스 파일을 Java로 다시 전환하는 것도 괜찮습니다!
JD- 비상업적 용도로만 무료, http://jd.benow.ca/ 저자 : Emmanuel Dupuy
2015 년에 업데이트되었습니다. Eclipse 및 IntelliJ에 대한 자체 시각적 인터페이스 및 플러그인이 있습니다. C ++로 작성되었으므로 매우 빠릅니다. Java 5를 지원합니다.
프로키온 -오픈 소스, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler 저자 : Mike Strobel
Fernflower- 오픈 소스, https://github.com/fesh0r/fernflower 저자 : Egor Ushakov
매우 유망한 분석 Java 디 컴파일러가 이제 IntelliJ 14의 필수 부분이되었습니다 ( https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler). ) 버전 6까지의 자바 지원 (주석, 제네릭, 열거 형)
JAD- 역사적인 이유로 만 제공됩니다. 무료, 소스 코드 없음, jad 다운로드 미러 저자 : Pavel Kouznetsov