zoukankan      html  css  js  c++  java
  • {DARK CTF }Misc/QuickFix

    翻译学习自 https://github.com/apoirrier/CTFs-writeups/blob/master/DarkCTF2020/Misc/QuickFix.md

    题目:Magic is in the air! Want a byte of it? 

    下载得到一个超大压缩包,里面有10000张jpg图片,都无法打开

     这是其中一部分图片的样式

    从题目描述中得到一个关键词magic number       //百度百科https://baike.baidu.com/item/magic%20number/6759327?fr=aladdin

    它可以用来标记文件或者协议的格式,很多文件都有幻数标志来表明该文件的格式。

    从题目描述中我们可以猜想

    文件的幻数可能是错误的

     strings第一张图片,发现关键字     //strings命令简介https://blog.csdn.net/stpeace/article/details/46641069    strings命令即打印文件中可打印的字符   

    IHDR 

    IDAT

    IEND

    判断这可能是个png类型              //PNG,JPEG,BMP,JIF图片格式详解及其对比   https://www.cnblogs.com/lzhu/archive/2004/01/13/8014703.html

    用Hexed.it打开文件//https://hexed.it/

    我们可以了解到png的文件头格式中               //PNG文件头格式解析https://blog.csdn.net/u013943420/article/details/76855416

    89 50 4E 47 0D 0A 1A 0A 是PNG头部署名域,表示这是一个PNG图片
    00 00 00 0D 描述IHDR头部的大小
    49 48 44 52 是Chunk Type Code / magic number

    因此我们把开头的10个字节替换为PNG标头的8个字节

    修改后导出得到一个小小的黑块

    可以推测我们需要将10000个文件全部修复然后拼起来得到一个完整的图像

    python脚本

    1.实现自动化修复

    def modify_file(filename):
        with open(filename, "rb") as f:
            with open(filename.replace("jpg", "png"), "wb") as g:
                image = f.read()
                
                image2 = bytes.fromhex("89504E470D0A1A0A")
                g.write(image2 + image[10:])

    打开损坏的文件,然后在另一个文件上将PNG标头的幻数和图像的其余部分连接

    2.图像组合

    import numpy as np
    from PIL import Image
    
    data = np.zeros((2000,2000,4), dtype=np.uint8)
    
    for i in range(100):
        for j in range(100):
            #modify_file("flag_{}_{}.jpg".format(i,j))
            im = Image.open("flag_{}_{}.png".format(i,j))
            array = np.array(im.getdata()).reshape(20,20,4)
            data[20*i:20*(i+1), 20*j:20*(j+1)] = array
    
    img = Image.fromarray(data, 'RGBA')
    img.save('flag.png')

    得到了完整的图像,通过旋转与对称我们可以得到flag:darkCTF{mag1c_byt3s}

  • 相关阅读:
    linux根目录空间不足
    兴趣点 / 关键点( Interest point/Keypoint )
    opencv批量修改图片尺寸
    Excel批量修改文件
    xm数据写入
    opencv矩阵操作
    SVM参数解析
    Mat取行或列
    clone()与image和 cloneTo()
    最大连通域(指针)
  • 原文地址:https://www.cnblogs.com/FrozenW/p/13783452.html
Copyright © 2011-2022 走看看