ctf.show misc入门 21~40

目录

misc21

misc22

misc23

misc24

misc25

misc26

misc27

misc28

misc29

misc30

misc31

misc32

misc33

misc34

misc35

misc36

misc37

misc38

misc39

misc40


misc21

Hint:flag在序号里。

 

得到信息hex(X&Ys),hex()是转16进制

上面四段分别10进制转16进制 合起来 就是flag

misc22

Hint:flag在图片

涉及到我没用过的工具magicexif

 直接打开就是 不过黄色的看起来很糊

ctfshow{dbf7d3f84b0125e833dfd3c80820a129}


misc23

Hint:flag在时间里。

又是新的知识点

使用kali中的exiftoor

 ​​​​​​​

 在这里获得信息,Timestamp指的是时间戳,DECtoHEX是十进制转十六进制

时间戳(Unix timestamp)转换工具 - 在线工具 (tool.lu) 

用这个网站来获取时间戳,

 

再将十进制数转为16进制的,把上面的4组时间戳都这样搞就行了 ,最后拼接

misc24

Hint:flag在图片上面

给了个bmp文件,是图片高度的问题,但我试了瞎改还不行

 bmg文件计算图片宽高 文件头占了53个字节,一个像素由3个字节构成

像素数 = (675053-53)/ 3 =

我们知道宽是900,所以正确高是 225000/900=250, 十六进制是 FA

 就出来了

misc25

Hint:flag在图片下面

这是一个png文件 ,010随便改高一点就出来了

misc26

Hint:flag还是在图片下面,但到底有多下面?。

010改高度后发现,flag条件 需要知道真实的高度

脚本爆破一下真实高度,只需将其中的crc替换即可

import zlib
import struct

# 同时爆破宽度和高度
filename = "C:/Users/达/Desktop/misc26.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 == 0xEC9CCBC6:
                print("宽为:", end = '')
                print(width, end = ' ')
                print(int.from_bytes(width, byteorder='big'))
                print("高为:", end = '')
                print(height, end = ' ')
                print(int.from_bytes(height, byteorder='big'))

 

 16进制没有体现好, 606转16进制是25e

 

misc27

HInt:flag在图片下面

找到正确的地方修改即可

 

misc28

Hint:flag在图片下面

是一个gif  比较懵

gif的每一帧都有宽高所以修改的地方不止一处,

 

misc29

与上一题一样的思路,不过要改很多个 把每一帧都改掉,因为某一帧会出现flag

 

misc30

Hint:正确的宽度是950。

950转为16进制是3B6
010修改宽,注意写法

 

 

misc31

Hint:高度是正确的,但正确的宽度是多少呢。

 bmg文件计算图片宽高 文件头占了53个字节,一个像素由3个字节构成

像素数 = (487253-53)/ 3 =162400

我们知道高是150,所以正确宽是 162400/150=1082, 十六进制是 43A

misc32

Hint:高度是正确的,但正确的宽度是多少呢

这题是png  ,要用脚本爆破,还是msic26的脚本

import zlib
import struct

# 同时爆破宽度和高度
filename = "C:/Users/达/Desktop/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'))

 正确修改即可

misc33

Hint:出题人丧心病狂,把高度也改了

与上一题一样的脚本,修改图片路径 crc 

 

 

misc34

Hint:出题人狗急跳墙,把IHDR块的CRC也改了,但我们知道正确宽度肯定大于900

也借用大佬的脚本

 


import zlib
import struct
filename = "C:/Users/达/Desktop/misc34.png"
with open(filename, 'rb') as f:
    all_b = f.read()
    for i in range(901,1200):
        name = str(i) + ".png"
        f1 = open(name,"wb")
        im = all_b[:16]+struct.pack('>i',i)+all_b[20:]  #w = all_b[16:20]
        f1.write(im)                                    #h = all_b[20:24]
        f1.close()

 生成很多 png,拿肉眼看哪个是正常的

misc35

Hint:出题人负隅顽抗,但我们知道正确宽度肯定大于900

依然与上题一样,但是要先将高度拉长点,要能看全乱码

import zlib
import struct
filename = "C:/Users/达/Desktop/misc35.jpg"
with open(filename, 'rb') as f:
    all_b = f.read()
    #w = all_b[159:161]
    #h = all_b[157:159]
    for i in range(901,1200):
        name = str(i) + ".jpg"
        f1 = open(name,"wb")
        im = all_b[:159]+struct.pack('>h',i)+all_b[161:]
        f1.write(im)
        f1.close()

大概994左右 

misc36

Hint:出题人坦白从宽,正确的宽度在920-950

gif,先修改高度,继续脚本遍历

import zlib
import struct
filename = "C:/Users/达/Desktop/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()

正确宽度941

misc37

Hint:flag在图片里

gif 逐帧查看即可

misc38

Hint:flag在图片里

一个png,打开跟gif一样会动,(我是用honeyview打开得,也可以逐帧看)

与上题一样

misc39

Hint:flag就像水,忽快忽慢地流

一个 gif , 287 帧图片,但是并没有 flag 的内容。

又是新的知识点

这题是 gif 帧数间隔隐写,就是动图每一帧播放的速度时间都是不一样的。
需要用到kali的工具 identify ,
安装命令:

sudo apt-get install imagemagick

 提取命令:identify -format "%T " misc39.gif > 1.txt

打开 1.txt 里面一串 36 和 37 的数字,把 37 换成1、36 换成 0,就得到长度为 287 的二进制字符串。
然后 flag 有 41 个字符,287/41 = 7 ,所以把每 7 位转一个字符。(正常是 8 位二进制转一个字符)
这里用代码实现:

s="11000111110100110011011100111101000110111111101111111011011010101100100111000011000101100101100110110011001110010111001011010111001101100010011011111000101100101011001001101100111000110010001110010110110011001111000010111001110010111000101100011110000101100000110100011010101110011111101"
flag=""
for i in range(41): #287//7
    flag += chr(int(s[7*i:7*(i+1)],2))
print(flag)

misc40

Hint:flag就像歌,有长有短仿佛岁月悠悠

这里用到一个工具 APNG Disassembler 。
APNG图片分解器(APNG Disassembler)是一个用来分解APNG图片的软件,使用这个工具你可以把APNG动画图片中的每一帧都分解出来,并且把帧导出保存为图片文件。
工具处理图片后,除了每一帧图片外,每张图片还带有一个 txt 文件,

大佬说前28个信息没用,用 python 代码脚本提取每个 txt 文件的内容。(从每个 txt 文本中的第七个字符开始取)

flag=""
for i in range(28,69): #flag内容从28位开始
    f = open('C:/Users/达/Desktop/apngframe'+str(i)+'.txt')
    s = f.read()
    flag += chr(int(s.split("/")[0][6:]))
print(flag)

 


 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
scikit-misc 是一个辅助库,包含了许多用于科学计算和数据分析的工具函数,十分方便实用。使用 scikit-misc 前,需要先安装这个库,可以利用命令行工具 pip 进行安装: pip install scikit-misc 使用 scikit-misc 的主要步骤包括导入库、选择需要使用的函数、创建数据并应用函数,下面以其中的几个常用函数为例进行介绍: 1. montage:拼接图像 montage 函数可以将多个图像拼合在一起,形成一个大图像。使用前需要导入相关的包: from skimage.util import montage 创建一个 10x10 的标准图像,并将其随机变色: import numpy as np a = np.zeros((10, 10, 3), dtype=np.uint8) a[ : , : , 0] = 255 * np.random.rand(10, 10) a[ : , : , 1] = 255 * np.random.rand(10, 10) a[ : , : , 2] = 255 * np.random.rand(10, 10) 将图像拼合起来,并显示出来: montage(a, padding_width=3, multichannel=True) plt.show() 2. random_noise: 添加噪声 random_noise函数可以向图像中添加随机噪声。使用前先需要导入相关的包: from skimage.util import random_noise 创建一张 100x100 的灰度图像,并将其添加随机噪声: import numpy as np from skimage.data import camera from skimage.io import imshow image = camera() noisy_image = random_noise(image, mode='gaussian', var=0.1**2) 显示原图像和添加噪声后的图像: imshow(image, cmap='gray') plt.show() imshow(noisy_image, cmap='gray') plt.show() 3. img_as_ubyte:将图像类型转换为 uint8 img_as_ubyte函数可以将图像类型转换为 uint8。使用前需要导入相关的包: from skimage import data, img_as_ubyte import matplotlib.pyplot as plt 读取一张图片并将其类型转换为 uint8: cat = data.chelsea() cat_u8 = img_as_ubyte(cat) 显示原图像和转换后的图像: _, axs = plt.subplots(nrows=1, ncols=2, figsize=(15, 5)) axs[0].imshow(cat, cmap='gray') axs[0].set_title('Original') axs[1].imshow(cat_u8, cmap='gray') axs[1].set_title('img_as_ubyte') plt.show() 以上就是三个 scikit-misc 的常用函数示例。使用这些函数可以使得科学计算和数据分析变得更加轻松愉快。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值