通过CRC32爆破修改图片的宽高 ctf-misc图片隐写

**

一.在处理图片隐写题的时候,可能会修改图片原有的宽高,导致图片里面的内容无法正常显示,那么怎么判断它的宽高是否被修改了呢?

**
1.把图片拖进010editor中会发现左下角提示CRC不匹配,这是因为修改了高宽,却没有修改CRC,导致读取报错。
在这里插入图片描述
2.在linux中CRC32错误的图片是无法打开的,也可以利用pngcheck检查图片,会提示CRC32校验错误

在这里插入图片描述
**

二.既然知道了CRC校验码错误,那么如何修改呢? 首先我们要知道CRC32是有哪些字节构成的

**
PNG文件中总是以固定的八个字节开头

89 50 4E 47  0D 0A 1A 0A

数据块长度13

00 00 00 0D

文件头数据块标示IDCH

49 48 44 52

13位数据块(IHDR)
下面为宽和高

00 00 07 7E  00 00 03 60

这5个字节依次为Bit depth,ColorType,Compression method,Filter method,Interlace method

08 06 00 00 00

接下来的四字节为该png图片的CRC校验码

7D C7 3F 7F

CRC校验码,由IDCH和IHDR共十七位字节进行crc计算得到
在这里插入图片描述

解决方法:

1.简单点的隐写题,可以直接修改宽高,然后显示flag
2.那么如果修改宽高,并不会直接看到flag,需要放入stegsolve里或者做其它的进一步处理时。
这里会产生一个问题,那就是修改过宽高的图片stegsolve无法打开,提示IO错误。
这是因为png图像的IHDR段中的高宽被修改,导致计算出来的CRC不正确,所以无法正确读取。
通过python2脚本来获取图片高度

# -*- coding: utf-8 -*-
import binascii
import struct
crc32key = 0x7DC73F7F
for i in range(0, 65535):
  height = struct.pack('>i', i)
  #CRC: 7DC73F7F
  data = '\x49\x48\x44\x52\x00\x00\x07\x7E' + height + '\x08\x06\x00\x00\x00'
  crc32result = binascii.crc32(data) & 0xffffffff
  if crc32result == crc32key:
    print ''.join(map(lambda c: "%02X" % ord(c), height))

运行:得到图片实际高度为0000043C,在010editor中修改保存
在这里插入图片描述
修改宽度同理,只需将参数进行简单替换
3.也可以同时爆破出图片的宽高,K.R.师傅告诉我的脚本:

import struct
import zlib

def hexStr2bytes(s):
    b = b""
    for i in range(0,len(s),2):
        temp = s[i:i+2]
        b +=struct.pack("B",int(temp,16))
    return b

str1="49484452"
str2="0806000000"
bytes1=hexStr2bytes(str1)
bytes2=hexStr2bytes(str2)
wid,hei = 1918,864

crc32 = "0x7dc73f7f"

for w in range(wid,wid+2000):
    for h in range(hei,hei+2000):
        width = hex(w)[2:].rjust(8,'0')
        height = hex(h)[2:].rjust(8,'0')
        bytes_temp=hexStr2bytes(width+height)
        if eval(hex(zlib.crc32(bytes1+bytes_temp+bytes2))) == eval(crc32):
            print(hex(w),hex(h))

爆破结果:
在这里插入图片描述

  • 19
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
CTF比赛中常用来爆破压缩包的工具有ARCHPR、AZPR和Fcrackzip。ARCHPR和AZPR都是用来暴力破解密码的工具,可以通过尝试不同的密码组合来破解压缩包的密码。一般来说,对于没有明显密码提示的压缩包,可以尝试使用这两个工具进行暴力破解,可以设置密码长度为1到6位。 另外,Fcrackzip是一款专门用来破解zip类型压缩文件密码的工具,它支持字典攻击和指定字符集破解。它适用于Linux和macOS系统。你可以使用Fcrackzip来尝试破解zip压缩包的密码。 综上所述,ARCHPR、AZPR和Fcrackzip是CTF比赛中常用来爆破压缩包的工具。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [CTF MISC压缩包简单题学习思路总结(持续更新)](https://blog.csdn.net/weixin_42193791/article/details/126915238)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [CTF工具压缩包爆破神器Fcrackzip详细用法](https://blog.csdn.net/Aluxian_/article/details/131404582)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值