从APK文件进行反向工程到项目


244

我不小心从Eclipse中删除了我的项目,剩下的只是我转移到手机中的APK文件。有没有一种方法可以将将应用程序导出到.apk文件的过程反向,因此我可以找回我的项目?



2
您知道Eclipse有自己的版本历史吗?
eis 2012年


4
如果您正在编写对您来说很重要的内容,则应使用VCS。Bitbucket有免费的私人存储库。
lxknvlk

Answers:


287

有两个有用的工具可以从未知的APK文件生成Java代码(粗略但足够好)。

  1. dex2jar下载dex2jar工具。
  2. 使用该工具将APK文件转换为JAR

    $ d2j-dex2jar.bat demo.apk
    dex2jar demo.apk -> ./demo-dex2jar.jar
  3. 生成JAR文件后,使用JD-GUI打开JAR文件。您将看到Java文件。

输出将类似于:

JD GUI


6
如何获取资源文件
srini

26
不建议使用cmd,请d2j-dex2jar改用(v0.0.9.15)。
Fredrick Gauss 2013年

1
@sri只是将apk文件重命名为zip并将其解压缩,您将在res文件夹中找到资源文件
Hoang Huynh 2013年

8
@HoangHuynh,您将拥有一个res包含无法读取的xml文件的文件夹
S.Thiongane 2014年

6
Mac如果你不能使用dex2jar:permission denied那么做到这一点 $sudo chmod +x d2j-dex2jar.sh
敏2

81

首先,我推荐this视频,这可能会消除您的所有疑问

如果没有,请通过它

Procedure for decoding .apk files, step-by-step method:

Step 1:

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

如果转换成.zip时出现问题,请参阅 link

现在获取.zip之后,您将获得classes.dex文件等。在此阶段,您可以看到drawable但看不到xml和java文件,因此继续。如果看不到扩展,请检查配置

Step 2:

现在,将此zip apk文件解压缩到同一文件夹中。现在从这里下载dex2jarlink

并将其解压缩到同一文件夹。现在打开命令提示符,并将目录更改为该文件夹。

然后编写dex2jar classes.dex并按Enter。现在,您将classes.dex.dex2jar文件保存在同一文件夹中。

然后下载java decompiler

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

在此阶段,您将获得Java源代码,但是xml文件仍然不可读,因此请继续。

Step 3:

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

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

  2. 下载Apktool为windows v1.xApktool

使用谷歌安装窗口,并放置在同一文件夹

  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文件。

Step 4: 最终,我们获得了res/项目的Java代码以及Java代码,这是我们开始的目标。

P.S. 如果您无法通过上述步骤获取res文件夹,请安装新 apktool

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

Enjoy and happy coding


真的很有用。只是您没有提到的内容:apktool.jar不在同一个程序包中,我是从以前的程序包中获得的,然后将其粘贴到与相同的目录中apktool
S.Thiongane 2014年

1
我对代码进行了反向工程师,但是为什么类名,变量像aa,bc等又是很多错误
user2934930 2015年

1
无法在cmd中执行此操作
Meghal Agrawal

还有其他方法吗?
Meghal Agrawal

2
@ user2934930这意味着代码已使用ProGuard进行了模糊处理。
cascal

58

没有软件,没有太多步骤。

只需上传您的APK并从此站点获取所有资源即可。

https://www.apkdecompilers.com/

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

注意:我会反编译我的APK文件并在此网站上获得一分钟内的代码

更新1

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

http://www.javadecompilers.com/apk/-无法持续工作,要求阻止弹出窗口

更新2:

我在Play商店中发现了apk反编译器应用,

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

我们可以在我们的Android手机中反编译apk文件。而且我们还可以在此应用程序中查看java和xml文件

更新3:

我们可以使用Android Studio 2.2版本中的另一个选项分析APK功能

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

在此处输入图片说明


3
在最后一个方法中,我们无法打开Java类,仅显示方法名称
-Choletski

@Choletski您尝试ShowJava吗?如果没有尝试,请告诉我
Ranjith Kumar

@RanjithKumar其限制为50 MB APK大小..我有一个85 MB的APK要反编译。
拉维·沙尔玛


1
如何在Android Studio中运行该反编译项目?有人可以写这个吗?
Mayur kukadiya


4

并不是的。那里有许多dex拆装器/反编译器套件,例如smalidex2jar,它们会生成半人类可读的输出(对于dex2jar,您可以通过使用JD-GUI之类的东西来获取Java代码,但过程是虽然还不是很完美,但是您不太可能100%重新创建源代码,但是,它可能为您提供了重新构建源代码树的空间。


@MAC:他需要来源而不是APK文件!!
Shashank Kadne 2012年

2
@ShashankKadne可能是我没说回话
MAC

3

是的,您可以恢复项目。只需将yourproject.apk文件重命名为yourproject.zip,您将获得该ZIP文件中的所有文件。我们将文件扩展名从.apk更改为.zip。从该ZIP文件中,提取classes.dex文件并通过以下方式对其进行反编译。

首先,您需要一个工具将DEX上的所有(已编译)类提取到JAR中。有一个叫dex2jar的文件,它是由中国学生制作的。

然后,您可以使用JD-GUI将JAR中的类反编译为源代码。由于dex2jar应用了一些优化,因此生成的源代码应具有很好的可读性。


3

对于Android平台,您可以尝试ShowJava Play商店中提供的。

您可以通过应用界面查询生成的代码,生成的java文件和文件夹结构存储在中的ShowJava文件夹中/sdcard.jar转换文件。

该应用程序是免费的,在主视图的底部带有一个广告横幅,但是有一个应用程序内购买选项(3,99 $)可以将其删除。应用内购买除了删除广告横幅外,没有添加任何功能。

披露:我既不是该应用程序的开发人员,也不以任何方式与他有任何关系。


我通常将其用于...漂亮的应用程序
Rahul Kushwaha

2

请按照以下步骤进行操作,或者在此过程中仅使用apkToJava gem,它甚至还要安装所需的工具才能使其正常工作。

  • 将apk文件转换为zip
  • 解压缩文件
  • 从中提取classes.dex
  • 使用dex到jar来将classes.dex转换为jar文件
  • 使用jadx gui以Java源代码打开jar文件

2

如果您正在寻找专业的替代产品,请查看JEB Decompiler PNF Software的。

有一个演示版,可以让您反编译大多数代码。



2

在Android Studio 3.5中,操作非常简单,只需一分钟即可完成。以下是一个逐步的过程。

1:打开Android Studio,按窗口按钮->输入Android Studio->单击图标以打开android studio初始屏幕,如下所示。

在此处输入图片说明

2:在这里您可以看到一个选项“配置文件或调试APK”,单击它并选择您的apk文件,然后按确定。

在此处输入图片说明

3: 它将根据apk的大小在一分钟内打开所有清单和Java类。

在此处输入图片说明

而已。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.