这里简单介绍一下我认识的apk。对于apk 的理解其实也是逆向的基础内容,对于apk的理解和熟悉程度能直接影响我们对逆向过程的理解,也能给我们逆向过程提供更开阔是思路。
主要包括三个内容:
一、apk的包结构
二、apk的打包过程
三、apk的安装过程
四、apk加载/(启动运行)过程
先来看看apk的包结构:
其实我们的apk 也好,jar 也好,其实都是可以看做是一个zip压缩包的。不信的可以自己使用zip工具浏览下压缩包结构。
我们这里随便找一款apk,然后解压开。就可以看到类似以下的结构:
其中各个文件夹存放的内容如下:
assets 资源文件(图片、音频、数据库、网页、配置文件等)
res 资源文件,需要编译(布局layout),还有一些drawable, menu,之类的文件
libs 存放一些第三方的jar包,这个跟一般的java代码类似
META-INF
存放文件摘要,摘要加密和签名证书等,可以看到对apk中所有的资源都进行了一次hash运算,为了防止apk的文件被修改,如果其中的文件别修改就能被检测出来,很多apk都会做这个校验,以保证apk的安全
META-INF/CERT.RSA 公钥以及加密算法的描述
META-INF/CERT.SF
加密文件,它是使用私钥对摘要明文加密后得到的密文信息,只有只用私钥匹配的公