ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

CTF 压缩包分析:RAR 文件格式逐字节解析与爆破、伪加密、明文攻击实战

CTF 压缩包分析:RAR 文件格式逐字节解析与爆破、伪加密、明文攻击实战 文档网络安全教程【免费下载链接】ctf-wikiCome and join us, we need you!项目地址https://gitcode.com/gh_mirrors/ct/ctf-wiki点击查看免费下载RAR 是 CTF Misc 分类下压缩包分析题的高频考察格式其二进制文件由一串带 CRC 校验的“块”Block组成。本文以 CTF Wiki「压缩包分析」章节的 RAR 文档 为主体从文件头签名、块通用字段、文件头块到结尾块逐层拆解 RAR 的二进制布局并系统讲解爆破、伪加密、明文攻击三类实战手法帮助读者在比赛中快速识别 RAR 文件、判定伪加密并选择合适的破解工具。RAR 文件整体结构与块模型RAR 文件主要由标记块MARK_HEAD、压缩文件头块Main Archive Header、文件头块File Header、结尾块Terminator组成。整个文件本质上就是一系列结构相同、以块类型区分语义的数据块按顺序拼接而成。其每一块大致分为以下几个字段名称大小描述HEAD_CRC2全部块或块部分的CRCHEAD_TYPE1块类型HEAD_FLAGS2阻止标志HEAD_SIZE2块大小ADD_SIZE4可选字段 - 添加块大小各字段的职责HEAD_CRC2 字节对整块或块的部分字段计算得到的 CRC 校验值用于在解压时校验块数据是否完整、未被篡改。伪造块内容时必须同步重算 CRC否则解压工具会报错。HEAD_TYPE1 字节块类型标识。例如0x74表示文件头块File Header0x7b表示结尾块Terminator。分析时通常先按 HEAD_TYPE 定位块的语义。HEAD_FLAGS2 字节块标志位不同比特位承载不同语义——RAR 的伪加密就藏在这个字段里。HEAD_SIZE2 字节块大小用于在流式解析时跳过整个块。ADD_SIZE4 字节可选字段表示附加数据的大小仅在部分块类型中出现。文件头签名与标记块RAR 压缩包的文件头为0x 52 61 72 21 1A 07 00这是识别 RAR 文件最直接的硬性标志。字节52 61 72 21正是 ASCII 字符串Rar!其后紧跟1A 07 00。从字节层面还原这 7 个字节恰好可以按块通用字段拆解为0x52 0x61→ HEAD_CRC 0x6152小端序0x72→ HEAD_TYPE 0x72即标记块MARK_HEAD类型0x1A 0x21→ HEAD_FLAGS 0x211A0x07 0x00→ HEAD_SIZE 0x0007按文档描述紧跟着文件头0x526172211A0700的是标记块MARK_HEAD其后还有文件头File Header。因此在十六进制编辑器中打开 RAR 文件后先在文件头中确认52 61 72 21 1A 07 00签名再顺着块链表依次解析后续块是标准分析流程。文件头块File Header字段详解当块的 HEAD_TYPE 为0x74时该块即为文件头块描述归档内的一个文件条目。其完整结构如下名称大小描述HEAD_CRC2CRC of fields from HEAD_TYPE to FILEATTR and file nameHEAD_TYPE1Header Type: 0x74HEAD_FLAGS2Bit Flags (Please see ‘Bit Flags for File in Archive’ table for all possibilities)伪加密HEAD_SIZE2File header full size including file name and commentsPACK_SIZE4Compressed file sizeUNP_SIZE4Uncompressed file sizeHOST_OS1Operating system used for archiving (See the ‘Operating System Indicators’ table for the flags used)FILE_CRC4File CRCFTIME4Date and time in standard MS DOS formatUNP_VER1RAR version needed to extract file (Version number is encoded as 10 * Major version minor version.)METHOD1Packing method (Please see ‘Packing Method’ table for all possibilitiesNAME_SIZE2File name sizeATTR4File attributesHIGH_PACK_SIZ4High 4 bytes of 64-bit value of compressed file size. Optional value, presents only if bit 0x100 in HEAD_FLAGS is set.HIGH_UNP_SIZE4High 4 bytes of 64-bit value of uncompressed file size. Optional value, presents only if bit 0x100 in HEAD_FLAGS is set.FILE_NAMENAME_SIZE bytesFile name - string of NAME_SIZE bytes sizeSALT8present if (HEAD_FLAGS 0x400) ! 0EXT_TIMEvariable sizepresent if (HEAD_FLAGS 0x1000) ! 0关键字段解读HEAD_CRC覆盖从 HEAD_TYPE 到 FILEATTR 以及文件名字段的 CRC是校验文件头完整性的依据。HEAD_FLAGS位标记字段即文档标注的“伪加密”所在位置。其中不同比特位对应不同语义0x100位置位时追加 HIGH_PACK_SIZ / HIGH_UNP_SIZE 高 32 位字段支持 64 位大文件0x400位置位时追加 8 字节 SALT 盐值字段0x1000位置位时追加变长 EXT_TIME 扩展时间字段。HEAD_SIZE包含文件名与注释在内的文件头总大小用于跳过整个文件头。PACK_SIZE / UNP_SIZE压缩后文件大小 / 解压后文件大小。两者对比可以快速判断文件内容规模与压缩效果。HOST_OS打包时使用的操作系统可用于推断出题环境。FILE_CRC文件数据的 CRC 校验值。当文件内容极短时可直接枚举候选明文内容并与 FILE_CRC 比对还原原文详见后文 CRC 校验值分析。FTIMEMS-DOS 格式的日期时间可用来判断文件的打包时间线索。UNP_VER解压所需的最低 RAR 版本编码方式为10 * 主版本 次版本。METHOD压缩方式不同取值对应 store / normal / fast 等不同压缩策略。NAME_SIZE / FILE_NAME文件名长度与文件名本体。SALT8 字节盐值仅在(HEAD_FLAGS 0x400) ! 0时出现。SALT 是加密算法所需的随机盐其出现条件本身就指向“文件已加密”的标记位——这正是伪加密攻击的着眼点。结尾块Terminator每个 RAR 文件的结尾块都是固定的它标记着整个归档的结束Field NameSize (bytes)PossibilitiesHEAD_CRC2Always 0x3DC4HEAD_TYPE1Header type: 0x7bHEAD_FLAGS2Always 0x4000HEAD_SIZE2Block size 0x0007也就是说一个正常 RAR 文件的末尾固定以C4 3D 7B 00 40 07 00小端序结尾。判断文件是否被截断、是否为一个完整归档时检查这个固定尾巴非常实用。主要攻击手法爆破Linux 下的 RarCrack是爆破 RAR 压缩包密码的常用工具。其适用前提是密码强度较弱、可枚举如纯数字、短长度、常见字典词当密码足够长且随机时爆破的时间成本呈指数级上升应优先考虑其他攻击面。爆破类工具的核心思路与 ZIP 格式 文档中介绍的fcrackzip一致指定爆破模式、密码字符集与长度范围对每个候选密码尝试解压验证。伪加密原理RAR 文件的伪加密位于文件头File Header中的位标记字段HEAD_FLAGS上。根据上文文件头块字段表SALT 字段仅在(HEAD_FLAGS 0x400) ! 0时才出现而 SALT 正是加密算法所需的盐值——也就是说HEAD_FLAGS的0x400位承担着“文件已加密”的标记职责。用 010 Editor 可以很清楚地看见这一位修改这一位即可造成伪加密文件内容本身并未真正加密但解压时却会提示输入密码从而在题目中伪装出“加密”假象。上图即 010 Editor 加载 RAR 结构模板后的解析视图RarBlock展开后可以看到块 CRC、块类型以及FileHeadFlags位域结构体中的PASSWORD_ENCRYPTED : 1位——这就是伪加密标记所在。实操流程用 010 Editor 打开 RAR 文件加载 RAR 结构模板定位到文件头块HEAD_TYPE 0x74展开HEAD_FLAGS位域找到PASSWORD_ENCRYPTED位若该位被置位1而文件实际未加密将其修改为0保存后即可直接解压出内容反之若要将一个真实未加密的文件伪装成加密题目则把该位置1即可。绕过与修复思路与 ZIP 格式 文档中列举的方法互通用十六进制编辑器直接修改位标记是最直接、最可控的方式使用不校验加密位的解包工具直接提取文件部分系统自带的归档工具可以直接打开伪加密压缩包检测伪加密时可结合文件头字段表逐位核对 HEAD_FLAGS 的实际语义判断加密位是否与 SALT 字段、文件实际状态相符。明文攻击RAR 的明文攻击等手法与 ZIP 格式 中介绍的基本一致核心前提有三个一个加密的压缩文件知道压缩包内某个文件的部分连续明文内容至少 12 字节打包已知明文时使用的压缩工具与算法必须与原压缩包一致——例如用 7z 压缩的包必须用 7z 重新打包明文压缩算法不匹配会导致明文攻击失败。流程将已知明文文件如题目中泄露的readme.txt用相同工具打包 → 使用ARCHPRWindows或PKCrackLinux发起明文攻击 → 还原出密钥后解密整个压缩包取出其中的 flag 文件。详细的原理说明、工具参数如pkcrack的-C/-c/-P/-p/-d参数含义、安装步骤与完整例题解析均收录在 ZIP 格式 中RAR 场景可直接复用整套思路。CRC 校验值分析除了爆破与伪加密基于校验值的攻击同样值得关注。RAR 文件头块中的FILE_CRC字段4 字节记录了文件数据的 CRC 校验值。当压缩包内文件内容极短比赛中常见约 4 字节左右且密码很长时与其爆破密码不如直接枚举可能的明文内容、逐一对候选字符串计算 CRC 并与 FILE_CRC 比对从而还原出原文。该手法的原理、Python 脚本与例题同样收录在 ZIP 格式 中RAR 场景可直接复用。实战要点小结识别文件头0x526172211A0700是 RAR 的硬标识52 61 72 21即 ASCIIRar!结构按 HEAD_TYPE 依次解析块链表——0x74为文件头块末尾固定为0x7b0x3DC4 / 0x4000 / 0x0007伪加密判定检查文件头块 HEAD_FLAGS 的加密位对应 SALT 字段的(HEAD_FLAGS 0x400) ! 0出现条件结合“解压时要求密码但文件属性与内容明显未加密”的现象综合判断工具选择结构分析用 010 Editor爆破用 RarCrackLinux明文攻击用 ARCHPR / PKCrack横向关联本文档与 ZIP 格式 共同构成 CTF Wiki Misc 分类下的「压缩包分析」章节参见 docs/zh/mkdocs.yml 的导航配置两者在明文攻击、伪加密、CRC 爆破等手法上高度互通建议对照阅读。赞分享文档网络安全教程【免费下载链接】ctf-wikiCome and join us, we need you!项目地址https://gitcode.com/gh_mirrors/ct/ctf-wiki点击查看免费下载相关推荐ctf-wiki 实战手册ZIP 压缩包格式结构解析与四大攻击手法爆破 / CRC32 / 明文攻击 / 伪加密ctf wiki 实战手册ZIP 压缩包格式结构解析与四大攻击手法爆破 / CRC32 / 明文攻击 / 伪加密 本篇技术指南以 ctf wiki 仓库中文档网络安全教程CTF 杂项实战ZIP 压缩包格式详解与爆破、CRC32、明文攻击、伪加密四类破解手法全解CTF 杂项实战ZIP 压缩包格式详解与爆破、CRC32、明文攻击、伪加密四类破解手法全解 导读 ZIP 是 CTF Misc杂项领域最高频出现的压缩包格文档网络安全教程CTF Misc 取证入门RAR 压缩包文件格式解析与常见攻击手法CTF Misc 取证入门RAR 压缩包文件格式解析与常见攻击手法 本篇技术指南以 CTF Wiki 开源仓库中 RAR 格式 https://link.gi文档网络安全教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表