我的笔记本电脑上的硬盘驱动器刚刚崩溃,并且丢失了过去两个月来我一直在使用的应用程序的所有源代码。我所拥有的就是APK文件,该文件存储在我发送给朋友时的电子邮件中。
有什么办法可以从这个APK文件中提取我的源代码?
javac -decompile
,这将符合SO准则。在我看来,答案是题外话,而不是问题。
我的笔记本电脑上的硬盘驱动器刚刚崩溃,并且丢失了过去两个月来我一直在使用的应用程序的所有源代码。我所拥有的就是APK文件,该文件存储在我发送给朋友时的电子邮件中。
有什么办法可以从这个APK文件中提取我的源代码?
javac -decompile
,这将符合SO准则。在我看来,答案是题外话,而不是问题。
Answers:
简单方法:使用在线工具http://www.javadecompilers.com/apk,上传apk并获取源代码。
.apk文件解码过程,分步方法:
新建一个文件夹,然后复制要解码的.apk文件。
现在,将此.apk文件的扩展名重命名为.zip(例如,从filename.apk重命名为filename.zip)并保存。现在,您可以访问classes.dex文件等。在此阶段,您可以看到drawable,但是看不到xml和java文件,因此继续。
现在,将此.zip文件解压缩到同一文件夹(或NEW FOLDER)中。
将classes.dex文件移动到dex2jar文件夹中。
现在打开命令提示符,并将目录更改为该文件夹(或NEW FOLDER)。然后写d2j-dex2jar classes.dex
(对于mac terminal或ubuntu write ./d2j-dex2jar.sh classes.dex
)并按Enter。现在,您在同一文件夹中有classes.dex.dex2jar文件。
下载java decompiler,双击jd-gui,单击打开文件,然后从该文件夹中打开classes.dex.dex2jar文件:现在您获得了类文件。
通过src名称保存所有这些类文件(在jd-gui中,单击File-> Save All Sources)。在此阶段,您获得了Java源代码,但是.xml文件仍然不可读,因此继续。
现在打开另一个新文件夹
放入您要解码的.apk文件
下载最新版本的apktool 和 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
从http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=下载并解压缩classes.dex
到dex2jar.bat
(或<path_to>\dex2jar.bat classes.dex
在DOS框中输入;对于Linux使用dex2jar.sh
)
中间结果:classes_dex2jar.jar
classes_dex2jar.jar
(根据使用的反编译器,可能是可选的)结果:源代码
注意:不允许反编译第三方软件包;本指南仅旨在从APK文件中恢复个人源代码;最后,最终的代码很可能会被混淆
apktool
返回smali
文件?如何获取java
文件?
尽管您可以反编译APK
文件,但是您可能会遇到一个大问题:
它不会返回您编写的代码。相反,它将返回编译器内联的所有内容,其中变量具有随机名称,而函数具有随机名称。与重新开始相比,尝试反编译并将其还原到您拥有的代码中可能要花费更多的时间。
可悲的是,像这样的事情已经杀死了许多项目。
对于未来,我强烈建议学习版本控制系统,例如CVS,SVN和git等。
以及如何备份。
Play商店上还有一个新应用程序,可以通过它反编译apk(系统应用程序也可以)并在智能手机上查看源代码。它将文件保存到SD卡,因此您也可以在计算机上查看文件。它不需要root或其他东西。
只需安装并享受乐趣。我认为这是反编译应用程序的最简单方法。
apktool是您可以尝试的最好的方法。我已经保存了一些xml,但是老实说,我不知道它如何与.java代码一起使用。
即使您是唯一的编码器,我也建议您有一个代码存储库。我一直在为自己的项目使用Project Locker。它为您提供了免费的svn和git repos。
这两篇文章描述了如何结合使用apktool
和dex2jar
获取APK
文件,以及如何创建可以构建和运行该文件的Eclipse项目。
http://blog.inyourbits.com/2012/11/extending-existing-android-applications.html
http://blog.inyourbits.com/2012/12/extending-existing-android-applications.html
基本上,您:
apktool
将资源文件移出apkdex2jar
获取包含在Eclipse将喜欢的格式类的jar文件。JDGui
以查看源代码JDGui
,将其粘贴在Eclipse中的类中并对其进行修改apktool将正常工作。您甚至不需要知道密钥库就可以提取源代码(这有点吓人)。主要缺点是源以Smali格式而不是Java表示。不过,其他文件(例如,图标和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)。smalidea可以使用一些其他的smali功能。
使用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...
我将向您展示其他反编译.apk的方法文件的方法。
您可以按照“ prankul garg ”的前两个步骤 ”。因此,您还有另一个机会:
步骤3':
下载“ JD-GUI”,就很容易找到这个。在“ jd-gui.exe”中打开您的.jar文件。(文件>打开文件>'找到您的.jar文件')。完成此过程后,您可以将所有资源保存在.zip中文件。
所以,
1-您必须将.apk文件重命名为 .zip
2-您必须解码.dex文件(如果需要,请将.apk文件解码为dex2jar,这是可能的)
3-您必须使用JD-GUI解码.jar文件
低于在线工具:
http://www.javadecompilers.com/apk
它一键即可完成所有工作:反编译.java文件+资源+ xml(在一个.zip文件中),并具有很好的反编译功能(在其他编译器返回“无法反编译”之类的函数内部注释的地方/函数中,jadx返回Java代码) android汇编器/机器码)
这个网站https://www.apkdecompilers.com/是自动完成的。
我首先尝试了接受的答案中提到的站点,但对我而言不起作用。
Apktool用于反向工程第三方,封闭的二进制Android应用程序。
它可以将资源解码为几乎原始的形式,并在进行一些修改后重新构建它们。
它可以逐步调试smali代码。此外,由于类似项目的文件结构以及一些重复性任务(如构建apk等)的自动化,它也使使用应用程序更加容易。
apktool是必经之路。在线apktool服务也存在: http //www.javadecompilers.com/apktool
显然,由于服务的“在线性质”而存在一些限制:您可以提取和研究资产和清单文件,但目前无法重新编译该应用程序。
尽管如此,这仍然是“打开” Android应用程序的简便方法。
您可以尝试DexPatcher。它甚至与Android Studio集成。它内部使用Apktool和Dex2Jar。
您也可以独立使用这些工具。
Apktool会反编译apk,并提取.dex文件,然后可以使用Dex2Jar将其进一步转换为jar。可以使用JD-GUI来反编译Jar 。您可以借助该工具查看Java代码。尽管不能保证反编译代码与实际代码的相似性。市场上有一些高级的代码混淆工具,这些工具将代码弄乱了,使其难以反编译/理解。例如。保卫者
根据您的状况,如果您的android apk:
如:
去:
自动将APK解码为Java源代码
脚步:
upload
apk文件+单击Run
+等待一段时间+单击Download
以获取zip +解压缩->
sources/com/{yourCompanyName}/{yourProjectName}
是您期望的Java源代码
使用相关工具自行反编译/破解:
jadx
/ jadx-gui
转换apk
为java sourcecode
下载jadx-0.9.0.zip,然后解压缩到got 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 android
FDex2
/ DumpDex并启用它
dex
从正在运行的应用中转储运行,FDex2
然后单击您的apk名称以稍后启用以捕获/捕获dex
/data/data/com/yourCompanyName/yourProjectName
dex
文件dex to jar
使用工具(dex2jar
)将文件(包含应用逻辑的特定dex
文件)转换为jar
文件
下载dex2jar got dex-tools-2.1-SNAPSHOT.zip,解压缩后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
例如:
导出的Java src:
更详细的解释可以参见我的在线电子书中文教程:
Android Studio可让您分析任何apk文件。
1-从构建菜单中选择分析apk选项,然后选择apk文件。2-这将导致您找到classes.dex文件和其他文件。3-单击classes.dex,它将为您提供文件夹,软件包,库和文件的列表。4-从和android studio设置安装一个名为“ Dex to Jar”的插件5-单击您提取的项目的任何活动文件,然后从构建菜单中选择dex to jar。
这将为您提供Java文件的实际代码。
干杯。
最简单的方法是使用Apk OneClick反编译器。那是一个用于反编译和反汇编APK的工具包(Android包)。
特征
要求
必须安装Java Runtime Environment(JRE)。
您可以从此链接下载Apk OneClick反编译器
好好享受
为此有一个应用程序,通常只需单击几下就可以完成。 https://github.com/Nuvolect/DeepDive-Android
之后,您可以浏览源代码,使用elFinder将其下载到另一台计算机上,或者使用Lucene进行搜索。
除了Jadx,它还具有CFR和Fernflower反编译器。
几天来,我一直在疯狂地尝试着让dex2jar在无法正常工作的apk上在fedora 31笔记本电脑上工作。这个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/
但是最近,反编译器掀起了新一波热潮: Procyon,CFR,JD,Fernflower,Krakatau和Candle。
以下是此网站上显示的反编译器列表:
CFR-免费,没有源代码,http ://www.benf.org/other/cfr/作者:Lee Benfield
更新非常好的反编译器!CFR能够反编译Java的现代功能-Java 9模块,Java 8 lambda,Java 7字符串开关等。它甚至可以将其他JVM语言的类文件重新转换为Java!
JD-免费,仅供非商业用途,http ://jd.benow.ca/作者:Emmanuel Dupuy
2015年更新。具有自己的可视界面以及Eclipse和IntelliJ的插件。用C ++编写,非常快。支持Java 5。
Procyon-开源, https ://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler作者:Mike Strobel
蕨花开源,https ://github.com/fesh0r/fernflower作者:Egor Ushakov
2015年更新。非常有前途的分析型Java反编译器,现已成为IntelliJ 14的组成部分。 https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler)支持Java至6 (注释,泛型,枚举)
JAD-仅出于历史原因在此给出。免费,没有源代码,jad下载镜像作者:Pavel Kouznetsov