从一个APK文件中逆向工程出一个项目。

294

我不小心从 Eclipse 中删除了我的项目,现在只剩下我传到手机上的 APK 文件。有没有办法将应用程序导出成.apk文件的过程逆转,这样我就能找回我的项目?


2
https://dev59.com/nWct5IYBdhLWcg3wNq2v - Sunny Kumar Aditya
2
你知道 Eclipse 有自己的版本历史记录吗? - eis
5
可能与如何从APK文件中获取源代码?重复。 - janot
4
如果您正在撰写对您来说重要的内容,建议使用版本控制系统(VCS)。Bitbucket 提供免费私人代码仓库。 - lxknvlk
1
https://github.com/skylot/jadx - Saurabh Bhoomkar
1
这是标准的故事 :) - Hexception
13个回答

338
有两个有用的工具可以从未知的APK文件生成Java代码(粗糙但足够好)。
  1. Download dex2jar tool from dex2jar.

  2. Use the tool to convert the APK file to JAR: Windows:

     $ d2j-dex2jar.bat demo.apk
     dex2jar demo.apk -> ./demo-dex2jar.jar
    

    MacOS / Linux:

     $ d2j-dex2jar.sh -f demo.apk -o demo.jar
    
  3. Once the JAR file is generated, use JD-GUI to open the JAR file. You will see the Java files.

输出结果将类似于:

JD GUI

然后您可以使用其他工具从APK文件中检索AndroidManifest.xml和资源文件(如图像、翻译等)。

  • Apktool

     $ java -jar apktool.jar -q decode -f demo.apk -o outputDir
    
  • AXMLParser

     $ apkinfo demo.apk
    
  • NinjaDroid

     $ ninjadroid demo.apk --all --extract
    

6
如何获取资源文件。 - srinivas
28
CMD已经过时,请使用d2j-dex2jar代替(v0.0.9.15)。 - Fredrick Gauss
8
@HoangHuynh,你将拥有一个res文件夹,其中包含难以阅读的XML文件。 - S.Thiongane
1
为什么类的名称是像a、b、c这样的? - umerk44
7
在Mac电脑上,如果你无法使用dex2jar工具并出现"permission denied"错误提示,可以执行以下命令: $sudo chmod +x d2j-dex2jar.sh。这将授予d2j-dex2jar.sh文件执行权限。 - Min2
显示剩余10条评论

87

首先,我建议您观看此视频,也许它可以解决您所有的疑惑。

如果不行,请继续阅读以下内容。

.apk文件解码步骤:

第一步:

创建一个新文件夹并将要解码的.apk文件放入其中。现在将此.apk文件的扩展名更改为.zip(例如:从filename.apk重命名为filename.zip)并保存它。

如果在转换为.zip时出现问题,请参考链接

现在您已经获得了classes.dex等文件,可以看到可绘制对象但不能查看XML和Java文件,请继续。

第二步:

现在在同一个文件夹中提取此压缩的apk文件。现在从此链接下载dex2jar并将其提取到同一个文件夹中。现在打开命令提示符并将目录更改为那个文件夹。

然后输入dex2jar classes.dex,然后按Enter键。现在您会在同一个文件夹中获得classes.dex.dex2jar文件。

然后下载Java反编译器

现在双击jd-gui并点击打开文件。然后从文件夹中打开classes.dex.dex2jar文件。现在您将获得类文件,并保存所有这些类文件(单击文件,然后在jd-gui中单击“保存所有源”)按src名称。提取zip文件(classes_dex2jar.src.zip),然后您将获得该应用程序的所有Java文件。

此阶段您已经获得了Java源代码,但XML文件仍然无法阅读,因此请继续以下步骤。

步骤3:

现在打开另一个新文件夹并放入这些文件:

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

  2. 下载适用于windows v1.x的Apktool 和Apktool

使用Google安装窗口并放置在同一个文件夹中

  1. 使用Google下载framework-res.apk文件,并将其放置在同一文件夹中(并非所有apk文件都需要framework-res.apk文件)

  2. 打开命令窗口

  3. 导航到APKtool的根目录,然后键入以下命令:apktool if framework-res.apk。

上述命令应该会产生Framework installed ....

  1. apktool d "appName".apk(这里“appName”表示您要解码的应用程序),现在您将获得一个文件夹,在其中您可以轻松阅读XML文件。

步骤4:最终,我们得到了项目的res/和Java代码,这也是我们开始时的目标。

P.S. 如果无法按照上述步骤获取res文件夹,请安装新的 apktool

  • 是否已安装Java 1.7?请安装Apktool 2.x
  • 是否已安装Java 1.6或更高版本?请安装Apktool 1.x

享受编码的乐趣吧!


非常有用。只是你没有提到的是,apktool.jar不在同一个包中,我从以前的包中获取它并将其粘贴到与apktool相同的目录中。 - S.Thiongane
1
我逆向工程了代码,但为什么类名、变量名像aa、bc等,还有很多错误。 - user2934930
1
无法在命令提示符中执行该操作。 - Meghal Agrawal
无法获取res文件夹,请帮忙。 - Meghal Agrawal
3
这意味着代码已经使用ProGuard进行了混淆。 - cascal
显示剩余3条评论

68

没有软件,也没有太多步骤...

只需上传您的APK文件并从此网站获取所有资源。

https://www.apkdecompilers.com/

这个网站将对APK文件中嵌入的代码进行反编译,并提取文件中的所有其他资产。

注意:我已经从这个网站反编译了我的APK文件并在一分钟内获得了代码

更新1:

我找到了另一个在线反编译器网站,

http://www.javadecompilers.com/apk/ - 不断要求弹出窗口阻止

更新2:

我在play store中找到了APK反编译器应用程序,

https://play.google.com/store/apps/details?id=com.njlabs.showjava

我们可以在Android手机上反编译apk文件。并且我们还可以在此应用程序中查看Java和XML文件

更新3:

我们可以使用Android studio 2.2版的另一个选项Analyze APK功能

构建->分析APK->选择您的APK->它会给出结果

输入图像描述


4
在上一种方法中,我们无法打开Java类,只能显示方法名称。 - Choletski
@Choletski,你试过ShowJava了吗?如果没有,请试一下并告诉我更新情况。 - Ranjithkumar
@RanjithKumar,它的限制是50 MB APK大小。我有一个85 MB的APK需要反编译。 - Ravi Sharma
@RaviSharma 试试这个:https://play.google.com/store/apps/details?id=in.pounkumar.apkextractor - Ranjithkumar
1
如何在Android Studio中运行反编译的项目?有人可以写一下吗? - Mayur Kukadiya
奇怪!Android Studio允许反向工程自己的应用程序:D - M.Muzammil

10
在Android Studio 3.5中,你只需一分钟就能完成以下步骤: 1: 打开Android Studio, 按下窗口键 -> 输入“Android Studio” -> 点击图标打开Android Studio启动画面,如下所示。 enter image description here 2: 在此处你可以看到“Profile or debug APK”选项,点击它并选择你的apk文件,然后按下OK。 enter image description here 3: 它将在一分钟内打开所有manifest和java类,具体时间取决于apk的大小。 enter image description here 就这样。

3
这个方案没有给我任何类型的Java文件。 - kishan verma
您可以在此处找到有关此方法的视频教程:https://youtu.be/CWI0edpXXWk - Vander Ig

5

5
并不完全如此。有许多dex反汇编/反编译套件,例如smalidex2jar,可以生成半人类可读的输出(在dex2jar的情况下,通过使用类似于JD-GUI的东西,您可以获得Java代码,但该过程并不完美,并且很难以100%地重新创建源代码。然而,这可能会为您提供重建源代码树的起点。)请保留HTML标签。

4

3
以下是一些工具,您可以使用它们从APK文件中执行逆向工程并转换为源代码:
  1. Dex2jar
  2. Java反编译器
  3. Apktool
  4. Apk分析器

3
是的,你可以重获你的项目。只需将 yourproject.apk 文件改名为 yourproject.zip,你将得到该 ZIP 文件内的所有文件。我们将文件扩展名从 .apk 更改为 .zip。从该 ZIP 文件中提取 classes.dex 文件,并按以下方式反编译它。
首先,你需要一个工具将 DEX 中的所有(已编译)类提取到 JAR。有一个名为 dex2jar 的工具,是由一名中国学生制作的。
然后,你可以使用JD-GUI工具将JAR中的类反编译成源代码。生成的源代码应该非常易读,因为 dex2jar 应用了一些优化。

3
针对Android平台,您可以尝试在Play Store上找到的ShowJava应用程序。
您可以通过应用程序界面查看生成的代码,并且生成的Java文件和文件夹结构存储在/sdcardShowJava文件夹中,同时还有转换后的.jar文件。
该应用程序是免费的,主界面底部有广告横幅,但有一个应用内购买选项(3.99美元)可去除广告。应用内购买不会增加任何功能,仅去除广告横幅。
声明:我不是该应用程序的开发者,也与其无任何关联。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接