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

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

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

1407255 次浏览

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

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

不幸的是,这样的事情已经扼杀了许多项目。
对于未来,我强烈建议学习版本控制系统,如CVSSVNgit等。

以及如何备份它。

你甚至不需要知道密钥库来提取源代码(这有点可怕)。主要的缺点是源代码以Smali格式呈现,而不是Java。其他文件,如图标和main.xml可以很好地通过,至少恢复这些文件可能值得你花时间。最终,你很可能需要从头开始重写Java代码。

您可以找到apkTools这里。只需下载apkTools和相应的帮助程序(适用于Windows、Linux或Mac OS)。我建议使用7-zip等工具来解压缩它们。

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

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

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


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

步骤1:

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

  2. 现在将此. apk文件的扩展名重命名为. zip(从filename.apk重命名为filename.zip)并保存它。现在您可以访问classes.dex文件。在这个阶段,您可以看到绘图,但不能看到. xml和. java文件。

步骤2:

  1. 现在将此. zip文件解压缩到同一文件夹或新文件夹中。

  2. 下载dex2jar(不要下载代码,单击右侧的发布按钮,然后下载名为dex2jar-X.X.zip的文件)并将其解压缩到同一文件夹或新文件夹。

  3. 将classes.dex文件移动到dex2jar文件夹。

  4. 现在打开命令提示符并将目录更改为该文件夹。然后写入d2j-dex2jar classes.dex(对于Mac或Ubuntu写入./d2j-dex2jar.sh classes.dex)并按回车键。您现在在同一文件夹中有classes.dex.dex2jar文件。

  5. 下载java反编译器,右键单击jd-gui,单击Open File,然后从该文件夹打开classes.dex.dex2jar文件:现在你得到类文件。

  6. 按src名称保存所有这些类文件(在jd-gui中,单击文件->保存所有源)。在这个阶段,您会得到Java代码,但. xml文件仍然无法读取。

步骤3:

现在打开另一个文件夹

  1. 放入要解码的. apk文件

  2. 下载最新版本的AND安装窗口(两者都可以从同一个链接下载)并将它们放在同一个文件夹中

  3. 打开命令提示符

  4. 现在运行命令apktool if framework-res.apk(如果你没有它把它拿过来)和下一个

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

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

步骤4:

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

享受源代码!

这两篇文章描述了如何结合使用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获取一个jar文件,其中包含Eclipse喜欢的格式的类。
  3. 创建一个Eclipse项目,将其指向资源文件和新的jar文件
  4. 使用zip实用程序打开jar文件并删除现有资源
  5. JDGui打开jar文件查看源代码
  6. JDGui中获取您需要的任何源代码,将其粘贴到Eclipse中的一个类中并对其进行修改
  7. 从jar文件中删除该类(因此您不会多次定义相同的类)
  8. 运行它。

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

你可以按照“恶作剧”的前2步操作。所以你有另一个机会:

步骤3':

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

所以,

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

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

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

这是一个替代描述——以防有人被上面的描述卡住。按照步骤操作:

  1. 下载#0(或#1为Linux)和#2http://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. http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&; can=2&q=下载并解压dex2jar-0.0.9.15.zip
  7. classes.dex拖放到dex2jar.bat上(或在DOS框中输入<path_to>\dex2jar.bat classes.dex;供Linux使用dex2jar.sh

    中间结果classes_dex2jar.jar

  8. unpackclasses_dex2jar.jar(可能是可选的,具体取决于使用的反编译器)
  9. 反编译你的类文件(例如JD-GUIdj解码器

    结果:源代码

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

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

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

ApkTools逆向工程第三方,封闭的二进制Android应用程序。

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

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

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

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

在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

下面在线工具:

http://www.javadecompilers.com/apk

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

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

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

不过,这是一种“打开”android应用程序的轻松方式。

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

  1. 使用Android Studio 3.0中的“配置文件或调试APK”功能。

    它允许您在Android Studio中打开和探索APK。类被反编译为smali。资源不会被提取,如果没有源代码(android Studio 3.0 canary 9),“转到定义”、“查找所有引用”和调试等功能就无法工作。一些额外的smali功能可能适用于smalidea

    android-dios

    选择文件

    code

  2. 使用jadx

    jadx将给定APK中的代码反编译为java源文件。

    jdax-img

  3. 使用apk工具

    Apkool是一个命令行工具,它提取资源并将代码反编译为给定apk的smali。您也可以使用apkool重新编译。这是一个实际操作的示例:

    $ apktool d test.apkI: Using Apktool 2.2.4 on test.apkI: Loading resource table...I: Decoding AndroidManifest.xml with resources...I: Loading resource table from file: 1.apkI: 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 testI: Using Apktool 2.2.4 on testI: 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...

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

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

我个人推荐显示JavaAndroid应用程序获取源代码。您可以从Play商店或这里下载

您可以尝试DexPatcher。它甚至与Android Studio集成。它在内部使用ApkToolsDex2Jar
您也可以独立使用这些工具。ApkTools对apk进行反编译,并提取. dex文件,然后使用Dex2Jar将其转换为jar。Jar可以通过JD-GUI反编译,可以看到Java的代码,尽管不能保证反编译后代码与实际代码的相似性。市场上有一些代码混淆高级工具,它们会扰乱代码,使得反编译/理解变得困难。例如:ProGuard

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

特点

  • 所有功能都集成到Windows的右键菜单中。
  • 反编译APK类以Java源代码。
  • 反汇编APK到smali代码和解码其资源。
  • 通过右键单击将APK安装到手机。
  • 编辑smali代码和/或资源后重新编译APK。重新编译时:
  • 优化png图片
  • 签名apks
  • 齐帕兰

要求

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

你可以从这个链接下载Apk OneClick反编译工具

好好享受吧。

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

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

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

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

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

除了Jadx之外,它还具有CFR和Fern花反编译器。

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

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

选择1:使用在线服务

例如:

使用www.javadecompilers.com

转到:

从apk自动解码到java源代码

步骤:

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

sources/com/{yourCompanyName}/{yourProjectName}

是您预期的java源代码

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

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

使用jadx/jadx-guiapk转换为java sourcecode

下载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将显示解码后的sourcesresources
      • sources/com/{yourCompanyName}/{yourProjectName}是你的期望java sourcecode
  • GUI模式
    • 双击运行jadx-0.9.0/bin/jadx-gui(Linux的jadx-gui.sh/Windows的jadx-gui.bat
    • 打开apk文件
    • 它会自动解码->看到您预期的java源代码
    • save allsave as Gradle project

eg:

条件2:哈登(由腾讯Legu/奇虎360/…)

3 steps的主要方法:

  1. apk/app to dex
  2. dex to jar
  3. jar to java src

详细解释:

Step1:apk/app to dex

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

步骤:

准备环境

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

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

  • (在手机/模拟器中)运行您的应用程序
  • /data/data/com/yourCompanyName/yourProjectName中找到并复制转储整个apk资源
    • 在其根文件夹通常中会找到几个dex文件

step2:dex to 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

eg:

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

step3:jar to java src

使用工具之一:

jar转换为java src

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

Jadx>Procyon>CRF>>JD-GUI

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

步骤:

  • 双击运行jadx-gui
  • 打开dex文件
  • File->save all

eg:

导出java src:


更详细的说明可以看我的在线电子书中国教程:

Android Studio为您提供分析任何apk文件。

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

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

干杯。

几天来,我一直在努力让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

现在应该能够rum以下以获取类文件:

$> enjarify yourapkfile.apk

并启动jd-gui:

$> jd-gui

然后打开你的类文件!

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

在此处输入图片描述

在此处输入图片描述

使用此工具http://www.javadecompilers.com/

但最近,新一波反编译器已经进入市场:Procyon,CFR,JD,蕨类植物,Krakatau,蜡烛。

以下是本网站上提供的反编译器列表:

CFR-免费,没有可用的源代码,http://www.benf.org/other/cfr/作者: Lee Benfield

非常好更新的反编译器!CFR能够反编译现代Java功能-Java9个模块,Java8个lambda,Java7个字符串开关等。它甚至可以将类文件从其他JVM语言转换回java!

京东-仅供非商业用途,http://jd.benow.ca/作者: Emmanuel Dupuy

2015年更新。拥有自己的可视化界面和Eclipse和IntelliJ插件。用C++编写,非常快。支持Java5。

Procyon-开源,https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler作者: Mike Strobel

蕨类植物-开源,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

是的,这是可能的。

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

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

  1. 开源APK反编译器
  2. 在线APK反编译器
  3. 适用于Windows、Mac或Linux的APK反编译器
  4. APK反编译器应用程序

希望这个收藏对你有帮助。

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

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项目。

由于我们的项目已经包含了一个活动类,让我们直接进入构建过程。你可以让我整天都很难使用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 TestProjectcd TestProjectcordova platform add android

在项目创建过程中,你只剩下默认的Apache Cordova CSS、超文本标记语言和JavaScript模板。在这个例子中,这对我们来说很好。让我们继续将我们的项目构建到一个分布式APK文件中:

cordova build android

你会得到平台/android/ant-build/CordovaApp-debug.apk或类似于平台/android/ant-build/*的东西-debug.apk

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

您刚刚看到了获取混合应用程序源代码是多么容易。那么,您可以做些什么来更好地保护自己呢?

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

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

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

市场上有很多应用程序和方法将apk文件反编译为java类,但如果应用程序使用ProGuard规则编译,那么您将遇到大麻烦,因为该规则将所有dex文件缩小为一个小字符名称,然后您无法追溯实现。模式说明见https://developer.android.com/studio/build/shrink-code

编码愉快…

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

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

第二步:现在将此. zip文件解压缩到同一文件夹(或新文件夹)中。

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

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

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

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

放入您要解码的. apk文件

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

打开命令窗口

现在运行命令像apkool如果framework-res.apk(如果你没有它在这里得到它)和下一个

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

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

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

成交!

可以使用以下任何一种方法反编译Android应用程序的APK文件:

  1. APKTool(需要在PC上安装Java)
  2. APKTool M(Android应用程序)
  3. JavaDecomPilers(在线工具包括APKTool实用程序)

来源:https://droidmaze.com/how-to-extract-code-from-apk/

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

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

如果你想从playstore下载APK反编译,你也可以很容易地从它下载。

单击解决方案(仅限Windows)

读完这篇文章后,我决定创建一个自动化的过程来反编译APK在一个单一的点击,

我决定在github上分享:
https://github.com/shaybc/apk-decompiler

simply unzip,copy the apk you want to decompile into "apk-source" folderand run "go.bat"find the result in the: "apk-output" folder

就这样,好好享受

对于java文件


使用已接受的答案这里

对于XML文件


你不需要使用已接受答案中给出的方法,因为我觉得它很复杂。

我所做的是将APK文件转换为ZIP并解压它。解压后,我得到了一个名为res:输入图片描述的文件夹

我刚刚打开它,发现了许多文件夹。对于布局,您需要找到名为layout的文件夹,而不是任何其他文件夹,如布局土地或其他东西。同样的事情可以用其他资源来完成,如绘图、菜单等…

注:也会有很多不是您创建的随机文件。您可以找到您制作的文件,然后使用它们!

希望这能帮助到外面的人!