misc-压缩包basic

压缩包出题点

1. 伪加密

对本没有加密的文件通过修改加密位(zip里是deFlag或frFlags,rar里是HEAD_FLAGS的PASSWORD_ENCRYPTED),实现伪加密。

  • 仅限zip#winrar 工具-修复压缩文件(快捷键 alt+r),或7zip打开
  • 010手动修复 #知识点1 #知识点4
  • 仅限zip#使用工具批量自动解:ZipCenOp.jar r zip文件

2. CRC32泄露

在小范围内,每个文件都有唯一的crc32值。通过crc32字典来比对密文内容。

  • 对于1-6字节的已知crc32,使用my_crc32.py(kali里已经拷贝过去了)
from my_crc32 import *
crc32_reverse(0x76D32BE0,N) #N为字节数

3. zip明文攻击

因为ZIP压缩包里的所有文件都是使用同一个加密密钥来加密,明文攻击就是利用已知文件找加密密钥。发起攻击需要至少12字节的连续明文。明文越大, 完成攻击越快。

  • Advanced Archive Password Recovery。使用winrar\7zip分别将已知文件加密,选择明文攻击进行破解。
  • Passware,选择zip plaintext attack

4. 暴力破解

一般来说会给密码提示,如果没有,就默认4-6位字母+数字的密码试试。

  • ziperello和passware,支持掩码破解

  • AAPR,可以使用字典,但是无法自定义charsets

  • fcrackzip,kali 自带,备用以防没有

# 数字 小写字母 特殊字符,1-5位
fcrackzip -b -c '1a!' -l 1-5 -u test.zip -v
# 全数字密码 9位  从244999998
fcrackzip -v -b -c '1' -l 9 -p 244999998 -u rebuilt.2.zip

压缩包配套习题

题目1:zip大礼包

  • 打开看见信息里有密码提示,注释: 密码为4位小写字母3位数字,用passware解join attack出来是ydyd233
  • 打开发现里面是一个长的txt和level2压缩包,提示明文攻击,记得用passware接plaintext attack解出来得到0F12FB319690345764D57538
  • 然后level1的几个小txt里藏压缩包密码,很明显是crc32了
>>> from my_crc32 import *
>>> crc32_reverse(0xDD0216B9,1)
[find]: I ~~~~(OK)
>>> crc32_reverse(0xA0D65196,2)
[find]: AM (OK)
>>> crc32_reverse(0x8E9089A5,3)
[find]: XYH (OK)
>>> crc32_reverse(0xf8e53990,4)
verification checksum: 0xf8e53990 (OK)
[find]: PASS (OK)
>>> crc32_reverse(0x8629dc3c,5)
verification checksum: 0x8629dc3c (OK)
[find]: WORDS (OK)
  • 最后一关提示要密码,伪加密修复标志位,解压缩,png图片修复高度得到:flag{a8d93d2f2a15fc3f531474b5f13508207cdfc924}

题目2:RAR大礼包

  • 打开提示有密码,密码提示为2个大写2个小写,passware跑出来得到DAka。
  • 这次是真的没有提示了,猜测为伪加密,010手动修改。archeader里正常,block[0]里PASSWORD_ENCRYPTED被置为1,改成0后用winrar打开得到:flag{64b5ca5f886aed350dfe6d3d590728eed2f188af}
  • 但追求完dan美teng的做法是改好crc32然后7zip打开:

压缩包知识点

知识点1:zip加密标志位

  • 单独文件的加密标志位叫做 deFlags,在dirEntry中,修复为0000
  • zip文件整体加密标志位叫frFlags 在最开头那里

知识点2:zip文件格式

一个 ZIP 文件由三个部分组成:压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志。相关头部数据为大端存储

  Overall .ZIP file format:
[Local file header + Compressed data [+ Extended local header]?]*
[Central directory]*
[End of central directory record]
  Overall .ZIP file format:
    [local file header 1]
    [file data 1]
    [data descriptor 1]
    .
    .
    .
    [local file header n]
    [file data n]
    [data descriptor n]
    [archive decryption header] (EFS)
    [archive extra data record] (EFS)
    [central directory]
    [zip64 end of central directory record]
    [zip64 end of central directory locator]
    [end of central directory record]

1. 文件数据区

  • Local file header
Offset   Length   Contents
  0      4 bytes  Local file header signature (0x04034b50)
  4      2 bytes  Version needed to extract //解压缩时的最低版本
  6      2 bytes  General purpose bit flag //全局加密标志区 (有无加密,这个更改这里进行伪加密,改为09 00/01 08 或者01 00 打开就会提示有密码了。修改为00 00 取消伪加密) 
  8      2 bytes  Compression method //压缩方法标记
 10      2 bytes  Last mod file time
 12      2 bytes  Last mod file date
 14      4 bytes  CRC-32
 18      4 bytes  Compressed size (n)
 22      4 bytes  Uncompressed size
 26      2 bytes  Filename length (f)
 28      2 bytes  Extra field length (e)
        (f)bytes  Filename
        (e)bytes  Extra field
        (n)bytes  Compressed data
  • Extended local header
Offset   Length   Contents
  0      4 bytes  Extended Local file header signature (0x08074b50)
  4      4 bytes  CRC-32
  8      4 bytes  Compressed size
 12      4 bytes  Uncompressed size

2. 主目录区

其实就是文件标识区,Central directory

Offset   Length   Contents
  0      4 bytes  Central file header signature (0x02014b50)
  4      2 bytes  Version made by //压缩时的版本
  6      2 bytes  Version needed to extract //解压缩需要的最低版本
  8      2 bytes  General purpose bit flag //通用位标记 (有无加密,这个更改这里进行伪加密,改为09 00/01 08 或者01 00 打开就会提示有密码了。修改为00 00 取消伪加密)
 10      2 bytes  Compression method //压缩方法标记 见下方详解
 12      2 bytes  Last mod file time //文件修改时间
 14      2 bytes  Last mod file date //文件修改日期
 16      4 bytes  CRC-32
 20      4 bytes  Compressed size //压缩后大小
 24      4 bytes  Uncompressed size //未压缩大小
 28      2 bytes  Filename length (f) //文件名长度
 30      2 bytes  Extra field length (e) //扩展域长度
 32      2 bytes  File comment length (c) //文件注释长度
 34      2 bytes  Disk number start
 36      2 bytes  Internal file attributes
 38      4 bytes  External file attributes
 42      4 bytes  Relative offset of local header
 46     (f)bytes  Filename
        (e)bytes  Extra field
        (c)bytes  File comment

其中,compression method: (2 bytes)

      0 - The file is stored (no compression)
      1 - The file is Shrunk
      2 - The file is Reduced with compression factor 1
      3 - The file is Reduced with compression factor 2
      4 - The file is Reduced with compression factor 3
      5 - The file is Reduced with compression factor 4
      6 - The file is Imploded
      7 - Reserved for Tokenizing compression algorithm
      8 - The file is Deflated

3. 目录结束标识

End of central directory record

Offset   Length   Contents
  0      4 bytes  End of central dir signature (0x06054b50)
  4      2 bytes  Number of this disk
  6      2 bytes  Number of the disk with the start of the central directory
  8      2 bytes  Total number of entries in the central dir on this disk
 10      2 bytes  Total number of entries in the central dir
 12      4 bytes  Size of the central directory
 16      4 bytes  Offset of start of central directory with respect to the starting disk number
 20      2 bytes  zipfile comment length (c)
 22     (c)bytes  zipfile comment

知识点3:rar文件格式

RAR 文件主要由标记块,压缩头块,文件头块,结尾块组成。 相关头部数据为小端存储
文件中每个数据块都有一个7字节标准的块头。

注1:CRC为CRC32的低2个字节(MARK_HEAD的CRC 为固定的0x5261,非计算出来的值)
注2:
    HEAD_TYPE=0x72 标记块
    HEAD_TYPE=0x73 压缩文件头
    HEAD_TYPE=0x74 文件头
    HEAD_TYPE=0x75 注释头
    HEAD_TYPE=0x76 旧风格的用户身份信息
    HEAD_TYPE=0x77 子块
    HEAD_TYPE=0x78 恢复纪录
    HEAD_TYPE=0x79 用户身份信息
    HEAD_TYPE=0x7a subblock

1. Marker block ( MARK_HEAD)标志块

7字节,固定为0x526172211a0700

HEAD_CRC 2 bytes Always 0x6152
HEAD_TYPE 1 byte Header type: 0x72
HEAD_FLAGS 2 bytes Always 0x1a21
HEAD_SIZE 2 bytes Block size = 0x0007
ADD_SIZE 4bytes 可选字段 - 添加块大小

2. Archive header ( MAIN_HEAD)归档头部块

HEAD_CRC 2 bytes 从头域HEAD_TYPE到头域RESERVED2的CRC
HEAD_TYPE 1 byte Header type: 0x73
HEAD_FLAGS 2 bytes Bit flags:
    0x0001 - Volume attribute (archive volume)//卷属性标志(归档文件卷)
    0x0002 - Archive comment present//此位若被置1,注释存在
    0x0004 - Archive lock attribute//归档锁属性标志
    0x0008 - Solid attribute (solid archive)//此位若被置1,则使用了固实模式压缩
    0x0010 - New volume naming scheme ('volname.partN.rar')//新卷命名方案存在标志(set only by RAR 3.0 and later)
    0x0020 - Authenticity information present//此位若被置1,授权信息存在
    0x0040 - Recovery record present//此位若被置1,则恢复记录存在
    #加密标志位
    0x0080 - Block headers are encrypted//此位若被置1,则块头是被加密的
    0x0100 - First volume (set only by RAR 3.0 and later)//此位若被置1,则此卷为首卷
    其他的位为内部使用保留
HEAD_SIZE 2 bytes //归档头部块大小,包括归档文件注释。
RESERVED1 2 bytes //Reserved
RESERVED2 4 bytes //保留域

3. File header (File in archive)文件块(被归档的文件)

HEAD_CRC 2 bytes //从头域HEAD_TYPE到头域FILEATTR的CRC
HEAD_TYPE 1 byte
Header type: 0x74
HEAD_FLAGS 2 bytes Bit flags:
    0x01 - file continued from previous volume//此位若被置1,则文件从前一个卷继续
    0x02 - file continued in next volume//此位若被置1,则文件在后一个卷继续
    #加密标志位
    0x04 - file encrypted with password//此位若被置1,则文件使用了基于密钥的加密
    0x08 - file comment present//此位若被置1,则文件注释存在。RAR 3系列的版本使用独立的注释块。
    0x10 - information from previous files is used (solid flag)//此位若被置1,则之前的文件信息被使用(for RAR 2.0 and later)
    bits 7 6 5 (for RAR 2.0 and later)
        0 0 0 - dictionary size 64 KB
        0 0 1 - dictionary size 128 KB
        0 1 0 - dictionary size 256 KB
        0 1 1 - dictionary size 512 KB
        1 0 0 - dictionary size 1024 KB
        1 0 1 - dictionary size 2048 KB
        1 1 0 - dictionary size 4096 KB
        1 1 1 - file is directory 以整个文件作为字典
    0x100 - HIGH_PACK_SIZE and HIGH_UNP_SIZE fields are present.//此位若被置1,则头域HIGH_PACK_SIZE 和HIGH_UNP_SIZE存在。这些头域仅用于归档很大(大于2GB)文件的时候,对于不足2GB的小文件,这些头域是不存在的。
    0x200 - FILE_NAME contains both usual and encoded Unicode name separated by zero. //此位若被置1,则FILE_NAME同时包括了通常的文件名和用0隔开的以Unicode编码的文件名.在这种情况下,NAME_SIZE 头域的值就该等于:通常的文件名长度+以Unicode编码的文件名长度+1.
    0x400 - salt //强安全性标志。此位若被置1,则头部在文件名之后还会再附加8个字节用来增强加密强度.
    0x800 - Version flag。//此位若被置1,则这是一个老版本的文件,版本号以”;n”的形式被附加到文件名后。
    0x1000 - Extended time field present.//此位若被置1,则存在扩展的时间头域
    0x8000 - //数据长度头域存在标志。此位若被置1,则头域PACK_SIZE存在。此位通常都会被置为1,因此完整的块大小是HEAD_SIZE + PACK_SIZE(如果位0x100被设定的话,那么还要加上HIGH_PACK_SIZE)
HEAD_SIZE 2 bytes //文件块大小,包括文件名和内容
PACK_SIZE 4 bytes //压缩后的文件大小
UNP_SIZE 4 bytes //没有压缩之前的文件大小
HOST_OS 1 byte //归档(压缩)操作时所在的操作系统
    0 - MS DOS
    1 - OS/2
    2 - Win32
    3 - Unix
    4 - Mac OS
    5 - BeOS
FILE_CRC 4 bytes //被归档文件的CRC
FTIME 4 bytes //标准MS DOS格式的时间和日期
UNP_VER 1 byte //释放(即解压)文件所需要的RAR(最低)版本,版本号的是编码方式是:10*主版本号+小版本号
METHOD 1 byte //压缩模式
    0x30 - storing 存储
    0x31 - fastest compression 最快压缩
    0x32 - fast compression 快压缩
    0x33 - normal compression 普通压缩
    0x34 - good compression 好压缩
    0x35 - best compression 最好压缩
NAME_SIZE 2 bytes 文件名长度
ATTR 4 bytes //文件属性
HIGH_PACK_SIZE 4 bytes //已压缩文件大小的64位值的高位四字节。可选的头域,仅当块标志的0x100位被置为1时才存在。
HIGH_UNP_SIZE 4 bytes //未压缩文件大小的64位值的高位四字。可选的头域,仅当块标志的0x100位被置为1时才存在。
File name - string of NAME_SIZE bytes size//文件名(所占字节数由头域NAME_SIZE指定)
SALT 8 bytes //盐.仅当块标志的0x100位被置为1时才存在
EXT_TIME //大小可变 扩展的时间头域。仅当块标志的0x1000位被置为1时才存在。 其他新加的头域可能在这里出现

4. 尾头(Terminator)

There is often a terminating block present.固定为0xC43D7B00400700

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

转载地址:

  1. https://download.csdn.net/download/ping_fani07/5353575
  2. https://www.rarlab.com/technote.htm
  3. http://rescene.wikidot.com/rar-420-technote

知识点4:RAR伪加密

RAR伪加密时需要同时修改加密位 和 crc值。(其实不改crc也没事,用winrar打开就行了,但会报个错)
加密位:

  • Archive header ( MAIN_HEAD )�的HEAD_FLAGS,0x0080 此位若被置1,则块头是被加密的
  • File header (File in archive)� 的HEAD_FLAGS,PASSWORD_ENCRYPTED(0x04)此位若被置1,则文件使用了基于密钥的加密


    misc-压缩包basic_第1张图片
    伪加密修改

    CRC计算`

  • File header (File in archive)� 的CRC32:从头域HEAD_TYPE到头域FILEATTR的CRC 。CRC值为需要同时计算红框内/选中的部分CRC32 的低2字节(复制为16进制,大厨from hex后 计算crc32,取最后两个字节,直接在value那边改)


    misc-压缩包basic_第2张图片
    CRC32计算

written by watanuki

你可能感兴趣的:(misc-压缩包basic)