APK逆向 ZIP格式相关问题

由于经常分析apk,apk的格式就是zip,遇到了一些关于zip格式的问题,所以记录一下zip格式相关的问题,具体格式解析到处都有

附上官方文档:https://pkware.cachefly.net/webdocs/APPNOTE/APPNOTE-6.2.0.txt

1 加了密码的的APK

apk有密码肯定是无法安装的,所以用解压缩工具打开apk文件时,提示要密码,肯定是密码标志位被修改了。
正常的标志位在504b0102后面第5、6个字节

十六进制

50 4B 01 02 0A 00 0A 00 00 00
-- -- -- -- -- -- -- -- ^^ ^^ 箭头所指的两个字节

最简单的方法就是搜索50 4B 01 02直接吧后面这两个字节改为00 00
真正标记是否加密只用到了一个bit,两个字节共16个bit,最低位表示是否加密

二进制

0000 0000 0000 0000
---- ---- ---- ---^  1表示加密了

2 multi disk

zip格式很老,很久以前用软盘、光盘存数据时,由于容量限制,一个zip可能要分几个软盘存储,所以文件格式中有记录当前磁盘序号的内容

官方文档搜索06054b50(zip文件尾部的标记),可以看到紧接着的两个字节就是number of this disk,标记了当前是第几个磁盘,接下来的两个字节标记了zip文件是从第几个磁盘开始的。

现在已经不需要分磁盘存储zip了,所以一般的zip文件这里都是00 00 00 00,有些apk为了对抗分析,就吧这个值修改一下,部分分析工具使用的是专门解析zip格式(没有专门针对apk优化过)的库来解压apk,就没法正常分析了。

搜索50 4B 05 06吧后面的这几个字节改成00 00 00 00就行了

3 Entries数量不对

有些apk用jeb打开后,无法正常解析,报错Expected an int at offset 336020Fh

image.png

而这个offset,就是apk的末尾,用010打开后用zip模板解析,最后的zip尾部结构如下图,第4,5个数字都是Entries数量,OnDisk可以猜出是在当前软盘的Entries数量(参见上面的multi disk),但是现在已经不用软盘,zip都是在一个硬盘中存储,所以这个数量与下面的InDirectory的数量应该保持一致。EntriesOnDisk数量修改成2322后即可正常解析apk。


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容