从 APK 文件逆向工程到项目
Posted
技术标签:
【中文标题】从 APK 文件逆向工程到项目【英文标题】:Reverse engineering from an APK file to a project 【发布时间】:2012-09-25 19:41:46 【问题描述】:我不小心从Eclipse 中删除了我的项目,只剩下我转移到手机上的APK 文件。有没有办法逆转将应用程序导出到 .apk 文件的过程,以便我可以取回我的项目?
【问题讨论】:
***.com/questions/12259460/decompling-an-android-apk 你知道eclipse有自己的版本历史吗? Is there a way to get the source code from an APK file?的可能重复 如果你正在写一些对你很重要的东西,你应该使用 VCS。 Bitbucket 有免费的私有存储库。 这是标准的故事 :) 【参考方案1】:有两个有用的工具可以从未知的 APK 文件生成 Java 代码(粗略但足够好)。
从dex2jar下载dex2jar工具。
使用该工具将APK文件转换为JAR: 窗户:
$ d2j-dex2jar.bat demo.apk
dex2jar demo.apk -> ./demo-dex2jar.jar
MacOS / Linux:
$ d2j-dex2jar.sh -f demo.apk -o demo.jar
生成 JAR 文件后,使用JD-GUI 打开 JAR 文件。您将看到 Java 文件。
输出将类似于:
然后您可以使用其他工具从 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
【讨论】:
如何获取资源文件 cmd 已弃用,请改用d2j-dex2jar
(v0.0.9.15)。
@HoangHuynh 您将拥有一个带有不可读 xml 文件的 res
文件夹
为什么类名是a, b, c?
在 Mac
如果你不能使用 dex2jar : permission denied
然后这样做$sudo chmod +x d2j-dex2jar.sh
【参考方案2】:
首先我推荐this
视频,希望这能解决你所有的疑惑
如果没有,请通过它
Procedure for decoding .apk files, step-by-step method:
Step 1:
创建一个新文件夹并将 .apk 文件放入其中(您要解码)。现在将这个.apk
文件的扩展名重命名为.zip
(例如:从filename.apk重命名为filename.zip)并保存。
如果转换成.zip有问题请参考link
在获得 .zip 之后,现在您将获得 classes.dex 文件等。在这个阶段您可以看到可绘制但看不到 xml 和 java 文件,所以继续。 如果您没有看到扩展,请检查配置
Step 2:
现在将这个 zip apk 文件解压缩到同一文件夹中。现在从link
下载dex2jar
并将其解压缩到同一个文件夹。现在打开命令提示符并将目录更改为该文件夹。
然后写dex2jar classes.dex
并按回车键。现在您在同一文件夹中获得了classes.dex.dex2jar
文件。
然后下载java decompiler
现在双击 jd-gui 并单击打开的文件。然后从该文件夹中打开classes.dex.dex2jar
文件。现在你得到类文件并通过 src 名称保存所有这些类文件(单击文件然后单击 jd-gui 中的“保存所有源”)。解压那个zip文件(classes_dex2jar.src.zip)
,你会得到应用程序的所有java文件。
在这个阶段你得到了java源但是xml文件仍然不可读,所以继续。
Step 3:
现在打开另一个新文件夹并放入这些文件
把你要解码的.apk 文件放进去
为windows v1.x
和Apktool
下载Apktool
使用谷歌安装窗口并放在同一个文件夹中
使用google下载framework-res.apk文件并放在同一个文件夹中(并非所有apk文件都需要framework-res.apk文件)
打开命令窗口
导航到 APKtool 的根目录并输入以下命令:
apktool if framework-res.apk.
上面的命令应该是Framework installed ...
。
-
apktool d "appName".apk("appName" 表示您要解码的应用程序)现在您在该文件夹中获得了一个文件夹,现在您也可以轻松读取 xml 文件了。
Step 4:
最后我们得到了res/
以及项目的java代码,这是我们开始的目标。
是否安装了 Java 1.7? 安装 Apktool 2.x 是否安装了 Java 1.6 或更高版本? 安装 Apktool 1.x
P.S.
如果您无法通过上述步骤获取 res 文件夹,请安装新的apktool
Enjoy and happy coding
【讨论】:
真的很有用。只是你没有提到的东西:apktool.jar
不在同一个包中,我从以前的包中得到它并将其粘贴到与apktool
相同的目录中。
我对代码进行了逆向工程,但是为什么类名,变量像aa,bc,e.t.c,还有很多错误
在 cmd 中无法做到这一点
还有其他方法吗?
@user2934930 这意味着代码已经使用 ProGuard 进行了混淆。【参考方案3】:
没有软件,也没有太多的步骤..
只需上传您的 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
我们可以在我们的安卓手机中反编译apk文件。我们还可以查看此应用程序中的 java & xml 文件
更新 3:
我们可以使用 Android studio 2.2 版本中的另一个选项 Analyze APK 功能
构建 -> 分析 APK -> 选择您的 APK -> 它给出结果
【讨论】:
在最后一个方法中我们无法打开java类,只显示方法名 @Choletski 你在尝试 ShowJava 吗?如果没有尝试更新我 @RanjithKumar 其 APK 大小限制为 50 MB。我有一个 85 MB APK 需要反编译。 @RaviSharma 试试这个play.google.com/store/apps/details?id=in.pounkumar.apkextractor 如何在android studio中运行那个反编译的项目?任何人都可以写一下这个。【参考方案4】:在 Android Studio 3.5 中,这非常容易,您只需一分钟即可完成。 以下是一个循序渐进的过程。
1:打开Android Studio,按下窗口按钮->输入Android Studio->点击图标打开android studio启动画面,如下所示。
2:在这里您可以看到一个选项“Profile or debug APK”点击它并选择您的 apk 文件并按确定。
3: 根据 apk 的大小,它将在一分钟内打开所有清单和 java 类。
就是这样。
【讨论】:
这个解决方案没有给我任何类型的 java 文件【参考方案5】:不是真的。有许多 dex 反汇编器/反编译器套件 such as smali 或 dex2jar 将生成半人类可读的输出(在 dex2jar 的情况下,您可以通过使用类似 JD-GUI 的东西来获取 java 代码,但是过程并不完美,您不太可能 100% 重新创建源代码。但是,它可能为您提供一个开始重建源代码树的地方。
【讨论】:
【参考方案6】:有一种新方法可以做到这一点。
Android Studio 2.2 有 APK Analyzer,它会提供很多关于 apk 的信息,在这里查看:- http://android-developers.blogspot.in/2016/05/android-studio-22-preview-new-ui.html
【讨论】:
【参考方案7】:是的,您可以取回您的项目。只需将 yourproject.apk
文件重命名为 yourproject.zip
,您将获得该 ZIP 文件中的所有文件。我们正在将文件扩展名从 .apk 更改为 .zip。从该 ZIP 文件中提取 classes.dex
文件并按以下方式进行反编译。
首先,您需要一个工具来将 DEX 上的所有(已编译)类提取到 JAR。 有一个叫dex2jar,是中国学生做的。
然后,您可以使用JD-GUI 将JAR 中的类反编译为源代码。生成的源代码应该非常可读,因为 dex2jar 应用了一些优化。
【讨论】:
【参考方案8】:对于 Android 平台,您可以尝试 ShowJava,可在 Play 商店中找到。
您可以通过应用程序界面查看生成的代码,生成的java文件和文件夹结构存储在/sdcard
的ShowJava
文件夹中,与转换生成的.jar
文件一起。
该应用是免费的,主视图底部有一个广告横幅,但有一个应用内购买选项(3.99 美元)可以将其删除。除了移除广告横幅外,应用内购买不会添加任何功能。
披露:我不是该应用程序的开发者,也与他没有任何关系。
【讨论】:
【参考方案9】:试试这个工具:https://decompile.io,它可以在 iPhone/iPad/Mac 上运行
【讨论】:
【参考方案10】:按照以下步骤执行此操作,或简单地使用 apkToJava gem 进行此过程,它甚至会负责安装所需的工具以使其工作。
将 apk 文件转换为 zip 文件 解压文件 从中提取 classes.dex 使用dex转jar将classes.dex转成jar文件 使用jadx gui打开jar文件为java源代码【讨论】:
【参考方案11】:如果您正在寻找专业的替代方案,请查看 PNF Software 的 JEB Decompiler。
有一个演示版可以让你反编译大部分代码。
【讨论】:
【参考方案12】:以下是一些可用于执行从 APK 文件到源代码的逆向工程的工具:
-
Dex2jar
Java 反编译器
Apktool
Apk 分析器
【讨论】:
【参考方案13】:您可能想要使用的另一个工具是APK Studio 它依赖于第三方工具:Apktool、jadx、ADB 和 Uber APK 签名器,您需要单独下载。
【讨论】:
以上是关于从 APK 文件逆向工程到项目的主要内容,如果未能解决你的问题,请参考以下文章
有没有反编译工具,可以把APK完全反成一个android项目的? , 这个android逆向助手只
Android 逆向APK 文件格式 ( Android 应用安装 | Zip 文件格式 | 使用 Python 代码提取 APK 文件 )