Bootstrap

攻防世界补完计划-MISC day7

前置知识

rar文件

正常来讲,一个文件想要解析会需要很多内容(包括文件大小、编码方式、加密方式、创建日期等等)

对于一个rar文件,通常可能有这样几个部分

MARK_HEAD

标记块,也就是用来分辨文件类型的,这里标记块一共有如下几个部分

字段名长度说明
HEAD_CRC2head的CRC(循环冗余校验),固定 0x6152
HEAD_TYPE1标头类型,用来区分块的功能,固定 0x72
HEAD_FLAGS2位标记,固定 0x1A21
HEAD_SIZE2这个是按字节来的 0x0007即7个字节

注意图上是小端序,所以读字节序都反过来了

MAIN_HEAD
字段名称长度说明
HEAD_CRC2HEAD_TYPE 到 RESERVED2 的 CRC
HEAD_TYPE1固定 0x73
HEAD_FLAGS2位标记: 0x0001 - MHD_VOLUME: 卷属性(压缩文件卷) 0x0002 - MHD_COMMENT: 压缩文件注释存在,RAR 3.x使用单独的注释块,不设置这个标记。 0x0004 - MHD_LOCK: 压缩文件锁定属性 0x0008 - MHD_SOLID: 固实属性(固实压缩文件) 0x0010 - MHD_NEWNUMBERING: 新的卷命名法则(‘volname.partN.rar’) 0x0020 - MHD_AV: 用户身份信息存在,RAR 3.x使用单独的用户身份信息块,不设置这个标记。 0x0040 - MHD_PROTECT: 恢复记录存在 0x0080 - HD_PASSWORD: 块头被加密 0x0100 - MHD_FIRSTVOLUME: 第一卷(只有RAR3.0及以后版本设置) 0x0200 - MHD_ENCRYPTVER: HEAD_FLAGS中的其他位保留用于内部使用。
HEAD_SIZE2压缩文件头总大小(包括压缩文件注释)
RESERVED12保留
RESERVED24保留

这里需要注意一个点,有些伪加密(看起来加密了,实则没有)会将 位标记 的第9位置为1,使文件识别为加密(需要输入密码)

这时候就需要结合文件尾看一下,是不是加密位也被置1了。

FILE_HEAD

这部分简单看看就行,做题基本用不到

字段名称长度说明
HEAD_CRC2从 HEAD_TYPE 到 FILEATTR 的 CRC
HEAD_TYPE1固定 0x74
HEAD_FLAGS2位标记: 0x0001 - LHD_SPLIT_BEFORE: 文件从上一卷继续 0x0002 - LHD_SPLIT_AFTER: 文件从后一卷继续 0x0004 - LHD_PASSWORD: 文件使用密码加密 0x0008 - LHD_COMMENT: 文件注释存在,RAR 3.x使用独立的注释块,不设置这个标记。 0x0010 - LHD_SOLID: 前一文件信息被使用(固实标记) (对于RAR 2.0 和以后版本) 7 6 5 位(对于RAR 2.0和以后版本) 0 0 0 - 字典大小 64KB 0 0 1 - 字典大小 128KB 0 1 0 - 字典大小 256KB   0 1 1 - 字典大小 512KB   1 0 0 - 字典大小 1024KB   1 0 1 - 字典大小 2048KB   1 1 0 - 字典大小 4096KB   1 1 1 - 文件作为字典 0x0100 - LHD_LARGE: HIGH_PACK_SIZE和HIGH_UNP_SIZE结构存在。这些结构仅用在非常大(大于2GB)的文档,对于小文件这些结构不存在。 0x0200 - LHD_UNICODE: FILE_NAME是用0隔开的包含普通的和Unicode编码的文件名。所以NAME_SIZE字段的值等于普通文件名的长度加Unicode编码文件名的长度再加1。如果此标记存在,但是FILE_NAME不包含0字节,它意味文件名使用UTF-8编码。 0x0400 - LHD_SALT: 文件头在文件名后包含附加的8byte,它对于增加加密的安全性是必需的。(所谓的’Salt’)。 0x0800 - LHD_VERSION: 版本标记。它是旧文件版本,版本号作为’;n’附加到文件名后。 0x1000 - LHD_EXTTIME: 扩展时间区域存在。 0x2000 - LHD_EXTFLAGS: 0x8000 - 此位总被设置,所以完整的块的大小是 HEAD_SIZE + PACK_SIZE (如果0x100位被设置,再加上 HIGH_PACK_SIZE)
HEAD_SIZE2文件头的全部大小(包含文件名和注释)
PACK_SIZE4已压缩文件大小
UNP_SIZE4未压缩文件大小
HOST_OS1保存压缩文件使用的操作系统 0x00 - MS DOS 0x01 - OS/2 0x02 - Win32 0x03 - Unix 0x04 - Mac OS 0x05 - BeOS
FILE_CRC4文件CRC
FTIME4MS DOS标准格式的日期和时间
UNP_VER1解压文件所需要最低RAR版本,版本编码方法:10 * 主版本 + 副版本。
METHOD1压缩方式: 0x30 - 存储 0x31 - 最快压缩 0x32 - 较快压缩 0x33 - 标准压缩 0x34 - 较好压缩 0x35 - 最好压缩
NAME_SIZE2文件名大小
ATTR4文件属性
HIGH_PACK_SIZE4可选值,已压缩文件大小64位值的高4字节。只HEAD_FLAGS中的0x100位被设置才存在。
HIGH_UNP_SIZE4可选值,未压缩文件大小64位值的高4字节。只有HEAD_FLAGS中的0x100位被设置才存在。
FILE_NAMENAME_SIZE文件名 - NAME_SIZE字节大小字符串
SALT8可选值,如果(HEAD_FLAGS & 0x400)!= 0,则存在
EXT_TIME可变大小可选值,扩展时间区域,如果(HEAD_FLAGS & 0x1000)!= 0,则存在

有时候可能需要做CRC校验碰撞来获取文件内容,不过网上都有现成的脚本和工具,了解下就好。

ENDARC_HEAD
字段名称长度说明
HEAD_CRC2从HEAD_TYPE 到HEAD_SIZE 的 CRC 校验值
HEAD_TYPE1固定 0x7B
HEAD_FLAGS2位标记
HEAD_SIZE2结尾块大小

一般来说结尾块也是固定的字符串 C4 3D 7B 00 40 07 00

上面分析借鉴了Sp4n9x的个人博客,有兴趣可以去看一下 RAR文件格式分析

ARCHPR

压缩包爆破工具。

Ziperello

压缩包爆破工具。

题目

Nepnep 祝你新年快乐啦!

哈哈,视频题,从阿b把视频扒下来都算个难题hhh

新年快乐!_哔哩哔哩_bilibili

打开视频,拉到评论区,拿到flag~

哈哈哈,开玩笑,当然不是

网上搜一下b站视频解析的网站,挺多的 B站(bilibili)视频解析工具_B站视频去水印下载_B站视频下载保存(支持B站视频在线下载)

把上面的视频链接复制进去,会发现比用阿b自己的播放器多几帧

虽然不太清晰,也还能看清flag

SimpleRAR

说实话,这个题不是很想碰来着,rar文件结构搞清楚需要些时间(虽然做题只是其中一个点)

说实话,这个考的有点偏了

这个部分对应 FILE_HEAD 中的 HEAD_TYPE,应该是固定值0X74

改完之后拿到一个txt和一张图片

我们把图片丢到 stegsolve 里面会发现二维码只有一半

丢到 010 发现是个 gif !

瞎胡闹,分离gif(前面讲过了,看day2的give_you_flag)

拿到另一半,稍微补全一下,CQR识别

拿到flag

can_has_stdio?

又是个没后缀名的,托010

奇怪的符号,感觉是什么编码格式,复制到随波逐流看看

一键解密太长了,这种只能网上搜一下大概是什么编码方式

知道是 brainfuck 后随波逐流就可以解了

János-the-Ripper

压缩包解包,又是个没后缀名的,拖到010看到PK  50 4B 03 04,改压缩包后缀名解包

哟,有密码,ARCHPR爆破一下

open打开文件也行,或者把文件拖到上图路径处;length来指定爆破密码长度,这个页面能看到可选的爆破字符

结束后会弹窗,上图 fish 就是解压密码

拿到flag

Aesop_secret

又是gif,拆分了拼一下

估计是个密码,有点歧义,暂定 lscc

放到010看到文件尾部有个疑似base64的字符串

当然,这是AES加密啦,不过这次用cyberchef解不出来,因为不支持base64格式的AES加密,,,

CaptfEncoder 也是一款优秀的解码工具,最好v1、v2、v3版本都留存一下

这里密码是ISCC,一次解码后得到

U2FsdGVkX18OvTUlZubDnmvk2lSAkb8Jt4Zv6UWpE7Xb43f8uzeFRUKGMo6QaaNFHZriDDV0EQ/qt38Tw73tbQ==

拿到flag,这里用的是v2

这样我们第一页21道题就讲完啦!恭喜!

杂项题主打一个折腾,不过也是有方向的,密码学相对来说考察范围还是比较有限的,目前对流量分析和取证分析还没涉及多少,后面慢慢来吧~

;