【攻防世界】七、gif

在这里插入图片描述

步骤

下载所给附件,发现是一个压缩包,解压之后发现两个文件夹,分别为:
在这里插入图片描述
其中_MACOSX文件夹中有一个图片,但是打不开
在这里插入图片描述
在这里插入图片描述
使用winhex工具查看,根据头文件发现不是jpg图片
在这里插入图片描述
在gif文件夹中发现104张图片,都可以正常打开。使用winhex随便打开一张图片进行分析,发现确实是jpg
在这里插入图片描述
在这里插入图片描述
根据分析,图片有104张(0-103)为8的倍数,而且只有黑白两种颜色,可能是二进制
我们先让白色为0,黑色为1,得出一串二进制字符串
使用python脚本帮助我们进行转换:

white = open(r"C:\Users\admin\Desktop\misc\gif\0.jpg", "rb").read()  

black = open(r"C:\Users\admin\Desktop\misc\gif\1.jpg", "rb").read()   


flag_b = "" 
for i in range(104):
    with open(r"C:\Users\admin\Desktop\misc\gif\%d.jpg"%i, "rb") as f:
        text = f.read()
        if text == black:
            flag_b += '1'
        elif text == white:
            flag_b += '0'
print(flag_b)

转换完成之后我们就得到了一个二进制字符串,然后将它转换成ASCII码,顺序:二进制->十进制->ASCII,同样使用python帮我们做:

flag = "" 

for i in range(len(flag_b )//8):
    # print(i)
    # print(flag_b[i*8:(i+1)*8])
    flag += chr(int(flag_b[i*8:(i+1)*8], 2))

print(flag)

完整的程序如下:

white = open(r"C:\Users\admin\Desktop\misc\gif\0.jpg", "rb").read()  # 以二进制只读的方式打开文件,定义白色图片
white2 = open(r"C:\Users\admin\Desktop\misc\gif\3.jpg", "rb").read()
black = open(r"C:\Users\admin\Desktop\misc\gif\1.jpg", "rb").read()   # 以二进制只读的方式打开文件,定义黑色图片
black2 = open(r"C:\Users\admin\Desktop\misc\gif\2.jpg", "rb").read()

# print(white==white2)     True
# print(black==black2)     True
# print(white==black)      False

# 可以看见相同颜色的图片读取出来都是一样的,所以可以根据读取的内容是否与上面定义的white和black相等来判断图片是什么颜色

flag_b = ""  # 定义空字符串用来存储二进制字符串
for i in range(104):
    with open(r"C:\Users\admin\Desktop\misc\gif\%d.jpg"%i, "rb") as f:
        text = f.read()
        if text == black:
            flag_b += '1'
        elif text == white:
            flag_b += '0'
print(flag_b)
flag = ""  # 定义空字符传来存储flag
# 这里要用//而不是/
# “ / ” 为浮点数除法,返回浮点结果
# “ // ” 表示整数除法,返回不大于结果的一个最大整数
for i in range(len(flag_b )//8):
    # print(i)
    # print(flag_b[i*8:(i+1)*8])
    flag += chr(int(flag_b[i*8:(i+1)*8], 2))
    # 字符转数字ord(字符)
    # 数字转字符chr(数字)

print(flag)

运行程序,得到flag
在这里插入图片描述

总结

常见密码学的应用(二进制)
要擅长使用代码来帮助我们

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值