gif
gif (来源:攻防世界)
1.关卡描述
2.解题步骤
分析:
题目说是动态图,实际上却是一大堆分离出来的图片:
103张黑白图片(实际是104张,没有计算0张图片),猜测会不会是白对应1,黑对应0,或者白0黑1,猜测为二进制:
简单的试了一部分,发现不对,(笔记:简易以后要么测试8位,或者是16位等,不要只测某个部分的)
那么观察16进制:
黑色有这些字符特征
白色:
没有任何的头绪:
看看其他writeup是如何做的:
=============================
自己出现的问题,为什么想到了思路,却没有做出来,是因为测试的方法不对,没有添加空格,
下面的这个工具就不用考虑空格,他会自动处理
===========
看了writeup知道了错在哪里,我们知道了白色代表0,黑色代表1,手动搞的话,这里就不说了,我们使用脚本进行:
脚本一:
通过 黑白图片的md5不一样,写python脚本提取
(笔记:libnum库是一个关于各种数学运算的函数库,它包含common maths、modular、modular squre roots、primes、factorization、ECC、converting、stuff等方面的函数)
#coding:utf-8
import libnum
import hashlib
#主要通过 md5判断0或者1
#白代表0,黑代表1
#n0
with open("0.jpg","rb") as f:
md5i=hashlib.md5()
md5i.update(f.read())
n0=md5i.hexdigest()
print n0
#n1
with open("1.jpg","rb") as f1:
md5i=hashlib.md5()
md5i.update(f1.read())
n1=md5i.hexdigest()
print n1
flag=""
for i in range(0,104):
with open(str(i)+".jpg","rb") as f2:
md5i = hashlib.md5()
md5i.update(f2.read())
n3 = md5i.hexdigest()
if n3==n0:
flag+="0"
if n3==n1:
flag+="1"
print flag
print libnum.n2s(int(flag,2))
脚本二:
发现黑色图片RGB色码为(12, 12, 0),白色图片为(255, 255, 255),使用python脚本读取图片 像素值,以255和12为阈值判断,生成二进制字符,转换ASCII即可。(笔记这种像素值利用QQ截图就能看到RGB
)
#!/usr/bin/env python
# ‐*‐ coding: utf‐8 ‐*‐
# @Date : 2020‐03‐17 10:51:22
# @Author : windy
# @Version : v1.0
from PIL import Image
import libnum
text=''
for i in range(104):
pic_name='%d.jpg' %(i)
im=Image.open(pic_name,'r')
pic_color=(im.getpixel((10,10)))[0] #这里改为(im.getpixel((0,0)))[0] 结果是一样的
if pic_color==255:
text+='0'
elif pic_color==12:
text+='1'
print(text)
print(libnum.n2s(int(text,2)))
与其类似的:
脚本三:
利用f.read()方式区分黑白图
利用rgb颜色的方式区分黑白图
==============
比较好的思路:
================
总结像这种还有一种的可能是莫斯密码,还需要多家细心与学习
要对数据敏感一点
flag{FuN_giF}