您的位置  > 互联网

apk怎么办?怎么解决?包怎么解压?

根据我的理解,apk文件更像是一个zip包。 可以直接将上面的后缀名.apk改为.zip即可。 然后解压,目录结构大概是这样的:

但是,不同的 apk 可能有不同的目录。 当然不用我说大家应该都知道,如果直接打开这个文件,肯定看不懂,所以这里就不贴出打开文件的截图了。

二:解压出来的这些东西到底是什么?

当然,这绝对不是我自己编出来的。 这是从别人那里“借来的”。 如果你想进一步了解apk是什么,可能需要了解apk的具体构建过程。 由于我对这个话题理解不深,所以在这里找到了一篇文章。 如果您有兴趣,可以看一下:

三:反编译三件套

现在的编译工具有很多,比如-、、-Crack-Tool(Mac专用)。 但我权衡了一下,最终决定使用更传统的三件套。 因为毕竟是一个学习的过程,所以首选一定是流行的、常用的工具。

工具介绍:

1.

功能:资源文件获取,可提取图片文件和布局文件使用和查看

2.

功能:将apk反编译成java源代码(将.dex转换成jar文件)

3.jd-gui

功能:查看apk中.dex转换成的jar文件,即源代码文件

四:反编译过程

1、反编译apk,获取程序的源代码、图片、XML配置、语言资源等文件

使用,至于下载链接,CSDN上有,然后把需要反编译的apk放到同一个文件夹下,像这样:

然后在当前文件夹下执行命令行:

你的 apk 的名称是什么,应该写在这里。 然后会出现一个以您的 apk 命名的文件夹。 当我打开它时,它看起来像这样:

了解过这个的朋友一定对smali很熟悉。 上图中的smali文件夹可以直接打开。 里面的文件结构和目录与原来的java文件目录一致。 然而里面的文件并不是我们熟悉的java代码。 这里我对smali做一些简单的解释。

虚拟机并不是执行Java虚拟机JVM编译后生成的class文件,而是执行并重新集成包后生成的dex文件。 dex文件反编译后就是smali代码。 可以说smali语言是最好的反汇编语言。 它也有自己的语言格式和一套完整的语言系统,但我对此了解不多,这里就不详细说了。

(提示:Smali是冰岛语编译器的名字,也许你会问为什么是冰岛语,因为它是冰岛一个渔村的名字。看完阿根廷vs冰岛,我也对冰岛更感兴趣了,所以我在此插入一句话……)

然后当你打开文件时,它会是这样的(非常清晰的格式):

我对一些部分进行了编码,但其实这些编码的地方也是可以看到的。

res中当前的布局显示是这样的,也可以直接看到(这里我是直接打开的,没有格式化):

2.反编译apk获得Java源代码

(提示:这一步比较复杂,如果不想反编译,可以跳过这一步,直接得到结果)

解压下载的jd-gui。 将待反编译的apk后缀更改为.zip。 然后解压并打开如上所示的目录,里面会有一个.dex。 然后把这个.dex文件放入你刚刚解压的-2文件夹中,也就是这个文件夹(解压后的-2.0.zip的文件夹):

里面会有很多命令文件,然后把.dex文件放到这个文件夹里。 像这样:

然后在当前文件夹中打开命令行并执行:

然后会生成一个-.jar文件夹:

然后你以为到这里就结束了。哈哈,其实没有,我们刚才介绍的三件套只用了两件,还有一件jd-gui最后没有用。

3.使用jd-gui打开-.jar查看源码

jd-gui文件解压后,里面会有一个jd-gui.exe。 直接使用该工具打开上一步得到的-.jar。

这里可以看的比较清楚,但是有些地方不太合理,可能是因为有些混乱。 至于混淆和反混淆,这部分的内容比较多,所以我打算在下一篇博客中详细介绍。

五:总结

最后总结一下,主要负责获取res中的文件和xml配置文件。 从名字就可以看出,就是将dex文件转换成jar文件。 其实从jd-gui的名字就可以猜到,GUI--->User,图形用户界面,用来打开上一步得到的jar文件(图形界面)。

但其实还是有很多小问题,比如如何完美的拿到源码,而不是混入一些混乱的东西。 比如jd-gui得到的class文件可以一键导出还是可以直接转成java文件运行? 比如我通过上述步骤得到的可视化界面中很明显没有显示这个apk的主要功能代码(可能是因为使用了jar和aar的原因?怎么解决?无法反汇编一一)等等,这也算是给自己留了几个坑。 同时学习和思考。

本来我打算写一些技术文章,但是由于我们公司的老板太牛逼了,所以我没敢为所欲为。 所以我做了这个反编译公司软件的总结和分享。 这是我第一次反编译apk。 做的过程中还是遇到了很多问题,但是我都大致解决了,最后勉强完成了。 如果大家对以上问题有了答案,请不吝赐教。 谢谢阅读。