下载附件得到张gif图,呼应了题目是红绿灯的不断交换
ctf的gif题目,那么一般就是分析帧了
1000多帧的gif分离出来
我这里用的爱奇艺万能联播自带的看图功能(巨好用!)
分离之后会自动生成文件夹,里面的图片也会按帧顺序命名
可以看到有红绿黄三种颜色变化(废话...)和无颜色的,而且有规律的夹杂在有颜色的图之间
按我们对信号灯的认识,给我们传递信息的就是这三种颜色,那没颜色的图对我们就没意义了
可以用cmd命令在当前文件下打:
for /l %i in (2,2,1168) do del Traffic_Light_%i.jpeg
删除这些空帧后可以让我们更清楚分析这些图片
绿红红绿绿红红绿黄
绿红红绿红红绿绿黄
可以发现每8个就出一个黄,也就是说黄为分隔,每组8个数字,那么很容易就可以猜到是二进制
那么问题是红绿谁是0谁是1
而它俩是有高低之分的,那么对于二进制来说一般都是低位为0,高位为1(一本正经的瞎猜)
那么可以上代码了
思路是获取三个圆圈中的一点,分析rgb值,
不为172也就是灰色,则对应位置有颜色
from skimage import io,data
import os
img_lists = [i for i in os.listdir(".") if os.path.splitext(i)[1] == ".jpeg"]
bytes_=""
for i in range(1,len(img_lists)+1):
img = io.imread("./Traffic_Light_{}.jpeg".format(i*2-1))
R=int(img[38,113,0])
Y=int(img[92,113,0])
G=int(img[132,113,0])
if R != 172:
bytes_+= '1'
if Y != 172:
continue
if G != 172:
bytes_+= '0'
print(bytes_)
得到
接下来把它转成字符串
GET!!!
-----------------------------------------------------------------我是分割线--------------------------------------------------------------
看完了觉得不错就点个赞或者评论下吧,感谢!!!
如果本文哪里有误随时可以提出了,收到会尽快更正的