Zip文件解析与利用

我们知道android的apk文件实质就是一个zip文件,所以对于zip文件的研究是非常有必要的。

一、Zip文件结构

1、Zip文件可以包含多个使用不同压缩方式甚至不压缩的文件。
2、File Entry表示一个文件实体,一个压缩文件中有多个文件实体
3、文件实体由一个头部、文件数据和数据描述符组成(压缩后的,压缩算法在头部有说明)
4、Central Directory由多个File header组成,每个File header都保存一个文件实体的偏移
5、文件最后由一个叫End of central directory的结构结束

这里写图片描述

从上面可以知道可以通过Central Directory中的File header确定每个文件实体的位置,并且可以通过遍历Central Directory获取File header的个数来确定文件实体的个数。

---------------------------------------
[local file header 1]            |
[file data 1]               File Entry 1
[data descriptor 1]              |
---------------------------------------
    . 
    .
    .
---------------------------------------
[local file header n]            |
[file data n]               File Entry n
[data descriptor n]              |
---------------------------------------
[File header 1]                  |
                         [central directory]
[File header n]                  |
---------------------------------------
[end of central directory record]
---------------------------------------

1.1. File Entry结构
1.1.1. local file header 文件头
这里写图片描述

1.1.2.file data 文件数据

记录了相应压缩文件的数据

1.1.3.data descriptor 数据描述符

用于标识该文件压缩结束,该结构只有在相应的local file header中通用标记字段的第3bit设为1时才会出现,紧接在压缩文件源数据后。

这里写图片描述

1.2. Central Directory
1.2.1. File Header

这里写图片描述

1.3. End of central directory record

这里写图片描述

参考文章:
Zip文件结构
ZIP文件格式分析

二、Zip伪加密

Zip伪加密就是修改Central Directory中的文件的文件头File Header的标志位,如下图所示。

这里写图片描述

50 4B 01 02:目录中文件文件头标记(0x02014b50)
1F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密,00 00 改为09 00或者01 00即可完成伪加密)
08 00:压缩方式
07 76:最后修改文件时间
F2 48:最后修改文件日期 
......
......

这里写图片描述

在Android应用保护中之前被用到,因为Android系统对于Apk的解析中跳过了文件头,所以当这个字段修改为加密的时候,就可以防止apk被人解压,但是不会影响apk的安装。但是这个漏洞的利用在android4.3之后就不行了

参考文章:
Apk伪加密实现与破解JAVA源码
APK伪加密制作和解密
classes.dex有密码保护,无法解压出来
zip相关加密破解总结

三、zip注释字段的利用

在zip文件的文件末尾有两个字段Comment length和Comment,分别表示注释长度和注释内容,在我们的apk中Comment length为0,Comment为空,我们可以在Comment中追加我们需要的内容,例如渠道号,但是它不会对apk造成破坏,下图所示。

这里写图片描述

全面K歌app的增量升级方案使用的就是这个来为apk添加渠道号,这样就可以在一个apk写入不同的渠道号进行下发而不需要编译多个apk下发。

参考文章:
全民K歌增量升级方案

欢迎关注微信公众号:DroidMind
精品内容独家发布平台


呈现与博客不一样的技术干货

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值