zip
文件结构可分为三部分:
- 压缩源文件数据区
- 压缩文件目录区
- 压缩源文件目录结束标志
压缩源文件数据区全局方位标记
压缩源文件数据区第7号是判断压缩包是否有伪加密的重要标志、第8两个字节09 00
。ZIP压缩源文件数据区全局方位标记
在010 Editor
在显示的文件结构中ushort frFlags
。
压缩文件目录区全局方位标记
伪加密的关键是压缩文件目录区的第9个、第十个字节。ZIP压缩文件目录区全局方位标记
在010 Editor
在显示的文件结构中ushort deFlags
。
- 无加密ZIP:
压缩源文件数据区
全局方式位置标记应为00 00
且压缩源文件目录区
全局方式位置标记应为00 00
- 真正加密的ZIP:
压缩源文件数据区
全局方式位置标记应为09 00
且压缩源文件目录区
全局方式位置标记应为09 00
- 伪加密ZIP:
压缩源文件数据区
全局方式位置标记应为00 00
且压缩文件目录区
全局方式位置标记应为09 00
- 第一种方法:直接修改:
压缩文件目录区
将整体模式位标记为偶数,即可解压 - 第二种方法:有些压缩软件可以直接无视伪加密解压,例如:WinRAR、7zip、360压缩
- 第三种方法:Java写的小工具
ZipCenOp.jar
,Java环境需要在cmd中运行java -jar ZipCenOp.jar r xxx.zip
即可解压
RAR的伪加密原理与ZIP的伪加密原理相同,导致伪加密的关键在于指定的位标记字段。
PS:一般RAR伪加密的压缩包用WinRAR打开时会显示文件头损坏
RAR的第一个24
也就是说,字节010 Editor
在显示的文件结构中ubyte PASSWORD_ENCRYPTED
修改其字段为字段1
RAR伪加密可以实现。
或者修改第11
也就是说,字节010 Editor
在显示的文件结构中ubyte BLOCK_HEADERS_ENCRYPTED
字段值。修改为1
可导致RAR伪加密。
