我笔记本电脑上的硬盘刚刚崩溃,我丢失了过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发给朋友的电子邮件中。
有没有办法从这个APK文件中提取我的源代码?
我笔记本电脑上的硬盘刚刚崩溃,我丢失了过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发给朋友的电子邮件中。
有没有办法从这个APK文件中提取我的源代码?
当前回答
apktool将工作。您甚至不需要知道提取源代码的密钥库(这有点吓人)。主要缺点是源代码以Smali格式而不是Java格式呈现。其他文件,如icon和main.xml,通过的很好,但可能值得您花时间至少恢复这些文件。最终,您很可能需要从头开始重新编写Java代码。
你可以在这里找到apktool。只需下载apktool和适当的助手(适用于Windows、Linux或Mac OS)。我建议使用7-zip之类的工具来打开它们。
其他回答
apktool是你能尝试的最好的方法。我用它保存了一些xml,但老实说,我不知道它如何与.java代码一起工作。
我建议您拥有一个代码库,即使您是唯一的程序员。我一直在为自己的项目使用Project Locker。它为您提供免费svn和git repo。
此网站https://www.apkdecompilers.com/自动完成。
我先尝试了被接受的答案中提到的网站,但这对我来说不起作用。
我个人建议Show Java Android App获取源代码。您可以从play商店或此处下载
有几种方法可以做到这一点:
使用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测试.apk一: 在test.apk上使用Apktool 2.2.4一: 正在加载资源表。。。一: 正在使用资源解码AndroidManifest.xml。。。一: 正在从文件加载资源表:1.apk一: 常规清单包。。。一: 正在解码文件资源。。。一: 正在解码值*/*XML。。。一: Baksmaling类dex。。。一: 正在复制资产和库。。。一: 正在复制未知文件。。。一: 正在复制原始文件。。。$apktool b测试一: 在测试中使用Apktool 2.2.4一: 正在检查源是否已更改。。。一: 正在将smali文件夹粉碎为classes.dex。。。一: 正在检查资源是否已更改。。。一: 正在生成资源。。。一: 正在生成apk文件。。。一: 正在复制未知文件/dir。。。
根据您的情况,如果您的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:安卓应用的安全和破解