1.字节读取apk文件
2.直接处理末22个字节的EOCD区域[不含有注释情况下]
offset | bytes | 说明 |
---|---|---|
0 | 4 | signature,为0x06054b50 |
4 | 2 | 当前磁盘编号,无用 |
6 | 2 | 核心目录开始位置的磁盘编号,无用 |
8 | 2 | 该磁盘上锁记录的核心目录数量,无用 |
10 | 2 | Central Directory结构总数 |
12 | 4 | Central Directory大小 |
16 | 4 | Central Directory偏移 |
20 | 2 | 注释长度 |
22 | n | 注释内容 |
3.取得Central Directory偏移大小Offset_CD
offset | bytes | 说明 |
---|---|---|
0 | 8 | v2签名区大小(该8个字节不包含在签名区大小计算内) |
8 | n | key-value内容 |
Offset_CD-24 | 8 | v2签名区大小 |
Offset_CD-16 | 16 | 魔数 APK Sig Block 42 |
4.根据Offset_CD向上偏移16字节,获取签名区魔数APK Sig Block 42
4.魔数向前8字节,获得该block区大小
5.Offset_CD向上(block区大小的值+8),获取另外一个不计算大小在内的block区大小的值进行验证,需要两者一致。
6.往key-value区域写入自定义的数据,修改开头和结尾的v2签名区大小,修改Offset_CD的值即可
下面介绍key-value内容:
首先是8个字节,表示是接下来的key-value的内容大小content_length。
随后4个字节代表key
随后content_length-4代表value的大小
网友评论