- 文档
- 网络安全
- 教程
【免费下载链接】ctf-wiki
Come and join us, we need you!
RAR 是 CTF Misc 分类下压缩包分析题的高频考察格式,其二进制文件由一串带 CRC 校验的“块”(Block)组成。本文以 CTF Wiki「压缩包分析」章节的 RAR 文档 为主体,从文件头签名、块通用字段、文件头块到结尾块逐层拆解 RAR 的二进制布局,并系统讲解爆破、伪加密、明文攻击三类实战手法,帮助读者在比赛中快速识别 RAR 文件、判定伪加密并选择合适的破解工具。
RAR 文件整体结构与块模型
RAR 文件主要由标记块(MARK_HEAD)、压缩文件头块(Main Archive Header)、文件头块(File Header)、结尾块(Terminator)组成。整个文件本质上就是一系列结构相同、以块类型区分语义的数据块按顺序拼接而成。
其每一块大致分为以下几个字段:
| 名称 | 大小 | 描述 |
|---|---|---|
| HEAD_CRC | 2 | 全部块或块部分的CRC |
| HEAD_TYPE | 1 | 块类型 |
| HEAD_FLAGS | 2 | 阻止标志 |
| HEAD_SIZE | 2 | 块大小 |
| ADD_SIZE | 4 | 可选字段 - 添加块大小 |
各字段的职责:
- HEAD_CRC(2 字节):对整块或块的部分字段计算得到的 CRC 校验值,用于在解压时校验块数据是否完整、未被篡改。伪造块内容时必须同步重算 CRC,否则解压工具会报错。
- HEAD_TYPE(1 字节):块类型标识。例如
0x74表示文件头块(File Header),0x7b表示结尾块(Terminator)。分析时通常先按 HEAD_TYPE 定位块的语义。 - HEAD_FLAGS(2 字节):块标志位,不同比特位承载不同语义——RAR 的伪加密就藏在这个字段里。
- HEAD_SIZE(2 字节):块大小,用于在流式解析时跳过整个块。
- ADD_SIZE(4 字节):可选字段,表示附加数据的大小,仅在部分块类型中出现。
文件头签名与标记块
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_CRC | 2 | CRC of fields from HEAD_TYPE to FILEATTR and file name |
| HEAD_TYPE | 1 | Header Type: 0x74 |
| HEAD_FLAGS | 2 | Bit Flags (Please see ‘Bit Flags for File in Archive’ table for all possibilities)(伪加密) |
| HEAD_SIZE | 2 | File header full size including file name and comments |
| PACK_SIZE | 4 | Compressed file size |
| UNP_SIZE | 4 | Uncompressed file size |
| HOST_OS | 1 | Operating system used for archiving (See the ‘Operating System Indicators’ table for the flags used) |
| FILE_CRC | 4 | File CRC |
| FTIME | 4 | Date and time in standard MS DOS format |
| UNP_VER | 1 | RAR version needed to extract file (Version number is encoded as 10 * Major version + minor version.) |
| METHOD | 1 | Packing method (Please see ‘Packing Method’ table for all possibilities |
| NAME_SIZE | 2 | File name size |
| ATTR | 4 | File attributes |
| HIGH_PACK_SIZ | 4 | High 4 bytes of 64-bit value of compressed file size. Optional value, presents only if bit 0x100 in HEAD_FLAGS is set. |
| HIGH_UNP_SIZE | 4 | High 4 bytes of 64-bit value of uncompressed file size. Optional value, presents only if bit 0x100 in HEAD_FLAGS is set. |
| FILE_NAME | NAME_SIZE bytes | File name - string of NAME_SIZE bytes size |
| SALT | 8 | present if (HEAD_FLAGS & 0x400) != 0 |
| EXT_TIME | variable size | present 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 校验值分析)。
- FTIME:MS-DOS 格式的日期时间,可用来判断文件的打包时间线索。
- UNP_VER:解压所需的最低 RAR 版本,编码方式为
10 * 主版本 + 次版本。 - METHOD:压缩方式,不同取值对应 store / normal / fast 等不同压缩策略。
- NAME_SIZE / FILE_NAME:文件名长度与文件名本体。
- SALT:8 字节盐值,仅在
(HEAD_FLAGS & 0x400) != 0时出现。SALT 是加密算法所需的随机盐,其出现条件本身就指向“文件已加密”的标记位——这正是伪加密攻击的着眼点。
结尾块(Terminator)
每个 RAR 文件的结尾块都是固定的,它标记着整个归档的结束:
| Field Name | Size (bytes) | Possibilities |
|---|---|---|
| HEAD_CRC | 2 | Always 0x3DC4 |
| HEAD_TYPE | 1 | Header type: 0x7b |
| HEAD_FLAGS | 2 | Always 0x4000 |
| HEAD_SIZE | 2 | Block 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)用相同工具打包 → 使用ARCHPR(Windows)或PKCrack(Linux)发起明文攻击 → 还原出密钥后解密整个压缩包,取出其中的 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为文件头块,末尾固定为0x7b(0x3DC4 / 0x4000 / 0x0007); - 伪加密判定:检查文件头块 HEAD_FLAGS 的加密位(对应 SALT 字段的
(HEAD_FLAGS & 0x400) != 0出现条件),结合“解压时要求密码但文件属性与内容明显未加密”的现象综合判断; - 工具选择:结构分析用 010 Editor,爆破用 RarCrack(Linux),明文攻击用 ARCHPR / PKCrack;
- 横向关联:本文档与 ZIP 格式 共同构成 CTF Wiki Misc 分类下的「压缩包分析」章节(参见 docs/zh/mkdocs.yml 的导航配置),两者在明文攻击、伪加密、CRC 爆破等手法上高度互通,建议对照阅读。
- 文档
- 网络安全
- 教程
【免费下载链接】ctf-wiki
Come and join us, we need you!
相关推荐
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),仅供参考