简单讲述几种查找图片中隐藏Flag的方法

一、附加字符串

flag藏在图片中,使用WinHex软件或者记事本打开,搜索发现flag。

在这里插入图片描述

二、修改图片的宽高

在这里插入图片描述

像这种图片很明显是被修改过高度的,我们使用python脚本得出正常图片的宽高。

import zlib
import struct

filename = '1.png'
with open(filename, 'rb') as f:
    all_b = f.read()
    crc32key = int(all_b[29:33].hex(),16)
    data = bytearray(all_b[12:29])
    n = 4095  
    for w in range(n):          
        width = bytearray(struct.pack('>i', w))     
        for h in range(n):
            height = bytearray(struct.pack('>i', h))
            for x in range(4):
                data[x+4] = width[x]
                data[x+8] = height[x]
            crc32result = zlib.crc32(data)
            if crc32result == crc32key:
                print("宽为:",end="")
                print(width)
                print("高为:",end="")
                print(height)
                exit(0)

得出的结果是:

在这里插入图片描述

使用软件WinHex打开那张图片,就能看到当前的图片的高是不对的:

在这里插入图片描述

在WinHex里把高改成01 df就可以了,得到正常图片:

在这里插入图片描述

三、jphide图片隐写

使用小程序stegdetect来检测图片是不是用了jphide隐写。
在cmd中使用这个代码:stegdetect.exe -tjopi -s 10.0 jphide.jpg

在这里插入图片描述

密码破解使用字典,代码为stegbreak.exe -r rules.ini -f password.txt jphide.jpg,得到密码为power123

在这里插入图片描述

再使用软件Jphswin来破解图片:

打开这个图片:
在这里插入图片描述
点击Seek,输入破解到的密码,再另存为txt文件就能得到flag。
在这里插入图片描述在这里插入图片描述

四、OutGuess隐写

需要在kali虚拟机里面使用outguess工具。

安装方法是:

git clone https://github.com/crorvick/outguess
# 进入outguess的目录
./configure && make && make install

一般图片属性-详细信息-备注里面会有图片的Key
在这里插入图片描述
把图片文件复制到虚拟机里面,然后使用代码outguess -k gUNrbbdR9XhRBDGpzz -r outguess.jpg -t 1.txt能得到结果文件。

五、异或隐写

在这里插入图片描述

这个图片需要用Stegsolve这个工具进行反色,点击上面“>”按钮得到:
在这里插入图片描述

再把下面的图片进行异或处理
在这里插入图片描述
用这个Image Combiner功能
得到了:

最后用工具QR Research进行扫描,就可以得到结果
在这里插入图片描述

六、盲水印

在这里插入图片描述
当一张图片的WinHex里面有这些东西,说明这个图片有盲水印,先在kali里面使用binwalk,binwalk -e 1.png --run-as=root得到了很多文件。
在这里插入图片描述
把压缩文件复制到实体机,得到两张盲水印图片:
在这里插入图片描述
使用python bwmforpy3.py decode day1.png day2.png flag.png --oldseed即可得到flag图片。

七、二维码画图

在这里插入图片描述
有时候题目中会给这么一大串的0和1的组合,这时需要用到python脚本来进行画出二维码。

from PIL import Image
MAX = 60    #二维码长宽
pic = Image.new("RGB",(MAX, MAX))
str=" " #二进制数据
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 = i+1
pic.show()
#pic.save("flag.png")
  • 如果电脑上没有安装PIL库,可以使用命令pip install Pillow来安装一下。
    在这里插入图片描述
    如果给的是这种坐标,也是需要用python脚本画图。
from PIL import Image, ImageDraw, ImageFont, ImageFilter
f1 = open(r'flag.txt','r')
width = 300
height = 300
image = Image.new('RGB', (width, height), (255, 255, 255))
draw = ImageDraw.Draw(image)
color = (0,0,0)
while 1:
    s = f1.readline()
    if not s:
        break
    s = s.strip('\n')
    s = s.lstrip('(')
    s = s.rstrip(')')
    a = int(s.split(',')[0],10)
    b = int(s.split(',')[1],10)
    draw.point((a, b), fill=color)
image.show()

八、灰度图片LSB隐写

如果一个题目给的是一张灰度图片,那么大概率是进行了LSB隐写,使用python脚本解码即可出现结果。

from PIL import Image
p = Image.open('1.png').convert('L')
a,b = p.size

flag = Image.new('L',(a,b),255)
for y in range(b):
    for x in range(a):
        if  p.getpixel((x,y))%2==0:
            flag.putpixel((x,y),255)
        else:
            flag.putpixel((x,y),0)
flag.show()
  • 20
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 在 CTF 比赛,常见的几种编码包括: 1. base64:这是一种用 64 个字符来表示二进制数据的编码方式。 2. hex:这是一种将二进制数据表示为十六进制的编码方式。 3. ASCII:这是一种将数字、字母和其他字符表示为二进制数的编码方式。 4. url-encoding:这是一种用于将特殊字符编码为 %HH 的编码方式,用于在 URL 传输数据。 5. ROT13:这是一种将字母表的字母移动 13 位的编码方式,常用来作为简单的隐写术。 6. morse code: 这是一种用电信号表示字符和数字的编码方式 7. RSA,AES这是常见的加密算法 这只是一个简单的列表,实际上还有许多其他编码和加密方式可能会在 CTF 比赛使用。 ### 回答2: CTF(Capture The Flag)是一种网络安全竞赛,参赛者需要解决各种密码学、网络安全等相关问题。在CTF比赛,常见的几种编码方式主要包括以下几种: 1. Base64编码:Base64是一种常见的编码方式,将二进制数据转换为可打印字符。它使用64个字符(A-Z、a-z、0-9、+、/)来表示二进制数据的6个比特位,通常用于在网络传输传递二进制数据。 2. ASCII编码:ASCII(American Standard Code for Information Interchange)是一种常见的字符编码标准,使用7位二进制数表示128个字符,包括数字、字母、标点符号等。 3. Hex编码:Hex(十六进制)编码将数据转换为16进制表示。每个16进制数字对应于4个二进制位,常用于表示二进制数据。 4. URL编码:URL编码是一种用于在URL传递参数的编码方式。它将非字母、数字字符转换为%xx的形式,其xx表示字符的ASCII码的十六进制值。 5. Morse编码:莫尔斯电码是一种在电报通信使用的编码方式。它使用不同长度的信号(点或划)表示字母、数字和标点符号。 6. RSA编码:RSA(由Rivest、Shamir和Adleman三位发明者的姓氏命名)是一种常用的非对称加密算法。RSA编码用于加密和解密数据,其公钥用于加密数据,私钥用于解密数据。 以上是CTF比赛常见的几种编码方式,参赛者需根据具体情况,解密或编码相关数据以解答题目。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微瑟秋风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值