ZIP伪加密

zip伪加密是misc中的一种题型。ZIP伪加密是一种特殊的压缩包加密方式,它并不是真正的加密,而是通过修改ZIP文件头的加密标志位来欺骗某些压缩软件认为文件是加密的。 可以使用一些十六进制工具如010 Editor,HxD等来判断是否为伪加密

下面以BUUCTF-MISC-zip伪加密为例具体讲解。

刚开始尝试解压,看到了flag.txt文件,但需要解压密码。暴力破解后没有结果。将文件在010 Editor中打开,分析它的文件格式,修改相关参数。

放进010Editor中如下图

需要了解相关知识

一个zip文件由三部分组成:压缩源文件数据区 压缩源文件目录区 压缩源文件目录结束标志。

1 压缩源文件数据区:50 4B 03 04:这是头文件标记  14 00:解压文件所需 pkware 版本(pk就是压缩包的意思) 00 00:全局方式位标记(判断有无加密) 08 00:压缩方式  

2.压缩源文件目录区: 50 4B 01 02:目录中文件文件头标记 (0x02014b50) 1F 00:压缩使用的 pkware 版本 14 00:解压文件所需 pkware 版本 00 00:全局方式位标记(判断是否为伪加密) 08 00:压缩方式

3.压缩源文件目录结束标志: 50 4B 05 06:目录结束标记 00 00:当前磁盘编号 00 00:目录区开始磁盘编号 01 00:本磁盘上纪录总数 01 00:目录区中纪录总数 59 00 00 00:目录区尺寸大小 3E 00 00 00:目录区对第一张磁盘的偏移量 00 00:ZIP 文件注释长度

全局方式位标记的四个数字中只有第二个数字对其有影响,其它的不管为何值,都不影响它的加密属性,即: 第二个数字为奇数时 –>加密 第二个数字为偶数时 –>未加密

1 zip伪加密实现.伪加密的ZIP文件在压缩源文件数据区的全局加密标记上通常保持为00 00,表示数据区本身没有加密。

2.关键在于压缩源文件目录区的全局方式位标记。为了制造伪加密效果,这个标记被修改为09 00(或其他以奇数结尾的两位数字)。这样,当尝试打开这个ZIP文件时,软件会识别为加密文件,并提示输入密码

那为什么是压缩源文件目录区呢?

数据区主要是存储实际的数据内容,而目录区则记录了文件结构信息。 虽然数据区的全局方式位标记也能反映一些加密状态,但目录区的标记对于判断文件是否为伪加密更为直接和关键。因为伪加密通常是通过修改目录区的标记来制造假象,而数据区的标记可能受到其他因素的影响,不如目录区的标记那么具有确定性。

以下几种常见的形式:

未加密:文件头中的全局方式位标记为00 00 目录中源文件的全局方式位标记为00 00

伪加密:文件头中的全局方式位标记为00 00 目录中源文件的全局方式位标记为09 00

真加密:文件头中的全局方式位标记为09 00 目录中源文件的全局方式位标记为09 00

注意也不一定要09 00或00 00,只要是奇数都视为加密,而偶数则视为未加密。

注意如果两个区域都被标记为  09 00  需要进一步分析文件的其他部分来确定文件的真实加密状态。在处理这种情况时,可以尝试将两个位置的标记都改回  00 00  ,然后尝试解压文件,看是否需要密码。如果不需要密码,那么文件可能被错误地标记为加密;如果仍然需要密码,则文件可能是真的加密了。这种分析方法可以帮助确定ZIP文件的真实加密状态。

综上只需要把09 00 改为00 00再打开文件就可以得到flag。flag{Adm1N-B2G-kU-SZIP}

### 使用010 Editor 修改伪加密文件 当处理经过简单混淆或弱加密保护的文件时,可以利用强大的十六进制编辑器如010 Editor来分析和修改这些文件。这类工具允许直接查看并操作二进制数据。 #### 准备工作 为了有效地使用010 Editor进行此类任务,建议先了解目标文件的大致结构以及所使用的任何特定编码方式[^1]。如果已知某些部分被特别设计成难以解析的形式,则可能需要额外的研究来理解其模式。 #### 加密库的选择影响 值得注意的是,在原始开发过程中选用知名开源库实现加解密功能可能会使攻击者更容易识别并绕过安全措施。因此,采用自定义算法能够增加破解难度,迫使潜在入侵者花费更多时间去逆向工程每一个细节[^2]。 #### 实际操作指南 对于已经存在的伪加密文件: - **打开文件**:启动010 Editor并将待处理的目标文件加载进来。 - **查找特征码**:通过搜索已知明文字符串或其他可辨识标志位定位到疑似加密区域;也可以尝试对比未加密版本找出差异之处。 - **应用模板(可选)**:如果有现成适用于该类型文档的数据布局描述(BTX)脚本可用的话,那么安装它可以帮助更直观地浏览内部信息。 - **手动调整字节序列**:基于前期调研所得关于具体变换规则的知识,小心谨慎地更改相应位置上的数值直到达到预期效果为止——这一步骤往往依赖于个人经验和运气成分较多一些。 - **验证改动成果**:保存所做的全部变更之后务必再次测试确认最终产物能否正常运作而不引发其他问题。 ```cpp // 这里提供一个简单的C++风格伪代码片段用于说明概念而非实际执行 for (int i = 0; i < fileSize; ++i){ if(isEncryptedSection(i)){ originalData[i] ^= keyByte; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值