我笔记本电脑上的硬盘刚刚崩溃,我丢失了过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发给朋友的电子邮件中。

有没有办法从这个APK文件中提取我的源代码?


当前回答

此网站https://www.apkdecompilers.com/自动完成。

我先尝试了被接受的答案中提到的网站,但这对我来说不起作用。

其他回答

最简单的方法:使用在线工具Decompiler,上传apk并获取源代码。


解码.apk文件的过程,分步方法:

步骤1:

创建一个新文件夹并复制您要解码的.apk文件。现在将.apk文件的扩展名重命名为.zip(从filename.apk重命名为filename.zip)并保存。现在您可以访问classes.dex文件。在这个阶段,您可以看到可绘制文件,但不能看到.xml和.java文件。

第2步:

现在在同一文件夹或新文件夹中提取这个.zip文件。下载dex2jar(不要下载代码,单击右侧的releases按钮,然后下载名为dex2jar-X.X.zip的文件)并将其解压缩到同一文件夹或新文件夹。将classes.dex文件移动到dex2jar文件夹中。现在打开命令提示符并将目录更改为该文件夹。然后编写d2j-dex2jar classes.dex(适用于Mac或Ubuntu write./d2j-dex2-jar.sh classes.dex)并按enter键。现在,classes.dex.dex2jar文件位于同一文件夹中。下载java反编译程序,右键单击jdgui,单击Open File,然后从该文件夹中打开classes.dex.dex2jar文件:现在您得到了类文件。按src名称保存所有这些类文件(在jdgui中,单击File->SaveAllSources)。在这个阶段,您得到了Java代码,但.xml文件仍然无法读取。

步骤3:

现在打开另一个新文件夹

放入要解码的.apk文件下载apktool和apktool安装窗口的最新版本(两者都可以从同一链接下载),并将它们放在同一文件夹中打开命令提示符现在,运行命令apktool if framework-res.apk(如果没有,请在此处获取),然后apktool d myApp.apk(myApp.apk表示要解码的文件名)

现在,您在该文件夹中获得了一个文件文件夹,可以轻松地读取.xml文件。

步骤4:

这不是任何步骤,只需将两个文件夹(两个新文件夹)的内容复制到单个文件夹

享受源代码!

这是另一种描述,以防有人被上面的描述卡住。遵循以下步骤:

从以下位置下载apktool.bat(或适用于Linux的apktool)和apktool_<version>.jarhttp://ibotpeaches.github.io/Apktool/install/ 将jar文件从上面重命名为apktool.jar,并将两个文件放在同一文件夹中打开一个dos框(cmd.exe)并切换到该文件夹;验证是否安装了Java环境(对于Linux,请查看有关所需库的说明)开始:apktool解码[apk文件]中间结果:资源文件,AndroidManifest.xml使用您选择的解包器解压缩APK文件中间结果:classes.dex从http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=将classes.dex拖放到dex2jar.bat上(或在DOS框中输入<path_to>\dex2jar.classes.dex;对于Linux,使用dex2jars.sh)中间结果:classes_dex2jar.jar解包classes_dex2jar.jar(可能是可选的,取决于使用的反编译器)反编译类文件(例如,使用JD-GUI或DJ反编译程序)结果:源代码

注意:不允许对第三方软件包进行反编译;本指南仅用于从APK文件恢复个人源代码;最后,生成的代码很可能会被混淆

几天来,我一直想让dex2jar在一台软呢帽31笔记本电脑上与一台无法工作的apk进行比较,这让我发疯了。这个python3脚本在几分钟内就完成了这个任务,安装jdgui使类文件变得可读。

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

那就打开你的课堂文件吧!

根据您的情况,如果您的android apk:

条件1:不硬化(由腾讯Legu/奇虎360/…)

选项1:使用在线服务

例如:

使用www.javadecompilers.com

转到:

http://www.javadecompilers.com/apk注:内部使用Jadx

从apk到java源代码的自动解码

步骤:

上传apk文件+单击运行+等待一段时间+单击下载以获取zip+解压缩->

sources/com/{yourCompanyName}/{yourProjectName}

是您期望的java源代码吗

选项2:自行反编译/破解

使用相关工具自行反编译/破解:

使用jadx/jadxgui将apk转换为java源代码

下载jadx-0.9.0.zip,然后解压到bin/jadx,然后:

命令行模式:在终端运行中:jadx-0.9.0/bin/jadx-o output_folder/path_to_your_apk/your_apk_file.apkoutput_folder将显示解码的源和资源sources/com/{yourCompanyName}/{yourProjectName}是预期的java源代码GUI模式双击运行jadx-0.9.0/bin/jadx-gui(Linux的jadx-gui.sh/Windows的jadxgui.bat)打开apk文件它将自动解码->查看预期的java源代码全部保存或另存为Gradle项目

eg:

条件2:硬化(由腾讯Legu/奇虎360/…)

主要方法有3个步骤:

apk/app到dexdex到jarjar到java src

详细说明:

步骤1:apk/app to dex

使用工具(FDex2/DumpDex)从运行的应用程序转储/挂出(一个或多个)dex文件

步骤:

准备环境

根深蒂固的机器人真实电话或仿真器这里使用中文Nox App Player夜神安卓模拟器安装你的android apk到电话或模拟器已安装Xposed安装程序将FDex2/DumpDex安装到XPosed中并启用它注意:需要重新启动Xposed才能使FDex2工作FDex2下载地址,中文:脱壳工具 FDex2 CSDN下载链接: https://pan.baidu.com/s/1lTF8CN96bxWpFwv7J174lg 提取码: 3吨将android apk安装到手机/模拟器

从运行的应用程序中转储dex

运行FDex2,然后单击apk名称,以便稍后捕获/挂接dex(在电话/模拟器中)运行应用程序在/data/data.com/yourCompanyName/yourProjectName中查找并复制整个apk资源在其根文件夹中通常会找到几个dex文件

第2步:索引到jar

使用工具(dex2jar)将(特定的,包含应用程序逻辑的)dex文件转换为jar文件

下载dex2jar得到dex-tools-2.1-SNAPSHOT.zip,解压缩得到dex-tool-2.1-SNAPPSHOT/d2j-dex2jar.sh,然后

sh dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh-f your_dex_name.dex

eg:

dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.xxx.yyy8825612.dex
dex2jar com.xxx.yyy8825612.dex -> ./com.xxx.yyy8825612-dex2jar.jar

步骤3:jar到java src

使用以下工具之一:

Jadx公司Procyon公司基于procyon的GUI工具:Luyten公司字节码查看器CRF公司JD-GUI其他一些:克拉卡塔费恩鲍尔(Fernflower)卡瓦杰

将jar转换为javasrc

对于从jar到javasrc的转换效果:

Jadx>Procyon>CRF>>JD-GUI

所以建议使用:Jadx/Jadx-gui

步骤:

双击运行jadxgui打开dex文件文件->全部保存

eg:

导出的java src:


更详细的解释可以看我的在线电子书中文教程:

安卓应用的安全和破解github上教程的源代码:crifan/android_app_security_crack:安卓应用的安全和破解

是的,这是可能的。

有很多软件可以对android.apk文件进行反向工程。

最近,我在我的网站上整理了47个最好的APK反编译器的最终列表。我把它们分成4个不同的部分。

开源APK分解器在线APK分解器适用于Windows、Mac或Linux的APK解压缩程序APK分解器应用程序

我希望这本书对你有帮助。

链接:https://www.edopedia.com/blog/best-apk-decompilers/