Misc常用编码之我的秘密与你共享

文章来源 |MS08067 CTF实战1期作业

本文作者:dullydoll(CTF实战1期学员)

6728c19651b5850043a21faf4c6818da.jpeg

0和1能隐藏什么信息

根据题目所提供的01序列,猜测可能是二维码,编写转换代码对其进行二维码转换,具体如下:

from PIL import Image
from zlib import *

str = open("0和1能隐藏什么信息.txt").read()
# print(str)

MAX = 330
pic = Image.new("RGB", (MAX, MAX))
i = 0
for y in range(0, MAX):
    for x in range(0, MAX):
        if(str[i] == '1'):
            pic.putpixel([x,y],(0,0,0))
        else:
            pic.putpixel([x,y],(255,255,255))
        i += 1
pic.show()
pic.save("m_3_1_flag.png")

转换结果如下图所示:

32bc9f45c7610147e6824abd40eecb87.png发现如果把上述结果划分为2*2的拼图,其位置需要调整。调整后得到真正的二维码如下图所示:

利用QR_Research工具扫描得到flag,如下图所示:

1.png(基于CRC的宽高爆破)

通过分析题目原始图片可以判断,图片显示不完整。将其载入010Editor编辑器可以看到,宽高值所在的数据区段CRC值报错,如下图所示:

4086f5d72b98f54634416cdb6a7a0df9.jpeg

因此编写相应代码对其宽高值进行爆破,具体如下:

import binascii
import struct
import datetime

start = datetime.datetime.now()

crcbp = open("1.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 == 0x6C7DB8B:
            print(i, j)
            print('hex: ', hex(i), hex(j))

end = datetime.datetime.now()

print("Running time: %s Seconds" % (end-start))

根据上述代码运行结果对原始图片宽高值进行修改,最终从完整图片中获得flag,如下图所示:

fb072a308b2158000cade4acc90fd3b7.png

100.gif(GIF帧间时间间隔隐藏信息)

通过分析题目所提供的GIF图片,判断其应该是通过GIF时间轴的帧间间隔来隐藏信息。首先通过identify命令来查看帧间间隔,结果如下图所示:

df16ab854e9f101a8323dec12a60b1fb.jpeg

由命令执行结果可知判断正确。之后通过shell命令组合将上述结果转换为01序列,如下图所示:

51d8a410082c00d879748b7dc01d71aa.jpeg

最后通过在线站点将上述结果转换为ASCII字符,最终获得flag,如下图所示:

636f4c46d1033bef5aa0f5e538dd4443.jpeg

flag就在一瞬间

查看题目所提供的GIF图片发现闪现一张二维码,因此首先利用StegSolve工具载入图片逐帧查看找到二维码,如下图所示:

b985fe590e5683e146e6426c2a8b2e58.jpeg

我们发现上述二维码并不完整,缺少定位格。之后通过PS补全二维码,如下图所示:

94a09922eaf097db9f036656dc9c27be.jpeg

最后利用QR_Research工具扫描二维码,获得flag,如下图所示:

888747df2ea4b69206e5331e05b043e6.jpeg

lsb.png(LSB隐藏信息)

利用StegSolve工具载入题目图片,通过查看RGB各通道组合的图片效果,确定Red-0、Green-0、Blue-0通道有信息隐藏,如下图所示:

154f80e1472855036142f566ef0e8576.jpegf55bc06e9f60f4a9168ded09ea62f9ca.jpeg887af02be5cf212dd668810a9c7461f1.jpeg

查看隐藏信息确定其为PNG格式的图片,将其保存查看,发现是一张二维码,如下图所示:

最后利用QR_Research工具扫描二维码,获得flag,如下图所示:

降龙十八掌

首先利用apngdis工具将题目图片切分为静态png图片集,如下图所示:

3ef9337489ace5e58de2a4df4cbdadf3.jpeg

通过分析上述图片集发现每张图片上有像素值为(6,7,8)的点,因此编写相关代码将每张图片上的点提取组合,具体代码如下:

import os
from PIL import Image

flag_img = Image.new('RGB', (350, 400), "white")
path = r"./apng"
for root, dirs, files in os.walk(path):
    for name in files:
        png_path = os.path.join(root, name)
        image = Image.open(png_path)
        image = image.convert("RGB")
        width, height = image.size
        for w in range(width):
            for h in range(height):
                if image.getpixel((w, h)) == (6,7,8):
                    flag_img.putpixel((h, w), 0)
flag_img.save("flag.png")
flag_img.show()

代码执行结果如下图所示:

80e1e1450cb7e3e882d04fb499a81540.jpeg

结果获取一张不完整的二维码图片。利用PS将其补全,然后利用QR_Research工具扫描,最终获取flag,如下图所示:

ec2a868fea7d613862322b96ee45ed9a.jpeg

课后练习(拼二维码)

利用PS工具将二维码碎片调整拼接,最终获得一张二维码,如下图所示:

6a34cdd4195241c7d76a66d241dfc51d.jpeg

利用手机扫描上述二维码,最终获得flag,如下图所示:

5e40e0f87d710e5a976b8f34e1b8c782.jpeg

怎么全是数字

分析题目所提供的数据,发现每行三个数值为一组,且所有数值没有超过255,因此判断其为RGB值集合。编写相应代码对原始数据进行还原,具体代码如下:

from PIL import Image

x = 2305
y = 1181
image = Image.new("RGB",(x,y))
f = open("怎么全是数字.txt")

for i in range(0, x):
    for j in range(0, y):
        line = f.readline()
        rgb = line.split(" ")
        image.putpixel((i,j), (int(rgb[0]),int(rgb[1]),int(rgb[2])))
image.show()
image.save("flag.png")

代码执行结果如下图所示:

ce8132dc4814fc38dfb858401bc8e629.jpeg

找一个QQ号

题目所提供的JPG图片,右下角即存在QQ号水印,如下图所示:

88fbe533f9fd73159ec2dfd2334e0838.jpeg

如果你也想零基础开启CTF之路

看这里👇👇👇

—  实验室旗下直播培训课程  —

490fa0c08c6aee0cddaa260e404a8f7d.jpeg

44dd7ceec4b8ae3e4b75eb4b66c5f7a6.jpeg

c93d17d23af018a70368c9aa0225aee0.jpeg001483c42bdf2bbc27bdefcfc6c4d3db.png

6dcdedff333c2ecdf8ab97b91aeddde7.jpeg

b030bb8ef70c080a60ae5135b38afd84.jpeg

92315495742136d95670dda60fda4b4a.jpeg

5a734f271140dd4e29326672bc193d86.jpeg

db9ccd6658e83355c50068d8e910eb4f.jpeg


来和20000+位同学加入MS08067一起学习吧!

58cafb40353067a2a6afc13c2714758b.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值