Misc:zm.png图片隐写

考点:

        图片隐写、zlib解压、二进制转二维码

题目:f5fa688855514d3ea4249eca0e6675ac.png

1.拿到题目先使zsteg查看png图片内容,发现zlib数据。

719b99e6a5134b6686a3f6ba6daf2adb.png

2.使用010edit分离zlib文件到独立文件。

18610088c89546c98d2ecfb246752fa4.png

3.解压zlib文件

import zlib

with open('download.zlib', 'rb') as f:
    compressed_data = f.read()
    decompressed_data = zlib.decompress(compressed_data)
    
    # 将解压后的内容保存到新的文件中
    with open('decompressed_file.txt', 'wb') as output_file:
        output_file.write(decompressed_data)

4.解压后为二进制文件

111111100000010010111111110000010110100101010000011011101001111110101011101101110101100011000101110110111010101010000010111011000001001010100001000001111111101010101010111111100000000111111000000000000101111010110001111011110111110000001000100011001011010110110001011111000010011110100001000110000101001011100011011110100000101010100101011111001101000011101000011011011111011010010011001100010001011001001110001011011111101100000000011101111100010010111111100100001010101010110000010111001101000110011011101011011001111111011101110101101010010110111110111010001010111000110111000001010111101001100111111111100011110110101000

93da887addb7486ca1d6bc0ad0d34f1e.png

5.在二进制数最后任意填充一位0或1,使为变为偶数,再使用随波逐流工具生成图片

a34fac0dbea54b21a63f4363c752efb8.png

或用脚本进行二进制转图片操作:

#-*- coding:utf-8 -*-
import binascii
from PIL import Image

string = '1111111000000100101111111100000101101001010100000110111010011111101010111011011101011000110001011101101110101010100000101110110000010010101000010000011111111010101010101111111000000001111110000000000001011110101100011110111101111100000010001000110010110101101100010111110000100111101000010001100001010010111000110111101000001010101001010111110011010000111010000110110111110110100100110011000100010110010011100010110111111011000000000111011111000100101111111001000010101010101100000101110011010001100110111010110110011111110111011101011010100101101111101110100010101110001101110000010101111010011001111111111000111101101010001'
MAX_num = len(string)                      
#对数据数目开平方根,因为二维码是正方形。
MAX=int(MAX_num ** 0.5)                 
pic = Image.new("RGB", (MAX, MAX))
i = 0
for y in range(0, MAX):
    for x in range(0, MAX):
        if(string[i] == '1'):
            #putpixel将坐标为(x,y)的像素点变为(0,0,0)
            pic.putpixel([x, y], (0, 0, 0))     
        else:
            #putpixel将坐标为(x,y)的像素点变为(255,255,255)
            pic.putpixel([x, y], (255, 255, 255))     
        i = i + 1
pic.show()
pic.save("qr.png")

 

输出的图片如图,放大直接用微信扫得到flag

de73423bf5cd4995bbbc06afa4cdcb02.png.

1a17dde304734ff8aca0eeb75b573c46.png

本题坑点:

二进制数少一位,造成直接转换的话图片为乱码如下图:

555d749881b54dab8a0b94571ceca29e.png

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值