我的笔记本电脑上的硬盘驱动器崩溃了,我丢失了过去两个月一直在处理的应用程序的所有源代码 . 我所拥有的是从我发送给朋友时存储在我的电子邮件中的APK文件 .
有没有办法从这个APK文件中提取我的源代码?
这个网站https://www.apkdecompilers.com/自动完成了 .
我首先尝试了在接受的答案中提到的网站,但这对我不起作用 .
apktool 是要走的路 . 在线apktool服务也存在:http://www.javadecompilers.com/apktool
由于服务“在线性质”,显然存在一些限制:您可以提取和研究资产和清单文件,但目前无法重新编译应用程序 .
不过,这是一个“打开”Android应用程序的麻烦方式 .
apktool是你可以尝试的最好的东西 . 我用它保存了一些xml,但说实话,我不知道它将如何与.java代码一起使用 .
即使你是唯一的编码器,我也会建议你有一个代码库 . 我一直在使用Project Locker来完成自己的项目 . 它为您提供免费的svn和git回购 .
我将向您展示反编译 .apk 文件的其他方法 .
您可以按照“ prankul garg ”的前两个步骤操作 . 所以你有另一个机会:
Step 3':
下载 "JD-GUI" ,很容易找到这个 . 在"jd-gui.exe"中打开 .jar 文件 . (文件>打开文件>'找到你的 .jar 文件') . 完成此过程后,您可以将所有资源保存在 .zip 文件中 .
所以,
1st - 您必须将 .apk 文件重命名为 .zip
第二 - 您必须解码 .dex 文件(如果需要,将 .apk 文件解码为 dex2jar ,这是可能的)
3 - 您必须使用 JD-GUI 解码 .jar 文件
在Play Store上还有一个新的应用程序,可以用它来反编译apk(系统应用程序)并直接在智能手机上查看源代码 . 它将文件保存到SD卡,以便您也可以在计算机上查看 . 它不需要root或其他东西 .
只需安装并享受乐趣 . 我认为这是反编译应用程序的最简单方法 .
以下 ONLINE 工具:
http://www.javadecompilers.com/apk
它只需点击一下就可以了:反编译 .java files + resources + xml (在一个.zip文件中)有非常好的反编译器(jadx返回地方/函数中的java代码,其他编译返回函数内的注释,如"unable to decompile"或某些android汇编程序/机器代码)
我个人推荐 Show Java Android App 来获取源代码 . 您可以从Play商店或here下载它
这两篇文章描述了如何结合使用 apktool 和 dex2jar 获取 APK 文件并创建可以构建和运行它的Eclipse项目 .
apktool
dex2jar
APK
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 获取包含Eclipse所需格式的类的jar文件 .
创建一个Eclipse项目,将其指向资源文件和新的jar文件
使用zip实用程序打开jar文件并删除现有资源
使用 JDGui 打开jar文件以查看源代码
JDGui
从 JDGui 获取所需的任何源代码,将其粘贴在Eclipse内的类中并进行修改
从jar文件中删除该类(因此您没有多次定义相同的类)
运行它 .
虽然您可能能够反编译 APK 文件,但您可能会遇到一个大问题:
它不会返回你写的代码 . 相反,它将返回编译器内联的任何内容,变量给定随机名称,以及给定随机名称的函数 . 尝试将其反编译并恢复到您拥有的代码中可能需要更多的时间,而不是重新开始 .
可悲的是,像这样的事情已经扼杀了很多项目 .对于未来,我强烈建议学习版本控制系统,如 CVS , SVN 和 git 等 .
以及如何支持它 .
apktool会工作 . 您甚至不需要知道密钥库来提取源代码(这有点可怕) . 主要缺点是源代码以Smali格式而不是Java格式呈现 . 其他文件,如icon和main.xml虽然完美无缺,但至少可以恢复它们 . 最终,您很可能需要从头开始重新编写Java代码 .
你可以找到apktool here . 只需下载apktool和相应的帮助程序(适用于Windows,Linux或Mac OS) . 我建议使用7-zip等工具打开包装 .
这是另一种描述 - 以防万一有人坚持上述描述 . 按照步骤:
从http://ibotpeaches.github.io/Apktool/install/下载apktool.bat(或Linux的apktool)和apktool_<version>.jar
将jar文件从上面重命名为 apktool.jar 和将两个文件放在同一个文件夹中
apktool.jar
打开一个dos框( cmd.exe )并切换到该文件夹;验证是否已安装Java环境(对于Linux,请检查有关所需库的说明)
cmd.exe
开始: apktool decode [apk file]中间结果:资源文件, AndroidManifest.xml
apktool decode [apk file]
AndroidManifest.xml
使用您选择的解包器解压缩APK文件中级成绩: classes.dex
classes.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
dex2jar-0.0.9.15.zip
将_74708拖放到 dex2jar.bat (或在DOS框中输入 <path_to>\dex2jar.bat classes.dex ;对于Linux使用 dex2jar.sh )中级结果: classes_dex2jar.jar
dex2jar.bat
<path_to>\dex2jar.bat classes.dex
dex2jar.sh
classes_dex2jar.jar
unpack classes_dex2jar.jar (可能是可选的,具体取决于使用的反编译器)
反编译您的 class 文件(例如JD-GUI或DJ Decompiler)结果:源代码
注意:不允许反编译第三方包;本指南仅用于从APK文件中恢复个人源代码;最后,生成的代码很可能会被混淆
Apktool 用于逆向工程第三方,封闭式,二进制Android应用程序 .
它可以将资源解码为近乎原始的形式,并在进行一些修改后重建它们 .
它可以逐步调试smali代码 . 此外,它使得使用应用程序更容易,因为类似项目的文件结构和一些重复性任务的自动化,如构建apk等 .
http://ibotpeaches.github.io/Apktool/
有几种方法可以做到这一点:
它允许您在Android Studio中打开和浏览APK . 类被反编译成smali . 没有提取资源,如果没有源代码(android studio 3.0 canary 9),像"Go to Definition","Find All References"和调试这样的东西都行不通 . 一些额外的smali功能可能适用于smalidea .
Jadx将给定APK中的代码反编译为java源文件 .
Apktool是一个命令行工具,它为给定的apk提取资源并将代码反编译为smali . 你也可以使用apktool重新编译 . 以下是它的实际应用示例:
$ apktool d test.apk I: Using Apktool 2.2.4 on test.apk I: Loading resource table... I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: 1.apk I: 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 test I: Using Apktool 2.2.4 on test I: 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...
可能很容易看到来源:
在Android studio 2.3中, Build -> Analyze APK -> Select the apk that you want to decompile .你会看到它的源代码 .
Build -> Analyze APK -> Select the apk that you want to decompile
Linf供参考:https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2
你可以试试DexPatcher . 它甚至可以与Android Studio集成 . 它在内部使用Apktool和Dex2Jar .您也可以单独使用这些工具 . Apktool反编译apk,并提取.dex文件,可以使用Dex2Jar进一步转换为jar . Jar可以使用JD-GUI进行反编译 . 您可以在该工具的帮助下查看Java代码 . 虽然反编译代码与实际代码的相似性无法保证 . 市场上有一些先进的code obfuscation工具,它们使代码变得混乱,使其难以反编译/理解 . 例如 . Proguard的
简单方法:使用在线工具http://www.javadecompilers.com/apk,上传apk并获取源代码 .
解码.apk文件的步骤,循序渐进的方法:
创建一个新文件夹并复制要解码的.apk文件 .
现在将此.apk文件的扩展名重命名为.zip(例如,从filename.apk重命名为filename.zip)并保存 . 现在你可以访问classes.dex文件等 . 在这个阶段你可以看到drawables而不是xml和java文件,所以继续 .
现在在同一文件夹(或新文件夹)中提取此.zip文件 .
Download dex2jar并将其解压缩到同一文件夹(或新文件夹) .
将classes.dex文件移动到dex2jar文件夹中 .
现在打开命令提示符并将目录更改为该文件夹(或NEW FOLDER) . 然后写 d2j-dex2jar classes.dex (对于mac终端或ubuntu写 ./d2j-dex2jar.sh classes.dex )并按回车键 . 您现在在同一文件夹中有classes.dex.dex2jar文件 .
d2j-dex2jar classes.dex
./d2j-dex2jar.sh classes.dex
Download java decompiler,双击jd-gui,单击打开的文件,然后打开该文件夹中的classes.dex.dex2jar文件:现在获取类文件 .
用src名称保存所有这些类文件(在jd-gui中,单击文件 - >保存所有源) . 在这个阶段你得到了java源代码,但.xml文件仍然不可读,所以继续 .
现在打开另一个新文件夹
输入要解码的.apk文件
下载最新版本的apktool AND apktool install window(两者都可以从同一个链接下载)并将它们放在同一个文件夹中
打开命令窗口
现在运行 apktool if framework-res.apk 和next之类的命令
apktool if framework-res.apk
apktool d myApp.apk (其中myApp.apk表示您要解码的文件名)
apktool d myApp.apk
现在你在该文件夹中获得了一个文件夹,可以轻松读取apk的xml文件 .
这不是任何步骤只是将两个文件夹的内容(在这种情况下都是新文件夹)复制到单个文件夹
并享受源代码......
16 回答
这个网站https://www.apkdecompilers.com/自动完成了 .
我首先尝试了在接受的答案中提到的网站,但这对我不起作用 .
apktool 是要走的路 . 在线apktool服务也存在:http://www.javadecompilers.com/apktool
由于服务“在线性质”,显然存在一些限制:您可以提取和研究资产和清单文件,但目前无法重新编译应用程序 .
不过,这是一个“打开”Android应用程序的麻烦方式 .
apktool是你可以尝试的最好的东西 . 我用它保存了一些xml,但说实话,我不知道它将如何与.java代码一起使用 .
即使你是唯一的编码器,我也会建议你有一个代码库 . 我一直在使用Project Locker来完成自己的项目 . 它为您提供免费的svn和git回购 .
我将向您展示反编译 .apk 文件的其他方法 .
您可以按照“ prankul garg ”的前两个步骤操作 . 所以你有另一个机会:
Step 3':
下载 "JD-GUI" ,很容易找到这个 . 在"jd-gui.exe"中打开 .jar 文件 . (文件>打开文件>'找到你的 .jar 文件') . 完成此过程后,您可以将所有资源保存在 .zip 文件中 .
所以,
1st - 您必须将 .apk 文件重命名为 .zip
第二 - 您必须解码 .dex 文件(如果需要,将 .apk 文件解码为 dex2jar ,这是可能的)
3 - 您必须使用 JD-GUI 解码 .jar 文件
在Play Store上还有一个新的应用程序,可以用它来反编译apk(系统应用程序)并直接在智能手机上查看源代码 . 它将文件保存到SD卡,以便您也可以在计算机上查看 . 它不需要root或其他东西 .
只需安装并享受乐趣 . 我认为这是反编译应用程序的最简单方法 .
以下 ONLINE 工具:
http://www.javadecompilers.com/apk
它只需点击一下就可以了:反编译 .java files + resources + xml (在一个.zip文件中)有非常好的反编译器(jadx返回地方/函数中的java代码,其他编译返回函数内的注释,如"unable to decompile"或某些android汇编程序/机器代码)
我个人推荐 Show Java Android App 来获取源代码 . 您可以从Play商店或here下载它
这两篇文章描述了如何结合使用
apktool
和dex2jar
获取APK
文件并创建可以构建和运行它的Eclipse项目 .基本上你:
使用
apktool
从apk获取资源文件使用
dex2jar
获取包含Eclipse所需格式的类的jar文件 .创建一个Eclipse项目,将其指向资源文件和新的jar文件
使用zip实用程序打开jar文件并删除现有资源
使用
JDGui
打开jar文件以查看源代码从
JDGui
获取所需的任何源代码,将其粘贴在Eclipse内的类中并进行修改从jar文件中删除该类(因此您没有多次定义相同的类)
运行它 .
虽然您可能能够反编译
APK
文件,但您可能会遇到一个大问题:它不会返回你写的代码 . 相反,它将返回编译器内联的任何内容,变量给定随机名称,以及给定随机名称的函数 . 尝试将其反编译并恢复到您拥有的代码中可能需要更多的时间,而不是重新开始 .
可悲的是,像这样的事情已经扼杀了很多项目 .
对于未来,我强烈建议学习版本控制系统,如 CVS , SVN 和 git 等 .
以及如何支持它 .
apktool会工作 . 您甚至不需要知道密钥库来提取源代码(这有点可怕) . 主要缺点是源代码以Smali格式而不是Java格式呈现 . 其他文件,如icon和main.xml虽然完美无缺,但至少可以恢复它们 . 最终,您很可能需要从头开始重新编写Java代码 .
你可以找到apktool here . 只需下载apktool和相应的帮助程序(适用于Windows,Linux或Mac OS) . 我建议使用7-zip等工具打开包装 .
这是另一种描述 - 以防万一有人坚持上述描述 . 按照步骤:
从http://ibotpeaches.github.io/Apktool/install/下载apktool.bat(或Linux的apktool)和apktool_<version>.jar
将jar文件从上面重命名为
apktool.jar
和将两个文件放在同一个文件夹中打开一个dos框(
cmd.exe
)并切换到该文件夹;验证是否已安装Java环境(对于Linux,请检查有关所需库的说明)开始:
apktool decode [apk file]
中间结果:资源文件,
AndroidManifest.xml
使用您选择的解包器解压缩APK文件
中级成绩:
classes.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
将_74708拖放到
dex2jar.bat
(或在DOS框中输入<path_to>\dex2jar.bat classes.dex
;对于Linux使用dex2jar.sh
)中级结果:
classes_dex2jar.jar
unpack
classes_dex2jar.jar
(可能是可选的,具体取决于使用的反编译器)反编译您的 class 文件(例如JD-GUI或DJ Decompiler)
结果:源代码
注意:不允许反编译第三方包;本指南仅用于从APK文件中恢复个人源代码;最后,生成的代码很可能会被混淆
Apktool 用于逆向工程第三方,封闭式,二进制Android应用程序 .
它可以将资源解码为近乎原始的形式,并在进行一些修改后重建它们 .
它可以逐步调试smali代码 . 此外,它使得使用应用程序更容易,因为类似项目的文件结构和一些重复性任务的自动化,如构建apk等 .
http://ibotpeaches.github.io/Apktool/
有几种方法可以做到这一点:
它允许您在Android Studio中打开和浏览APK . 类被反编译成smali . 没有提取资源,如果没有源代码(android studio 3.0 canary 9),像"Go to Definition","Find All References"和调试这样的东西都行不通 . 一些额外的smali功能可能适用于smalidea .
Jadx将给定APK中的代码反编译为java源文件 .
Apktool是一个命令行工具,它为给定的apk提取资源并将代码反编译为smali . 你也可以使用apktool重新编译 . 以下是它的实际应用示例:
可能很容易看到来源:
在Android studio 2.3中,
Build -> Analyze APK -> Select the apk that you want to decompile
.你会看到它的源代码 .
Linf供参考:
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2
你可以试试DexPatcher . 它甚至可以与Android Studio集成 . 它在内部使用Apktool和Dex2Jar .
您也可以单独使用这些工具 . Apktool反编译apk,并提取.dex文件,可以使用Dex2Jar进一步转换为jar . Jar可以使用JD-GUI进行反编译 . 您可以在该工具的帮助下查看Java代码 . 虽然反编译代码与实际代码的相似性无法保证 . 市场上有一些先进的code obfuscation工具,它们使代码变得混乱,使其难以反编译/理解 . 例如 . Proguard的
简单方法:使用在线工具http://www.javadecompilers.com/apk,上传apk并获取源代码 .
解码.apk文件的步骤,循序渐进的方法:
第1步:
创建一个新文件夹并复制要解码的.apk文件 .
现在将此.apk文件的扩展名重命名为.zip(例如,从filename.apk重命名为filename.zip)并保存 . 现在你可以访问classes.dex文件等 . 在这个阶段你可以看到drawables而不是xml和java文件,所以继续 .
第2步:
现在在同一文件夹(或新文件夹)中提取此.zip文件 .
Download dex2jar并将其解压缩到同一文件夹(或新文件夹) .
将classes.dex文件移动到dex2jar文件夹中 .
现在打开命令提示符并将目录更改为该文件夹(或NEW FOLDER) . 然后写
d2j-dex2jar classes.dex
(对于mac终端或ubuntu写./d2j-dex2jar.sh classes.dex
)并按回车键 . 您现在在同一文件夹中有classes.dex.dex2jar文件 .Download java decompiler,双击jd-gui,单击打开的文件,然后打开该文件夹中的classes.dex.dex2jar文件:现在获取类文件 .
用src名称保存所有这些类文件(在jd-gui中,单击文件 - >保存所有源) . 在这个阶段你得到了java源代码,但.xml文件仍然不可读,所以继续 .
第3步:
现在打开另一个新文件夹
输入要解码的.apk文件
下载最新版本的apktool AND apktool install window(两者都可以从同一个链接下载)并将它们放在同一个文件夹中
打开命令窗口
现在运行
apktool if framework-res.apk
和next之类的命令apktool d myApp.apk
(其中myApp.apk表示您要解码的文件名)现在你在该文件夹中获得了一个文件夹,可以轻松读取apk的xml文件 .
第4步:
这不是任何步骤只是将两个文件夹的内容(在这种情况下都是新文件夹)复制到单个文件夹
并享受源代码......