CTFSHOW-misc

1、
















 

补充:.bpg

文件类型:Borland Project Group

扩展名为.bpg的文件是一个开发文件。

文件说明:

Contains groups of files, called packages, that can be compiled in a single batch; used for organizing files related to a specific programming project; also called a Borland Package Group..bpg                                                                      

打开.bpg文件

Mac OS

需要使用到bpg图片的软件才可以打开bpg

下载bpg

bpg下载地址(其他地方下的用不了....)

https://bellard.org/bpg/

执行命令

bpgview.exe E:\firefox_download\misc3(1).zip\misc3.bpg

misc4



给了6个txt文件,hex fiend打开 看文件头和文件尾判断是什么文件
知识点

    JPEG\JPG
    文件头:FF D8 FF     
    文件尾:FF D9
    开头四个点 结尾也是点
    TGA
    未压缩的前4字节 00 00 02 00
    RLE压缩的前5字节 00 00 10 00 00
    PNG
    文件头:89 50 4E 47 0D 0A 1A 0A    
    文件尾:AE 42 60 82
    即开头为.PNG,结尾为IEND.B
    GIF
    文件头:47 49 46 38 39(37) 61    
    文件尾:00 3B
    开头为GIF89a
    BMP
    文件头:42 4D
    文件头标识(2 bytes) 42(B) 4D(M)
    BM开头
    TIFF (tif)
    文件头:49 49 2A 00
    II开头
    ico
    文件头:00 00 01 00
    Adobe Photoshop (psd)
    文件头:38 42 50 53

所以第一个为png、第二个是jpg、第三个是bmp、第四个是gif、第五个是tif、第六个是webp文件。应该为RIFFL开头
改后缀即可



Misc13















 

 这道题png图片隐写的原理有关

隐写术-PNG文件隐写(一)_3097的博客-CSDN博客_png文件隐写

请添加图片描述

找到文件末尾的IEND块,会发现这个块是14字节而非通常的12字节,也就是说这个块除了4位长度、4位标识和4位CRC,还带了两位数据(通常IEND块是不带数据的,但它也可以带,这应该就是本题知识点)。 

不难发现,每空两个字符取出来就是

c->63

t->74

f->66

导出十六进制编码













 

写脚本:

a="631A74B96685738668AA6F4B77B07B216114655336A5655433346578612534DD38EF66AB35103195381F628237BA6545347C3254647E373A64E465F136FA66F5341E3107321D665438F1333239E9616C7D"

flag=""
for i in range(0,len(a),4):#步长为4,也就是说每次虚幻去四个字符,留下两个,删去两个
    hexStr=a[i:i+2]
    flag+=chr(int("0x"+hexStr,16))#输出十六进制对应的ASCII码
print(flag)

得到flag













 

misc23














 

 提示说flag在时间里

下载之后得到的是一个psd文件(photoshop)

 ExifTool最新版是一个可以跨平台查看、编辑文件的应用程序。ExifTool最新版目前支持十多种数据格式。ExifTool最新版能够读取全球任一厂商的数码相片格式。

查看文件信息

关键信息:














 

Timestamp指的是时间戳,DECtoHEX是十进制转十六进制 ,而且一共有四段

时间戳转换工具:https://tool.lu/timestamp/

https://tool.lu/timestamp/

  












 

得到数据:
874837022
2699208888
2156633445
460348906

转化为十六进制

image-20211028105026319

ctfshow{fcbd427caf4a52f1147ab44346cd1cdd}

misc27

之前改动宽高都是png,在特定的位置改就可以啦,但是jpg不同,因为jpg图像被压缩了,所以需要查找

jpg是有损压缩格式,png是无损压缩格式。jpg是jpeg的简称,是目前网络上最为流行的图片格式,jpg格式的图片可以将图像文件压缩到最小格式,png全称为Portable Network Graphics,翻译过来就是便携式网络图形,它是一种无损压缩的图片形格式。

查看图片属性:












 

 高度150转换成16进制为96

宽度900转换成16进制为0384

直接在010editor搜索

 修改高度

 拿到flag

misc28

提示还是flag在图片下面

但是这次拿到的是gif动图,有多帧,所以要改多处












 

ctfshow{59c8bc525426166b1c893fe12a387fd7}

misc29


提示:flag在图片下面。

这道题有多帧,所以全部要改
这题还是gif 格式文件 和上一题一样 但是这有10帧数 需要把所有高度都改了9600 为FF00 然后使用Stegsolve 打开第8帧就是flag。


 ctfshow{03ce5be6d60a4b3c7465ab9410801440}


misc30(bmp文件修改宽高)
hint:正确宽度是950

bmp文件十六进制分析:实战——读取并分析BMP图像的十六进制数据_泼夫的博客-CSDN博客_图片16进制查看











 

 上图为文件头部分

 修改即可

950->03B6(这里有个要注意的点:要倒着写)

 拿到flag

ctfshow{6db8536da312f6aeb42da2f45b5f213c}

misc31(计算bmp文件宽度)

上一道题目的链接有bmp结构介绍

查看目前图片大小:











 

目前是900*150=135000个像素大小

每个像素点分别有RGB构成

文件头占了53个字节,文件尾的位置在487253字节处(后面两个字节是windows的”补0”),又因为每个像素点由3个字节(十六进制码6位)表示,每个字节负责控制一种颜色,分别为蓝(Blue)、绿(Green)、红(Red)

文件真实的像素大小为:(487253-53)/3=162400

这题的高度是对的,所以正确的宽度是162400/150=1082

转换16进制

宽改到43A(也就是3A 04)

拿到flag

ctfshow{fb09dcc9005fe3feeefb73646b55efd5}

misc32(png图片爆破宽高)










 

 爆破脚本:

import zlib
import struct

# 同时爆破宽度和高度
filename = "misc32.png"
with open(filename, 'rb') as f:
    all_b = f.read()
    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)
            #替换成图片的crc
            if crc32result == 0xE14A4C0B:
                print("宽为:", end = '')
                print(width, end = ' ')
                print(int.from_bytes(width, byteorder='big'))
                print("高为:", end = '')
                print(height, end = ' ')
                print(int.from_bytes(height, byteorder='big'))

结果:


在010修改即可

拿到flagctfshow{685082227bcf70d17d1b39a5c1195aa9}

misc33

同一个思路,同一个脚本








 

ctfshow{03070a10ec3a3282ba1e352f4e07b0a9}

misc34









 

由于脚本是根据CRC计算宽度和高度的,所以这里脚本没用了,只能根据提示一点一点微调

 调整的过程中发现有一条线

修改时注意图片中间的线,越明显越接近

正确宽度是1123多一点少一点都不行

修改宽度为:0463










 

ctfshow{03e102077e3e5de9dd9c04aba16ef014}

另一种写法使用脚本爆破所有可能

暴力枚举脚本:








 

import zlib
import struct
filename = "misc36.gif"
with open(filename, 'rb') as f:
    all_b = f.read()
    for i in range(920,951):
        name = str(i) + ".gif"
        f1 = open(name,"wb")
        im = all_b[:38]+struct.pack('>h',i)[::-1]+all_b[40:]
        f1.write(im)
        f1.close()

ctfshow中Misc入门WP(超级全)_罡罡同学的博客-CSDN博客_ctfshowmisc的file








 

misc35(jpg爆破宽度)

具体脚本在上面链接

高度调到了600,宽度在993-1000这个范围内都可以得到flag

ctfshow{ca35201ca9ed607e5a68f44ef573fbc3}

misc36(gif宽度爆破)









 

爆破脚本

import zlib
import struct
filename = "misc36.gif"
with open(filename, 'rb') as f:
    all_b = f.read()
    for i in range(920,951):
        name = str(i) + ".gif"
        f1 = open(name,"wb")
        im = all_b[:38]+struct.pack('>h',i)[::-1]+all_b[40:]
        f1.write(im)
        f1.close()

经测试,要先把每一帧的高度调大,不然看不到结果

原来的高度:









 

修改(注意要倒着写)


get it!










 

ctfshow{1ebf739f832906d60f57436b8179166f}


misc37(gif逐帧分离)







 

题目提示flag在图片里

下载拿到一张动图

放到gif在线分离工具:https://tu.sioe.cn/gj/fenjie/







 

分别在 第9、14、21、31、34

拼起来就是:ctfshow{2056782cd57b13261dcbbe3d6eecda17}








 

misc38(apng图片分离)

下载之后拿到一张png,看起来是静止的,在chorm打开之后发现是一张动图png







 








 

image-20210911133120744

ctfshow{48b722b570c603ef58cc0b83bbf7680d}

misc39(gif时间差flag)

hint:








 

misc40(apng时间差flag)

apng动图,使用APNG Disassembler工具,分离文件,同时会生成txt文件,记录详细信息

image-20210911140127814

例如这个需要把54提取出来,转换成对应的ascii码

脚本:

flag=""
for i in range(1,69):
    if i < 10:
        i = "0" + str(i)
    f = open("apngframe" + str(i) + ".txt")
    s = f.read()
    # delay=116/1000
    flag += chr(int(s.split("/")[0][6:]))
print(flag)

运行:








 

实际在28张图片时出现flag,可以将range范围改为28,69

flag:ctfshow{95ca0297dff0f6b1bdaca394a6fcb95b}

misc41(IDAT的数据块长度)

hint:提示:flag有多长?2cm……不好意思打错了,41位

使用工具:TweakPNG打开查看IDAT块 将长度进行chr转换

在这里插入图片描述

脚本(ascii转换)

s = [229,152,191,229,152,191,49,99,116,102,115,104,111,119,123,48,55,56,99,98,100,48,102,57,99,56,100,51,102,50,49,53,56,101,55,48,53,50,57,102,56,57,49,51,99,54,53,125]
for i in s:
    print(chr(i),end='')

结果:





 

 flag:ctfshow{078cbd0f9c8d3f2158e70529f8913c65}

misc43(收集报错)

hint:错误中隐藏着通往正确答案的道路

tweakpng打开图片发现很多报错提示,用pngdebugger看一下

pngdebugger使用:工具 PNG Debugger 的安装使用_Goodric的博客-CSDN博客






 

 里面有很多的crc是fail的模块

根据提示,把这些部分的十六进制提取出来

string ="E59387E50x93A62E630x746673680x6F777B360x656232350x383966660x666635650x333930660x653662380x373530340x646263300x3839327D"
string=string.replace("0x","")
for i in range(0,len(string),2):
    print((string[i:i+2]),end=" ")
#两两切割,0x替换掉

结果:(得到十六进制数据)

E5 93 87 E5 93 A6 2E 63 74 66 73 68 6F 77 7B 36 65 62 32 35 38 39 66 66 66 66 35 65 33 39 30 66 65 36 62 38 37 35 30 34 64 62 63 30 38 39 32 7D 

转为acsii码:

网站:十六进制转ASCII文本字符串

flag:ctfshow{6eb2589ffff5e390fe6b87504dbc0892}

misc44(CRC32隐写)

提示:错误中还隐藏着坑

还是试着用来png debugger,不过这次出来了好多crc数据块

至于如何提取正确和错误的CRC32,我的做法是用PCRT识别再放入txt,再写个脚本,就比较容易
PCRT:一款自动化检测修复PNG损坏的取证工具
可以在kali中安装PCRT:git clone https://github.com/sherlly/PCRT.git
然后 python PCRT.py -y -v -i misc44.png > 666.txt
python脚本代码:
原文链接:https://blog.csdn.net/m0_46625346/article/details/119083860

f = open('666.txt')
res = ''
while 1:
    c = f.readline()
    if c:
        if 'chunk crc' in c:
            # print(c)
            res+='0'
        elif 'Correct IDAT CRC' in c:
            res+='1'
    else:
        break

print(res)
print(len(res))
for i in range(len(res)//8):
    a = res[i*8:i*8+8]
    try:
        print(chr(int(a,2)),end='')
    except:
        pass







 

 666.txt的内容:

运行结果:







 

flag:ctfshow{cc1af32bf96308fc1263231be783f69e}

misc45(图片格式转换)
提示:有时候也需要换一换思维格式
其实图片中是是藏有了其他文件但是因为png和bmp格式图片像素点的读取方式不一样,在png格式下分离不出文件,需要先把图片从png格式转换成bmp格式,在进行binwalk提取得到flag.png
在线转换网站:https://cn.onlineconvert.com/pdf-to-bmp

直接改后缀名没法用,还是需要转化





 

binwalk -e


misc46(gif偏移量绘图)
hint:你见过扶乩吗

 这道题由于工具没有安装成功所以没做,学习一下大致思路

misc47

打开图片发现什么都没有

用谷歌浏览器打开:




 

 果然是apng文件

了解一下apng文件结构,简单来说就是每一个IDAT块前面都会有一个fcTL块,它其中就包含水平垂直偏移量

我们就是要提取这些偏移量进行绘图

先把图片的十六进制数据导出为1.txt

引用一下师傅的脚本:

import struct
from PIL import Image
import matplotlib.pyplot as plt
f = open('misc47.png','rb')
c = f.read()
c = c[c.index(bytes.fromhex('6663544C00000001')):]
pp = []
for i in range(1,1124,2):
    start = c.index(bytes.fromhex('6663544C0000')+struct.pack('>h',i))
    # start = c.index(bytes.fromhex('6663544C000000'+hex(i)[2:]))
    # print(start)
    fc = c[start:start+30]
    print(fc[18:20],fc[22:24])
    print(struct.unpack('>h',fc[18:20])+struct.unpack('>h',fc[22:24]))
    pp.append(struct.unpack('>h',fc[18:20])+struct.unpack('>h',fc[22:24]))
    # print(fc.index(b'\xb6'),fc.index(b'\x34'))
# print(c[:100])
img = Image.new('RGB',(400,70),(255,255,255))
for i in pp:
    new = Image.new('RGB',(1,1),(0,0,0))
    img.paste(new,i)
plt.imshow(img)
plt.show()

得到flag




 

ctfshow{6d51f85b45a0061754a2776a32cf26c4}

参考博客:ctfshow中Misc入门WP(超级全)_罡罡同学的博客-CSDN博客_ctfshowmisc的file



 

misc48(大大的脑洞)

用winhex打开,发现右侧文本信息有提示
1、统计FF的数量,再减去1
2、ctfshow{}中包含32个字符

第一条提示,其实指的是统计每两个有意义块之间的FF的数量再减一
图中紫色的就是,开头的那个FF也算,因为只有一个,减去1后就是0;接下来是12、11、0…
因为flag长度是32位,所以只统计前32个,即:
0 12 11 0 7 10 13 13 9 0 9 13 0 13 6 0 10 9 2 1 0 1 10 8 11 5 12 7 2 2 3 10
用小脚本跑一下

 


s = '0 12 11 0 7 10 13 13 9 0 9 13 0 13 6 0 10 9 2 1 0 1 10 8 11 5 12 7 2 2 3 10'
d = '0123456789abcdef'
for i in s.split(' '):
    print(d[int(i)],end='')

  


0cb07add909d0d60a92101a8b5c7223a
ctfshow{0cb07add909d0d60a92101a8b5c7223a}

原文链接:https://blog.csdn.net/m0_46625346/article/details/119083860

 


misc49,同样也是脑洞题。这里直接放参考链接了


 

https://blog.csdn.net/q20010619/article/details/120238821#t15

颜色通道题

 

misc50(stegslove颜色通道)


用stegsolve工具打开,不停的换色道,发现flag踪迹(狗头)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
ctfshow{84470883ee1eec2e886436461bf79111}


 

misc51

hint:你会数数吗。


 

乱糟糟的图片看的眼花缭乱,参考了师傅们的wp,思路应该是:

用脚本计算每个像素点出现的数量,并按出现数量的大小顺序排序

脚本:

from PIL import Image
im=Image.open('misc51.png')
im = im.convert('RGB')
img = Image.new("RGB",(900,150))

dic = {}

for h in range(900):
    for w in range(150):
        s = im.getpixel((h,w))
        dic[s] = dic.get(s,0)+1
lt = list(dic.items())
lt.sort(key = lambda x:x[-1])
print(lt)

 脚本跑出来的色素点个数是排好序的,这样看来,只有三种像素点出现次数多,其中(0,0,0)占最大部分,黑色,猜测是底色,其他两种颜色进行画图即可

Image.new新建一个黑色背景的图像,再遍历一次,如果坐标(x,y)对应的颜色为上述两种其一,则把该坐标对应的像素点变成白色


 

脚本:

from PIL import Image
im=Image.open('misc51.png')
im = im.convert('RGB')
img = Image.new("RGB",(900,150))

for h in range(900):
    for w in range(150):
        s = im.getpixel((h,w))
        if s == (64, 96, 128) or s == (128, 96, 64):
            img.putpixel([h, w], (255, 255, 255))
img.show()

运行脚本:

flag:ctfshow{51fcc6228d768a3acab1d05572e52133}


misc52

和上一题不一样的地方在于,在某些通道可以依稀看到flag
在这里插入图片描述
大概做法和misc51一样,但是不同的是,这题颜色的出现更有规律,每种颜色的出现次数在199-585

八神师傅非常贴心,这里只要选择出现次数最少的十种即可,不需要猜或是爆破

from PIL import Image
im=Image.open('misc52.png')
im = im.convert('RGB')
img = Image.new("RGB",(900,150))
lt = [(130, 176, 116),(72, 217, 123),(146, 16, 141),(130, 241, 105),(251, 160, 136),(5, 129, 88),(167, 46, 187),(20, 65, 141),(96, 231, 225),(196, 144, 18)]
for h in range(900):
    for w in range(150):
        s = im.getpixel((h,w))
        if s in lt:
            img.putpixel([h, w], (255, 255, 255))
img.show()

#由于数值较多,这里采用列表+循环

运行得到:

ctfshow{f87ad503c2c163471fbe768c9d7a9d6c}
 

 misc53(横向LSB)

解答:非常基础的LSB隐写。用stegsolve查看,可以看到三个颜色的0通道都发现了隐写痕迹。(原来勾选可以先看颜色通道,学到了)
在这里插入图片描述
在这里插入图片描述

ctfshow{69830d5a3a3b5006f7b11193e9bc22a2}

misc54(竖向LSB)

Alpha0B0G0通道均发现lsb隐写痕迹,而且和misc53不同的是,这里是竖向排列的,即按列(column)
在这里插入图片描述
勾选上对应选项
在这里插入图片描述https://www.cnblogs.com/cat47/p/11483478.html (至于位平面的选取为什么是BRG应该是色块的重叠顺序,具体可以参考上面的链接,都试试)

ctfshow{b1f8ab24b8ca223d0affbf372ba0e4fa}

misc55(反转+LSB隐写)

参考这位师傅的wp:

(还有一种方便的做法使用zsteg)

直接原图分析


 

分离


 

ctfshow学习记录-misc入门(图片篇-颜色通道50-56)_九枕的博客-CSDN博客_misc51

这篇里面有写脚本对图片进行翻转

ctfshow-Misc入门 图片篇(50-60)_z.volcano的博客-CSDN博客

ctfshow{daf256838e19a19d9e7b0a69642ad5ee}

misc56(MSB)

msb是小端存放的意思,lsb是大端存放

提示:怎么老是愉快的LSB部分。
解答:lsb查看,发现r4,r2,r1,g4,g2,g1有。
在这里插入图片描述

在这里插入图片描述

 这道题目得是msb才出flag

ctfshow{1b30c28a5fca6cec5886b1d2cc8b1263}

后面还有几道题,不过现在ctfshow没有了,这位师傅的payload有ctfshow-Misc入门 图片篇(50-60)_z.volcano的博客-CSDN博客


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值