apk的全称是,翻译成中文就是“安装包”。 既然apk是一个“包”,那就意味着里面包含了很多东西。 这让我很好奇,这里面到底是什么?
apk实际上是一个压缩文件。 将其文件扩展名更改为zip格式后可以直接解压。 今天IT之家就来解压一个应用程序安装包,带你看看里面有什么。
我们今天要做的小白鼠是微软最近推出的待办事项列表应用程序——To-Do。
▲由于apk是压缩文件,只需将其扩展名改为zip即可。
解压安装包后,我们可以看到里面有一些文件夹和文件:
应用程序的所有代码、资源和配置文件都在里面,我们一一看一下。
一,/
通常此文件夹存储一些静态文件,例如文档或字体文件。 我们以To-Do安装包为例。 其/目录下有一个名为fonts的子目录。 打开它,我们可以看到三个ttf格式的字体文件。
当然,不同类型的应用程序的安装包中包含的资源也不同。 例如,某些浏览器应用程序的/目录中包含许多html格式的文件。 这些文件可以直接用 浏览器打开:
2. /元-INF
通常这个文件夹存放的是安装包的签名证书以及安装包内所有文件的哈希值的计算结果。
应用程序安装包打包时,会对每个文件进行验证和计算,计算结果存储在/META-INF中。
我们可以直接使用文本编辑器打开后缀为MF和SF的文件,这些文件记录了这些文件的验证计算结果:
当我们安装应用程序时,系统会首先根据/META-INF中的文件验证结果来验证安装包中文件的正确性和完整性。 目的是保证安全,防止用户安装被病毒感染的文件或被恶意篡改的应用程序。
该文件夹中的RSA格式文件是开发者用于对应用程序进行签名的签名证书文件。 玩过系统的同学应该对这个词不陌生。 这也是为了保证应用和系统的安全。 签名 该文件不是纯文本格式,但是当我们用文本编辑器打开它时,我们可以看到乱码中零散的文字。
3./资源
res是res的缩写,存放应用程序的资源文件,如图片素材、布局文件等。 该文件夹下有很多子目录。
其中,anim开头的文件夹通常存放应用程序的动画效果资源;
以color开头的文件夹通常存储应用程序的各种颜色值;
文件夹开头为; 通常包含应用程序的图像或图形资源;
有些以 开头的文件夹最后会跟上 hdpi、xhdpi 等表示分辨率的字符,以适应不同分辨率的屏幕。
我们进入一个以 开头的文件夹,可以看到里面有png和webp格式的图片。 其中webp格式的图片可以用剑鱼浏览器打开:
以开头的文件夹通常包含应用程序的界面布局文件;
以 To-Do 开头的文件夹中存储应用程序图标。
4./.xml
.xml是一个单独的文件,包含很多信息,比如应用程序的包名、数据权限、接口权限、版本信息、安装参数等。此外,它还可以声明应用程序的各个组件及其属性。 声明应用程序申请的权限和流程,声明显示模式等。.xml中的信息太多,不适合单独写一篇文章。 这是一个非常重要的文件,它的名字是固定的,不能随意修改。
5./.dex
这是可以直接在虚拟机中运行的字节码。 它是由JAVA源代码复杂编译而成。 与传统的.class文件相比,dex文件运行效率更高。
6./lib
虽然这个文件夹不包含在To-Do安装包中,但它在其他应用程序安装包中的出现率还是相当高的。 通常,应用程序所依赖的一些库都存放在该文件夹中,通常以.so结尾。
有人可能会问,你带我们把apk反汇编了,但是里面有很多东西我们是看不到的。 打开后是乱码。 什么用途? 别担心,请继续阅读。
7. 应用程序反编译
是的,我们无法直接看到应用程序安装包中很多文件的内容。 例如,在To-Do应用中,其中的xml文件和dex文件用文本编辑器打开时会显示乱码。 如果你想愉快地看到这些文件的真实形式,你需要反编译它的安装包。
要反编译应用程序,我们需要做以下准备工作:
环境准备:
安装JAVA:官网地址
如何判断你的JAVA是否安装成功? 很简单,打开命令提示符并输入命令:
爪哇
如果出现如下提示,请按Enter键:
则说明JAVA安装成功。
工具准备:
:下载链接
:下载链接
jd-gui:下载地址
在开始之前,我们先来谈谈这三个工具的作用。
它的作用是把apk中那些直接打开后出现乱码的xml文件翻译成明文;
功能是将.dex转换为.jar文件;
jd-gui的功能是查看.jar文件中的源代码。
让我们开始吧。
首先我们新建一个文件夹(任何位置都可以,我是在桌面上创建的文件夹),然后把我们下载的三个工具丢进去;
将两个zip格式的压缩包解压到当前文件夹;
然后把你要处理的apk文件扔到这个文件夹的某个地方。 我所做的是在此文件夹中创建另一个名为 apk 的文件夹,并将 apk 文件放入 apk 文件夹中:
现在准备工作已经完成,我们开始翻译xml。
打开命令提示符并 cd 进入刚刚创建的用于存储这三个工具的目录。 以我的电脑为例,输入命令:
cd C:\用户\\\
接下来,输入命令:
java -jar .0.1.jar d -f [apk文件位置.apk] -o MMTS
然后按 Enter 键。
以小编的例子为例,输入:
java -jar .0.1.jar d -f C:\Users\\\\apk\todo.apk -o MMTS
如果一切顺利的话,会出现如下所示:
这时,当你来到你的三个工具所在的文件夹时,你会看到一个名为MMTS的新文件夹。 打开它,你会看到你想要的:
让我们尝试打开一个 xml 文件:
很好,这次终于不乱码了。
接下来我们反编译该应用程序的java源代码。
我们进入三个工具所在的文件夹,打开里面的-2.0文件夹,将apk包中的.dex丢进去。
打开命令提示符,cd到-2.0所在目录;
输入命令:
d2j-.dex
进入。
如果一切顺利的话,会出现如下所示:
这时候我们回到-2.0文件夹,可以看到一个新生成的文件,名为-.jar,这就是我们需要的文件。
我们进入三个工具所在的文件夹,打开里面的jd-gui--1.4.0文件夹,双击jd-gui.exe运行jd-gui。
点击文件-打开文件,选择我们刚刚得到的-.jar,打开,就可以看到应用程序的JAVA源代码。
需要注意的是,在某些应用中,它们的类是被混淆的(比如To-Do,如下所示):
里面的类文件名和方法名都采用a、b、c...的命名方式
这样做是为了防止反编译,但即便如此,我们通过反编译得到的源代码也并非不可读。
好了,今天我们分析了应用程序安装包的结构以及里面的文件和文件夹的功能。 我们甚至通过反编译看到了源代码。 如果您是应用程序开发的初学者,想要对一个apk进行反汇编并安装进行研究和参考,希望这篇文章能够对您有所帮助。
从
相关文章