考察知识点
CRC32爆破
图片尺寸修复
解题步骤
第一步
题目信息:
第二步
解题过程
1、binwalk查看是否有其他文件
2、图片里隐藏了压缩包,foremoet提取出来
3、看到这几个文件便猜到需要进行CRC32爆破了
4、首先爆破前三个4bytes文件,使用以下脚本,得到文件内容
Awsd2021mzy0
import binascii
import string
def crack_crc():
print('-------------Start Crack CRC-------------')
crc_list = [0x1D9F11E5, 0xE3A35EED, 0x694AEF57]#文件的CRC32值列表,注意顺序
comment = ''
chars = string.printable
for crc_value in crc_list:
for char1 in chars:
for char2 in chars:
for char3 in chars:
for char4 in chars:
res_char = char1 + char2 + char3 + char4#获取遍历的任意4Byte字符
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()
5、爆破6bytes文件
附上神器:6位CRC32爆破
6、这里得到的内容不唯一,注意到文件名为“图片真实crc32”,所以 图片真实crc32.txt 的CRC32应该是图片的真实CRC32
用010editor后者winhex打开图片,修改CRC32
7、将修改CRC32后的图片放入tweakpng,发现报错,证明图片尺寸被修改了
8、用脚本计算一下png图片的真实高度和宽度
import os
import binascii
import struct
crcbp = open("00000000.png", "rb").read() #打开图片
for i in range(2000):
for j in range(2000):
data = crcbp[12:16] + \
struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29]
crc32 = binascii.crc32(data) & 0xffffffff
if(crc32 == 0x59f1d4be): #图片当前CRC
print(i, j)
print('hex:', hex(i), hex(j))
得到一张带二维码的图片,扫码可知pass4为crc32爆破出90开头那一个 即9070yo
第三步
获得flag
此时获得了完整flag.txt的密码
Awsd2021mzy09070yo
Flag
flag{Pn9_Crc32_b2ut3_f0rce}