http://bmzclub.cn/challenges#533
password000000000-999999999.zip
根据文件名提示,使用ARCHPR
爆破password000000000-999999999.zip
密码为9位数
压缩包密码为:548751269
得到533.zip
很明显可以直接通过CRC
爆破文件内容,因为内容很小,但是这里1.txt
是5字节
的,2.txt
和3.txt
是3字节
的,这个需要注意下,我们先把2.txt
和3.txt
的内容爆破出来,利用我的这篇文章中的三字节爆破脚本:javascript:void(0)
import binascii
import string
def crack_crc():
print('-------------Start Crack CRC-------------')
crc_list = [0xeac5c577, 0x1aa8db2b]#文件的CRC32值列表,注意顺序
comment = ''
chars = string.printable
for crc_value in crc_list:
for char1 in chars:
for char2 in chars:
for char3 in chars:
res_char = char1 + char2 + char3#获取遍历的任意3Byte字符
char_crc = binascii.crc32(res_char.encode())#获取遍历字符的CRC32值
calc_crc = char_crc & 0xffffffff#将遍历的字符的CRC32值与0xffffffff进行与运算
if calc_crc == crc_value:#将获取字符的CRC32值与每个文件的CRC32值进行匹配
print('[+] {}: {}'.format(hex(crc_value),res_char))
comment += res_char
print('-----------CRC Crack Completed-----------')
print('Result: {}'.format(comment))
if __name__ == '__main__':
crack_crc()
这样其实直接可以猜测1.txt
的内容是flag{
,但是我们还是要利用脚本测试下,因为是五字节
的,所以要直接爆破出来难度太大,适当缩小取值范围,脚本如下
import binascii
import string
def crack_crc():
print('-------------Start Crack CRC-------------')
crc_list = [0x05dec988]#文件的CRC32值列表,注意顺序
comment = ''
chars = 'abcdefghijklmnopqrstuvwxyz\{\}'
for crc_value in crc_list:
for char1 in chars:
for char2 in chars:
for char3 in chars:
for char4 in chars:
for char5 in chars:
res_char = char1 + char2 + char3 + char4 + char5#获取遍历的任意5Byte字符
char_crc = binascii.crc32(res_char.encode())#获取遍历字符的CRC32值
calc_crc = char_crc & 0xffffffff#将遍历的字符的CRC32值与0xffffffff进行与运算
if calc_crc == crc_value:#将获取字符的CRC32值与每个文件的CRC32值进行匹配
print('[+] {}: {}'.format(hex(crc_value),res_char))
comment += res_char
print('-----------CRC Crack Completed-----------')
print('Result: {}'.format(comment))
if __name__ == '__main__':
crack_crc()
flag{CRC32}