MISC中的图片修改宽高问题

在做CTF中MISC分类题目时,很常见的一个问题就是修改图片正确的宽与高
(此篇笔记中的内容以ctfshow中MISC入门分类为切入点,感兴趣的同学可以一边做一边有不会的看看,仅供参考,我是菜鸡)
曾经狠狠地被{there is no flag}教育了

  • bmp图片口算图片的宽与高(MISC24)
    首先,我们在010editor中可以找到图片此时的宽与高分别为900*150

    同时,在010editor的最后一行可以看到结尾有4个0由windows自动补充,那么实际的像素点就是675040(0xA4CE0)+13=645053个像素点

    因为BMP的头部占据了53个,那么我们原本有645000个。
    由因为有3个RGB通道,那么645000/3=225000个像素点,本题中款式没有问题的,那么215000/900=250即为图片正确的高,在010editor中修改高,即可得到flag。

    要注意:bmp图片的宽高值在十六进制数据中是倒置的!!!

  • PNG图片由crc32爆破宽与高(MISC25/26)
    此处贴一crc爆破的jio本:

import struct
import binascii
import os
 
m = open("flag.png","rb").read()
k=0
for i in range(5000):
    if k==1:
        break
    for j in range(5000):
        c = m[12:16] + struct.pack('>i', i) + struct.pack('>i', j)+m[24:29]
        crc = binascii.crc32(c) & 0xffffffff
        if crc == 0x889C2F07:
        #目标图片对应的crc值
            k = 1
            print(hex(i),hex(j))
            break

根据脚本对图片正确的宽高进行爆破,得到后在010中修改即可得到flag。

  • JPG图片(MISC27)
    emm这个题,其实就是尽可能地将高搞大,在010editor中可以找到对应宽高的位置,进行修改即可。
posted @ 2021-10-04 23:00  Mundane-_-  阅读(2762)  评论(1编辑  收藏  举报