ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

仅供参考有在线反编译器检查here
这是否意味着我们可以获得价值百万美元的应用程序的源代码,例如 Whatsapp 或 Facebook?这都是开源的吗?
@Faizan你听说过proguard吗?
问题的措辞确实包含无关的生活故事花絮,因此可能被解释为推荐工具。然而,答案可能是 javac -decompile,这将符合 SO 准则。在我看来,答案是题外话,而不是问题。
this article 中,他们解释了他们如何对 Pokemon Go 进行逆向工程

2
23 revs, 20 users 34%

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

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

步骤1:

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

第2步:

现在将这个 .zip 文件解压到同一个文件夹(或 NEW FOLDER)中。下载 dex2jar 并将其解压缩到同一文件夹(或 NEW FOLDER)。将 classes.dex 文件移动到 dex2jar 文件夹中。现在打开命令提示符并将目录更改为该文件夹(或 NEW FOLDER)。然后写入 d2j-dex2jar classes.dex(对于 mac 终端或 ubuntu 写入 ./d2j-dex2jar.sh classes.dex)并回车。您现在在同一文件夹中拥有 classes.dex.dex2jar 文件。下载java反编译器,双击jd-gui,点击打开文件,从那个文件夹打开classes.dex.dex2jar文件:现在你得到了类文件。通过 src 名称保存所有这些类文件(在 jd-gui 中,单击 File -> Save All Sources)。在这个阶段,您获得了 java 源代码,但 .xml 文件仍然无法读取,因此请继续。

第 3 步:

现在打开另一个新文件夹

放入要解码的 .apk 文件 下载最新版本的 apktool 和 apktool 安装窗口(两者都可以从同一个链接下载)并将它们放在同一个文件夹中 打开命令窗口 现在运行类似 apktool 的命令 if framework- res.apk (如果你没有在这里得到它)和下一个 apktool d myApp.apk (其中 myApp.apk 表示你要解码的文件名)

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

第4步:

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

并享受源代码...


@prankulgarg,在第 3 步的第 5 点中,我收到以下错误:无法访问 jarfile E:\apktojava\testt\\apktool.jar
不要在 cmd 中编写 dex2jar classes.dex,而是尝试 d2j-dex2jar classes.dex。因为 dex2jar classes.dex 这个 cmd 已被弃用。
对于那些找不到framework-res.apk的人。从 here 下载
没有找到 d2j-dex2jar.sh 的,从这里下载 dex2jar:dex2jar.googlecode.com/files/dex2jar-0.0.9.15.zip
对于卡在步骤 2:4 中的人,请下载此版本,它将解决问题:sourceforge.net/projects/dex2jar/files/dex2jar-2.0.zip/download 它对我有用。 @交付
B
Braiam

这是另一种描述——以防万一有人被上面的描述卡住了。按照步骤:

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

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


我还可以补充一点,这个 APKTool->dex2jar->JD-GUI 路线有现代替代方案!只需尝试名为 Jadx 的开源 APK 和 DEX 反编译器:sourceforge.net/projects/jadx/files 这里也有在线版本:javadecompilers.com/apk
允许(阅读:合法)反编译 any APK 文件。请参阅以下问题:stackoverflow.com/questions/9674557/…
为什么那些 apktool 返回 smali 文件?如何获取 java 文件?
@AndrewRukin 该链接重定向到 sourceforge 的 dex2jar 页面。
我没有看到 classes.dex 文件:(
R
Ryan Gooler

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

它不会返回您编写的代码。相反,它将返回编译器内联的任何内容,变量给定随机名称,函数给定随机名称。尝试反编译并将其还原为您拥有的代码可能需要比重新开始更多的时间。

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

以及如何备份它。


C
Cilenco

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

只需安装并玩得开心。我认为这是反编译应用程序的最简单方法。


@MidhunVijayakumar 你能使用这个将apk 转换为源代码吗?
N
Nikunj Paradva

apktool 是您可以尝试的最佳选择。我已经用它保存了一些 xml,但老实说,我不知道它如何与 .java 代码一起使用。

即使您是唯一的编码员,我也会建议您拥有一个代码存储库。我一直在自己的项目中使用 Project Locker。它为您提供免费的 svn 和 git repos。


如果您想提取资源(即从 Android 应用程序中提取图像),您会发现 apktool 必不可少。实际上,该工具根本没有竞争对手!)这里提供了 apktool 的在线版本:www.javadecompilers.com/apktool
T
Tom Hennen

这两篇文章描述了如何结合使用 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

基本上你:

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


我知道这个问题还是有答案的,我想传递一个信息:有一个用于 android apks 的在线反编译器 decompileandroid.com 从本地机器上传 apk,稍等片刻,下载 zip 格式的源代码。
听起来不错。然后 decompileandroid 网站也有你所有源代码的副本!聪明的!
一个问题,我有一个反编译的apk,但在jd gui中我不知道是否有真正的java类,你知道如果一个apk被反编译,有没有真正的Java类?
R
Ryan Berger

apktool 将工作。您甚至不需要知道密钥库即可提取源代码(这有点吓人)。主要缺点是源代码以 Smali 格式而不是 Java 格式呈现。其他文件,如 icon 和 main.xml 都可以正常运行,至少值得您花时间恢复这些文件。最终,您很可能需要从头开始重新编写 Java 代码。

您可以找到 apktool here。只需下载 apktool 和适当的帮助程序(适用于 Windows、Linux 或 Mac OS)。我建议使用 7-zip 之类的工具来解压它们。


0
0xcaff

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

使用 Android Studio 3.0 中的“配置文件或调试 APK”功能。它允许您在 Android Studio 中打开和探索 APK。类被反编译成 smali。资源不会被提取,如果没有源代码(android studio 3.0 canary 9),诸如“转到定义”、“查找所有引用”和调试之类的东西就无法工作。一些额外的 smali 功能可能适用于 smalidea。使用 jadx。 Jadx 将给定 APK 中的代码反编译为 java 源文件。使用 apk 工具。 Apktool 是一个命令行工具,它为给定的 apk 提取资源并将代码反编译为 smali。您也可以使用 apktool 重新编译。下面是它的一个示例: $ apktool d test.apk I:在 test.apk 上使用 Apktool 2.2.4 I:加载资源表... I:使用资源解码 AndroidManifest.xml... I:从文件:1.apk I:常规清单包... I:解码文件资源... I:解码值 */* XMLs ... I:Baksmaling classes.dex ... I:复制资产和库.. . I: 复制未知文件... I: 复制原始文件... $ apktool b test I: 在测试上使用Apktool 2.2.4 I: 检查源是否已更改... I: 将smali 文件夹放入classes.dex。 .. I:检查资源是否改变... I:构建资源... I:构建apk文件... I:复制未知文件/目录...


我尝试过 jadx,但即使使用简单的 helloworld,尽管它会将其反编译为 java,但是,尝试在 android studio 中打开项目并将其编译回 apk,由于多种原因(重复文件等)而失败。是否有任何方法可以创建可以编译回 apk 的 java?
@ransh 我通常使用 jadx 来读取代码,然后使用 apktool 来修改代码。 apktool 不会创建 java,但它允许重新编译。
0xcaff,感谢您的澄清。现在说得通了。因为试图在 android studio 中编译一个反编译的 java,没有工作。
S
SKK

可能是很容易看到来源的:

在 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


它列出了类和方法,但没有给出源代码。
只有将“.apk”更改为“.zip”才能获取上述文件
M
M. Usman Khan

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

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


我无法检索我的 java 源代码......它看起来像附件和..
@inkazemayni 在上面的链接中,“浏览”到您的 APK 文件并点击“反编译您的 APK”。这需要一些时间,然后它应该给你源代码,如果代码没有加密的话。
你知道multidex对加密的影响吗?
C
Codelover

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


大多数在线编译器都不起作用,但这个应用程序正在运行。谢谢
V
Vadim Kotov

在线工具下方:

http://www.javadecompilers.com/apk

一键完成所有操作:反编译的 .java 文件 + 资源 + xml(在一个 .zip 文件中)具有非常好的反编译器(jadx 在其他编译返回函数内的注释的地方/函数中返回 java 代码,如“无法反编译”或一些android 汇编程序/机器代码)


是的,这很好,但它不是函数名称,而是将所有函数名称更改为 CS1001 等等。那么如何识别这些。还有一件事,我们可以将这个反编译的apk直接用作我们的Android studio项目吗,它可以工作吗?
那么如果我们不能在我们的应用程序中使用它们的功能,那么我们用来反编译一些 apk 的目的是什么。
@ZiaUrRahman 我不知道。但是,就我而言,我反编译代码以分析算法。您是否检查过该工具的反编译代码是否可以由 android studio 以全自动方式编译 - 还是需要一些“人工处理”?
我在android studio中导入了反编译的项目,但是那里没有gradle,项目有很多文件,但直到我们运行它才明白。简直是行不通。我需要在 android studio 中使反编译的项目完全可用,然后获得一些核心功能,然后想在我自己的项目中使用/嵌入它。那么有什么办法可以做到这一点?
这个在线工具使用 Jadx,任何人都可以下载并在他们自己的计算机上运行它,它的好处是没有广告每 5 秒就在你的脸上闪烁。它也以同样的方式失败 Jadx 失败
F
Franklin Hirata

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

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

步骤 3':

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

所以,

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

第二 - 你必须解码 .dex 文件(如果你愿意,可以将 .apk 文件解码为 dex2jar,这是可能的)

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


这个答案提供了其他人没有的什么?
您实际上不必将其重命名为 zip。我可以直接用 7-zip 打开 apk 文件。
c
crifan

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

条件1:不硬化(腾讯乐谷/奇虎360/...)

选择1:使用在线服务

如:

使用 www.javadecompilers.com

去:

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

注意:内部使用 Jadx

从 apk 自动解码到 java 源代码

脚步:

upload apk 文件 + 点击 Run + 等待一段时间 + 点击 Download 以获取 zip + 解压缩 ->

sources/com/{yourCompanyName}/{yourProjectName}

是你预期的java源代码

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

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

使用 jadx/jadx-gui 将 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.apk output_folder 将显示解码的源和资源 sources/com/{yourCompanyName}/{yourProjectName} 是您预期的 java 源代码

在终端运行:jadx-0.9.0/bin/jadx -o output_folder /path_to_your_apk/your_apk_file.apk

output_folder 将显示解码的源和资源 sources/com/{yourCompanyName}/{yourProjectName} 是您预期的 java 源代码

sources/com/{yourCompanyName}/{yourProjectName} 是您预期的 java 源代码

GUI 模式双击运行 jadx-0.9.0/bin/jadx-gui (Linux 的 jadx-gui.sh / Windows 的 jadx-gui.bat) 打开 apk 文件它会自动解码 -> 查看你预期的 java 源代码全部保存或保存作为 Gradle 项目

双击运行 jadx-0.9.0/bin/jadx-gui (Linux 的 jadx-gui.sh / Windows 的 jadx-gui.bat)

打开.apk文件

它将自动解码 -> 查看您预期的 java 源代码

全部保存或另存为 Gradle 项目

例如:

https://i.stack.imgur.com/hsqVP.png

条件2:硬化(腾讯乐谷/奇虎360/...)

3 steps的主要方法:

apk/app 到 dex dex 到 jar jar 到 java src

详细解释:

Step1: apk/app 到 dex

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

脚步:

准备环境

一个有根的android真正的模拟器在这里使用中国应用程序播放器夜神启动或Nox

真手机

或模拟器在这里使用Nox App Player夜神使用中文改编

这里使用的是中文Nox App Player夜神应用

将您的 android apk 安装到手机或模拟器

到手机或模拟器

安装了 Xposed 安装程序

将FDex2/DumpDex安装到XPosed并启用注:需要重启Xposed才能使FDex2正常工作 FDex2下载地址,中文:脱壳工具 FDex2-CSDN下载链接:https://pan.baidu.com/s/1lTF8CN96bxWpFwv7J174lg 采集码:3e3t

注意:需要重启 Xposed 才能使 FDex2 工作

FDex2下载地址,中文:脱壳工具FDex2-CSDN下载链接:https://pan.baidu.com/s/1lTF8CN96bxWpFwv7J174lg提取码:3e3t

脱壳工具 FEx2-CSDN下载

链接:https://pan.baidu.com/s/1lTF8CN96bxWpFwv7J174lg 提取码:3e3t

将您的 android apk 安装到手机/模拟器

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

运行 FDex2 然后单击您的 apk 名称以稍后启用以捕获/挂钩 dex

(在手机/模拟器中)运行您的应用程序

在其根文件夹中的/data/data/com/yourCompanyName/yourProjectName中找到并复制出整个apk资源的转储通常会找到几个dex文件

在其根文件夹中通常会找到几个 dex 文件

Step2:dex转jar

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

下载 dex2jar 得到 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

Step3: jar 到 java src

使用其中一种工具:

贾克斯

基于 procyon 的 Procyon GUI 工具:Luyten Bytecode Viewer

基于 procyon 的 GUI 工具:Luyten Bytecode Viewer

卢腾

字节码查看器

CRF

京东图形界面

其他一些: Krakatau Fernflower Cavaj

喀拉喀托

蕨花

卡瓦伊

jar 转换为 java src

对于从 jar 到 java src 的转换效果:

Jadx > Procyon > CRF>> JD-GUI

所以推荐使用:Jadx/jadx-gui

脚步:

双击运行 jadx-gui

打开.dex文件

文件 -> 全部保存

例如:

https://i.stack.imgur.com/XLwxO.png

导出的 java src:

https://i.stack.imgur.com/xKCeJ.png

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

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

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


B
Biswajit Karmakar

Apktool 用于逆向工程第 3 方、封闭、二进制 Android 应用程序。

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

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

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


A
Andrew Rukin

apktool 是必经之路。在线 apktool 服务也存在:http://www.javadecompilers.com/apktool

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

尽管如此,这仍然是一种“打开”安卓应用程序的便捷方式。


L
Lakshmikant Deshpande

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


你好如何在 Android Studio 中使用 DexPatcher?
无法在评论中解释所有内容。谷歌是你的朋友 :) 还有一些不错的 youtube 教程。
R
Rohit Patil

Android Studio 让您可以分析任何 apk 文件。

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

这将为您生成 java 文件的实际代码。

干杯。


P
Pierre Alexandre

第 1 步:创建一个新文件夹并复制要解码的 .apk 文件。

现在将此.apk 文件的扩展名重命名为.zip(例如,从filename.apk 重命名为filename.zip)并保存。现在您可以访问 classes.dex 文件等。在这个阶段您可以看到 drawables 但看不到 xml 和 java 文件,所以继续。

第 2 步:现在将这个 .zip 文件解压缩到同一文件夹(或 NEW FOLDER)中。

下载https://github.com/pxb1988/dex2jar/releases/tag/2.0:dex2jar-2.0

现在打开命令提示符并将目录更改为该文件夹(或 NEW FOLDER)。然后执行:d2j-dex2jar.bat classes.dex

下载此反编译器 http://java-decompiler.github.io/ 以反编译 classes-dex2jar.jar

第 3 步:现在打开另一个新文件夹

放入要解码的 .apk 文件

下载最新版本的 apktool 和 apktool (https://ibotpeaches.github.io/Apktool/install/) 安装窗口(都可以从同一个链接下载)并将它们放在同一个文件夹中

打开命令窗口

现在运行像 apktool 这样的命令 if framework-res.apk (如果你没有它在这里得到它)然后下一步

apktool d myApp.apk(其中 myApp.apk 表示您要解码的文件名)

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

将两个文件夹的内容复制到一个文件夹

完毕 !


M
Masoud Mokhtari

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

特征

所有功能都集成到 Windows 的右键菜单中。

将 APK 类反编译为 Java 源代码。

将 APK 反汇编为 smali 代码并解码其资源。

通过右键单击将APK安装到手机。

编辑 smali 代码和/或资源后重新编译 APK。重新编译期间:

优化png图片

签署 apk

Zipalign

要求

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

您可以从此链接下载它Apk OneClick Decompiler

享受那个。


M
Masood Anwar

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

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


M
MobileMateo

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

选择应用程序,在“已安装的应用程序”下选择您的应用程序。如果它不存在,您可以加载 APK。选择“Extract APK” 选择“Unpack APK” 选择“Decompile with Jadx”。这可能需要几秒钟或几分钟,具体取决于您设备的速度

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

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


Q
Qing Xu

我开发了一个工具 - 代码分析器,它在 iPhone/iPad/Mac 上运行,用于分析 Java/Android 文件,https://decompile.io

https://i.stack.imgur.com/yHiJ0.jpg

https://i.stack.imgur.com/fSIG4.jpg


H
Hossam Hassan

1. 从原生 Android 应用程序中提取源代码

原生 Android 应用程序的源代码并不难获得,但它确实需要与 Windows、Mac 和 Linux 兼容的额外工具。在工具方面,我个人最喜欢的是 dex2jarJD-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 文件,您应该会看到如下内容:

https://i.stack.imgur.com/PxMBg.png

Android SDK 附带 Proguard,它是一个混淆模块。你问什么是混淆?

通过 Wikipedia 进行混淆:

混淆(或混淆)是在交流中隐藏预期意义,使交流变得混乱、故意模棱两可且难以解释。

虽然混淆不会加密您的源代码,但它会使其更难理解。配置 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/CordovaApp-debug.apk 或类似platforms/android/ant-build/*-debug.apk 的东西。

即使这是一个调试版本,它仍然非常有用。安装 7-zip 或类似文件后,右键单击 APK 文件并选择解压缩或解压缩。在提取的目录中,您现在应该可以访问所有基于 Web 的源文件。我说基于 Web 是因为 Apache Cordova 使用的任何 Java 文件都将被编译成类文件。但是,CSS、HTML 和 JavaScript 文件不会被触及。

您刚刚看到获得混合应用程序源代码是多么容易令人沮丧。那么你能做些什么来更好地保护自己呢?

您可以丑化您的代码,这是一种混淆形式。

这样做不会加密您的代码,但会使其更难理解。

如果您想丑化您的代码,我建议您安装 UglifyJS,因为它几乎是目前的标准。如果您更喜欢使用任务运行器,Grunt 和 Gulp 也有用于 UglifyJS 的模块。


R
Rohit Patil

市场上有很多将apk文件反编译成java类的应用程序和方法,但是如果应用程序是用ProGuard规则编译的,那么你就麻烦了,因为这个规则会将所有的dex文件压缩成一个小字符名称,然后您就无法追溯实现。请参阅 https://developer.android.com/studio/build/shrink-code 了解模式说明。

快乐的编码...


A
Abdul

为了反编译 APK 并从中获取代码,您有多个在线工具 &我通常更喜欢使用 Online APK Decompiler

它非常易于使用,几分钟内您就可以从中下载源代码。

如果你想download APK from playstoredecompile。您也可以轻松地从中下载它。


R
RJ Cole

几天来,我一直在让自己发疯,试图让 dex2jar 在 Fedora 31 笔记本电脑上工作,而不是一个无法工作的 apk。这个 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

然后打开你的类文件!


F
Fakhriddin Abdullaev

使用此工具 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 lambdas、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

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 下载镜像作者:Pavel Kouznetsov


M
Muhammad Furqan Ul Haq

对的,这是可能的。

有大量软件可用于对 android .apk 文件进行逆向工程。

最近,我在我的网站上编制了一份 47 best APK decompilers 的最终清单。我把它们分成4个不同的部分。

Open Source APK Decompilers Online APK Decompilers APK Decompiler for Windows, Mac or Linux APK Decompiler Apps

我希望这个合集对你有所帮助。

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


S
Shaybc

单击解决方案(仅限 Windows)

在阅读了这篇 loooooonnnnnngggg 帖子后,我决定创建一个自动化流程,只需单击一下即可反编译 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

就是这样,享受