有没有办法从APK文件中获取源代码?

问题描述 投票:1171回答:21

我的笔记本电脑上的硬盘驱动器崩溃了,我丢失了过去两个月一直在处理的应用程序的所有源代码。我所拥有的是从我发送给朋友时存储在我的电子邮件中的APK文件。

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

android android-resources decompiling apk
21个回答
1488
投票

简单方法:使用在线工具http://www.javadecompilers.com/apk,上传apk并获取源代码。


解码.apk文件的步骤,循序渐进的方法:

Step 1:

  1. 创建一个新文件夹并复制要解码的.apk文件。
  2. 现在将此.apk文件的扩展名重命名为.zip(例如,从filename.apk重命名为filename.zip)并保存。现在你可以访问classes.dex文件等了。在这个阶段你可以看到drawables而不是xml和java文件,所以继续。

Step 2:

  1. 现在将此.zip文件解压缩到同一文件夹(或NEW FOLDER)中。
  2. Download dex2jar并将其解压缩到同一文件夹(或新文件夹)。
  3. 将classes.dex文件移动到dex2jar文件夹中。
  4. 现在打开命令提示符并将目录更改为该文件夹(或NEW FOLDER)。然后写d2j-dex2jar classes.dex(对于mac终端或ubuntu写./d2j-dex2jar.sh classes.dex)并按回车键。您现在在同一文件夹中有classes.dex.dex2jar文件。
  5. Download java decompiler,双击jd-gui,点击打开的文件,然后打开该文件夹中的classes.dex.dex2jar文件:现在你得到了类文件。
  6. 通过src名称保存所有这些类文件(在jd-gui中,单击文件 - >保存所有源)。在这个阶段你得到java源代码,但.xml文件仍然不可读,所以继续。

Step 3:

现在打开另一个新文件夹

  1. 放入要解码的.apk文件
  2. 下载最新版本的apktool AND apktool install window(两者都可以从同一个链接下载)并将它们放在同一个文件夹中
  3. 打开命令窗口
  4. 现在运行像apktool if framework-res.apk(如果你没有它get it here)和接下来的命令
  5. apktool d myApp.apk(其中myApp.apk表示您要解码的文件名)

现在你在该文件夹中获得了一个文件夹,可以轻松读取apk的xml文件。

Step 4:

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

并享受源代码......


6
投票

我将向您展示反编译.apk文件的其他方法。

您可以按照“prankul garg”的前两个步骤进行操作。所以你有另一个机会:

第3步:

下载“JD-GUI”,很容易找到这个。在“jd-gui.exe”中打开.jar文件。 (文件>打开文件>'找到你的.jar文件')。完成此过程后,您可以将所有资源保存在.zip文件中。

所以,

1st - 您必须将.apk文件重命名为.zip

第2步 - 您必须解码.dex文件(如果需要,将.apk文件解码为dex2jar,这是可能的)

第3 - 您必须使用JD-GUI解码.jar文件


6
投票

在线以下工具:

http://www.javadecompilers.com/apk

它只需点击一下就可以了:反编译的.java文件+资源+ xml(在一个.zip文件中)和非常好的反编译器(jadx返回地方/函数中的java代码,其他编译器在函数内部返回注释,如“无法反编译”或某些android汇编程序/机器代码)


6
投票

这个网站https://www.apkdecompilers.com/自动完成了。

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


5
投票

我个人推荐Show Java Android App来获取源代码。您可以从Play商店或here下载


4
投票

Apktool用于逆向工程第三方,封闭式,二进制Android应用程序。

它可以将资源解码为近乎原始的形式,并在进行一些修改后重建它们。

它可以逐步调试smali代码。此外,它使得使用应用程序更容易,因为类似项目的文件结构和一些重复性任务的自动化,如构建apk等。

http://ibotpeaches.github.io/Apktool/


3
投票

apktool是要走的路。在线apktool服务也存在:http://www.javadecompilers.com/apktool

由于服务“在线性质”,显然存在一些限制:您可以提取和研究资产和清单文件,但目前无法重新编译应用程序。

不过,这是一个“打开”Android应用程序的麻烦方式。


3
投票

你可以尝试DexPatcher。它甚至可以与Android Studio集成。它内部使用ApktoolDex2Jar。 您也可以单独使用这些工具。 Apktool反编译apk,并提取.dex文件,可以使用Dex2Jar进一步转换为jar。 Jar可以使用JD-GUI反编译。您可以在该工具的帮助下查看Java代码。虽然反编译代码与实际代码的相似性无法保证。市场上有一些先进的code obfuscation工具,它们使代码变得混乱,难以反编译/理解。例如。 Proguard的


2
投票

Android studio可为您分析任何apk文件。

1 - 从构建菜单中选择analyze apk选项并选择apk文件。 2 - 这将生成classes.dex文件和其他文件。 3 - 单击classes.dex,它将为您提供文件夹,包,库和文件的列表。 4 - 从和android工作室设置安装一个名为“Dex to Jar”的插件5 - 单击解压缩项目的任何活动文件,然后从构建菜单中选择dex to jar。

这将导致您的Java文件的实际代码。

干杯。


1
投票

最简单的方法是使用Apk OneClick Decompiler。这是一个反编译和反汇编APK(android包)的工具包。

特征

  • 所有功能都集成在Windows的右键菜单中。
  • 将APK类反编译为Java源代码。
  • 将APK反汇编为smali代码并解码其资源。
  • 右键单击安装APK到手机。
  • 编辑smali代码和/或资源后重新编译APK。在重新编译期间:
  • 优化png图像
  • 签署apks
  • 的zipalign

要求

必须安装Java运行时环境(JRE)。

你可以从这个链接Apk OneClick Decompiler下载它

享受那个。


1
投票

我发现以下是最简单的方法:

  1. 将app.apk重命名为app.zip(将扩展名从apk更改为zip)
  2. 将zip文件解压缩到一个文件夹中
  3. 使用JADX工具读取classes.dex文件中的源代码。

117
投票

这是另一种描述 - 以防万一有人卡在上面的描述。按照步骤:

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

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


1
投票

有一个应用程序,通常只需点击几下,你就完成了。 https://github.com/Nuvolect/DeepDive-Android

  1. 选择应用,在“已安装的应用”下选择您的应用。如果不存在,您可以加载APK。
  2. 选择“提取APK”
  3. 选择“解压APK”
  4. 选择“使用Jadx反编译”。这可能需要几秒钟或几分钟,具体取决于设备的速度

之后,您可以浏览源代码,使用elFinder将其下载到另一台计算机或使用Lucene进行搜索。

除了Jadx,它还有CFR和Fernflower反编译器。


0
投票

根据你的情况,如果你的安卓apk:

Condition1: NOT harden (by Tencent Legu/Qihoo 360/...)

选择1:使用在线服务

如:

using www.javadecompilers.com

每个:

自动解码从apk到java源代码

脚步:

qazxsw poi apk文件+点击qazxsw poi +等一段时间+点击qazxsw poi获取zip + unzip - >

upload

是你期望的java源代码

选择2:自己反编译/破解

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

use Run/Download convert sources/com/{yourCompanyName}/{yourProjectName} to jadx

下载jadx-gui然后解压缩到apk,然后:

  • 命令行模式: 在终端运行:java sourcecode output_folder将显示已解码的jadx-0.9.0.zipbin/jadx jadx-0.9.0/bin/jadx -o output_folder /path_to_your_apk/your_apk_file.apk是你预期的sources
  • GUI模式 双击运行resources(Linux的sources/com/{yourCompanyName}/{yourProjectName} / Windows的java sourcecode) 打开jadx-0.9.0/bin/jadx-gui文件 它将自动解码 - >查看您期望的java源代码 jadx-gui.shjadx-gui.bat

例如:

Condition2: harden (by Tencent Legu/Qihoo 360/...)

apk的主要方法:

  1. save all
  2. save as Gradle project
  3. 3 steps

详细说明:

第1步:apk/app to dex

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

脚步:

prepare environment

  • 一个apk/app to dexed android 真正的手机 或模拟器 在这里使用中国FDex2
  • 安装你的Android apk 到手机或模拟器
  • 安装dex
  • root / Nox App Player夜神安卓模拟器安装到XPosed并启用它 注意:需要重启Xposed才能使FDex2正常工作 FDex2下载地址,中文: Xposed Installer 链接:FDex2提取码:3e3t
  • 安装你的Android apk到手机/模拟器

dump out DumpDex from running app

第2步:FDex2

使用工具(/data/data/com/yourCompanyName/yourProjectName)转换(具体的,包含应用程序逻辑)dex文件到dex to jar文件

下载dex2jar得到dex,unzip得到jar,然后

dex2jar

例如:

dex-tools-2.1-SNAPSHOT.zip

第3步: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 基于procyon的GUI工具: jar to java src Jadx
  • Procyon
  • Luyten
  • 其他一些: Bytecode Viewer CRF JD-GUI

Krakatau转换为Fernflower

从jar到java src转换效果:

Cavaj> jar> java src >> Jadx

所以建议使用:Procyon / CRF

脚步:

  • 双击运行JD-GUI
  • 打开Jadx文件
  • jadx-gui - > jadx-gui

例如:

导出java src:


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

  • dex 教程在github上的源代码:File

107
投票

虽然您可能能够反编译您的APK文件,但您可能遇到一个大问题:

它不会返回你写的代码。相反,它将返回编译器内联的任何内容,变量给定随机名称,以及给定随机名称的函数。尝试将其反编译并恢复到您拥有的代码中可能需要更多的时间,而不是重新开始。

可悲的是,像这样的事情已经扼杀了很多项目。 对于未来,我强烈建议学习版本控制系统,如CVS,SVN和git等。

以及如何备份它。


49
投票

Play Store上还有一个新的应用程序,可以用它来反编译apk(系统应用程序)并在智能手机上查看源代码。它将文件保存到SD卡,以便您也可以在计算机上查看。它不需要root或其他东西。

只需安装并享受乐趣。我认为这是反编译应用程序的最简单方法。


27
投票

apktool是你可以尝试的最好的东西。我用它保存了一些xml,但说实话,我不知道它将如何与.java代码一起使用。

即使你是唯一的编码器,我也会建议你有一个代码库。我一直在使用Project Locker来完成自己的项目。它为您提供免费的svn和git回购。


21
投票

这两篇文章描述了如何结合使用apktooldex2jar来获取APK文件并创建一个可以构建和运行它的Eclipse项目。

http://blog.inyourbits.com/2012/11/extending-existing-android-applications.html

http://blog.inyourbits.com/2012/12/extending-existing-android-applications.html

基本上你:

  1. 使用apktool从apk获取资源文件
  2. 使用dex2jar以Eclipse喜欢的格式获取包含类的jar文件。
  3. 创建一个Eclipse项目,将其指向资源文件和新的jar文件
  4. 使用zip实用程序打开jar文件并删除现有资源
  5. 使用JDGui打开jar文件以查看源代码
  6. JDGui获取所需的任何源代码,将其粘贴到Eclipse内的类中并进行修改
  7. 从jar文件中删除该类(因此您没有多次定义相同的类)
  8. 运行。

19
投票

apktool会工作。您甚至不需要知道密钥库来提取源代码(这有点可怕)。主要缺点是源代码以Smali格式而不是Java格式呈现。其他文件,如icon和main.xml虽然完美无缺,但至少可以恢复它们。最终,您很可能需要从头开始重新编写Java代码。

你可以找到apktool here。只需下载apktool和相应的帮助程序(适用于Windows,Linux或Mac OS)。我建议使用7-zip等工具打开包装。


12
投票

有几种方法可以做到这一点:

  1. 使用Android Studio 3.0中的“配置文件或调试APK”功能。 它允许您在Android Studio中打开和浏览APK。类被反编译成smali。没有提取资源,诸如“转到定义”,“查找所有引用”和调试之类的东西没有源代码(android studio 3.0 canary 9)就无法工作。一些额外的smali功能可能适用于smalidea
  2. 使用jadx。 Jadx将给定APK中的代码反编译为java源文件。
  3. 使用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...

8
投票

可能很容易看到来源:

在Android studio 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

© www.soinside.com 2019 - 2024. All rights reserved.