我笔记本电脑上的硬盘刚刚崩溃,我丢失了过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发给朋友的电子邮件中。
有没有办法从这个APK文件中提取我的源代码?
我笔记本电脑上的硬盘刚刚崩溃,我丢失了过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发给朋友的电子邮件中。
有没有办法从这个APK文件中提取我的源代码?
当前回答
apktool将工作。您甚至不需要知道提取源代码的密钥库(这有点吓人)。主要缺点是源代码以Smali格式而不是Java格式呈现。其他文件,如icon和main.xml,通过的很好,但可能值得您花时间至少恢复这些文件。最终,您很可能需要从头开始重新编写Java代码。
你可以在这里找到apktool。只需下载apktool和适当的助手(适用于Windows、Linux或Mac OS)。我建议使用7-zip之类的工具来打开它们。
其他回答
根据您的情况,如果您的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:安卓应用的安全和破解
使用此工具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!
京东仅供非商业用途,http://jd.benow.ca/作者:Emmanuel Dupuy
2015年更新。有自己的可视化界面和Eclipse和IntelliJ插件。用C++编写,速度非常快。支持Java 5。
Procyon公司开源,https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler作者:Mike Strobel
Fernflower公司-开源,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下载镜像作者:帕维尔·库兹涅佐夫
1.从本地Android应用程序中提取源代码
本机Android应用程序的源代码并不难获得,但它确实需要与Windows、Mac和Linux兼容的额外工具。我个人最喜欢的工具是dex2jar和JD-GUI。
如果您不熟悉这些工具,dex2jar将读取Dalvik可执行文件并将其转换为标准JAR格式。JD-GUI将读取JAR文件并对其中找到的类文件进行反编译。
为了使提取过程更容易理解,让我们先创建一个新的原生Android项目:
android create project --target 19 --name TestProject --path . --activity TestProjectActivity --package com.nraboy.testproject
上述命令将在当前命令提示符路径中留下一个Android项目。
由于我们的项目已经包含了一个Activity类,所以让我们直接进入构建过程。关于使用Ant而不是Gradle或Maven,你可以让我整天都很难,但对于本教程,我将坚持使用它。
ant debug
上面的命令将创建一个调试构建,通常在bin/TestProject-debug.apk中找到。
使用您最喜欢的解压缩工具,解压缩APK文件。7-zip是一个流行的工具,但如果你在Mac上,你可以从终端运行以下命令:
unzip TestProject-debug.apk
这将给我们留下一堆文件和文件夹,但其中一个对我们很重要。请注意classes.dex,因为它包含我们所有的源代码。要将其转换为可读的内容,我们需要在其上运行dex2jar。您可以在Mac、Linux和Windows上使用dex2jar,但我将从Mac的角度进行解释。
使用解压缩的dex2jar目录中的classes.dex文件,从终端运行以下命令:
./dex2jar.sh classes.dex
打开您下载的JD-GUI应用程序,因为现在是解码JAR和打包的类文件的时候了。打开新创建的classes_dex2jar.jar文件,应该会看到如下内容:
看看获取本地Android APK的源代码有多容易?现在你能做什么来更好地保护自己?
Android SDK附带Proguard,这是一个混淆模块。你问什么是混淆?
通过维基百科进行混淆:
模糊(或模糊)是指在沟通,使沟通混乱,故意模棱两可,而且难以解释。
虽然混淆不会对源代码进行加密,但会使其更难理解。配置Proguard后,在发布模式下运行Ant,您的代码应该在构建时被混淆。
2.从混合Android应用程序中提取源代码
到目前为止,混合应用程序的源代码是最容易提取的。您不需要在计算机上安装任何额外的软件,只需访问APK文件即可。
为了让事情更容易理解,我们先创建一个新的Apache Cordova项目,然后提取它。首先执行以下操作:
cordova create TestProject com.example.testproject TestProject
cd TestProject
cordova platform add android
在项目创建过程中,您将使用默认的Apache Cordova CSS、HTML和JavaScript模板。在这个例子中,这对我们来说很好。让我们继续将我们的项目构建为分布式APK文件:
cordova build android
您将剩下platforms/android/ant build/CodovaApp-debug.apk或类似于platforms/android/ant build/*-debug.pk的东西。
即使这是一个调试版本,它仍然非常有用。安装了7-zip或类似文件后,右键单击APK文件并选择解压缩。在解压缩的目录中,您现在应该可以访问所有基于web的源文件。我说基于web是因为ApacheCordova使用的任何Java文件都将被编译成类文件。但是,CSS、HTML和JavaScript文件不会被触及。
您刚刚看到了获取混合应用程序源代码是多么容易。那么你能做些什么来更好地保护自己呢?
您可以使代码变丑,这是一种混淆。
这样做不会加密您的代码,但会使其变得更加难以理解。
如果你想让你的代码变丑,我建议你安装UglifyJS,因为它现在基本上是标准的。如果您喜欢使用任务管理器,Grunt和Gulp也有用于UglifyJS的模块。
单击解决方案(仅限Windows)
在阅读了这篇loooooonnnnngggg帖子后,我决定创建一个自动化的过程,只需单击一下即可反编译APK,
我决定在github上分享:https://github.com/shaybc/apk-decompiler
simply unzip,
copy the apk you want to decompile into "apk-source" folder
and run "go.bat"
find the result in the: "apk-output" folder
就这样,享受吧
可能是最容易看到的来源:
在Android studio 2.3中,构建->分析APK->选择要反编译的APK。你会看到它的源代码。
参考链接:https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2