ctfshow学习记录-misc入门(图片篇-颜色通道50-59)

news2024/11/28 15:58:47

目录

    • misc50
    • misc51
    • misc52
    • misc53
    • misc54
    • misc55
    • misc56
    • misc57
    • misc58
    • misc59

misc51-52的wp和脚本参考的是csdn博主:z.volcano

九某人的碎碎念:这篇一更,说明近期是真的没有时间写wp了。虽说好多都是之前做过的题,但是wp整理起来还是比较耗时的。近几个月事特别多,年底前基本没什么时间了,等不太忙了我再继续更新~
 
提醒:直接看misc59wp的师傅们可以先看一下misc57中”进一步学习“的链接(●°u°●)​ 」


misc50

提示:有时候视线也要放低一点
解答:用stegsolve看一下,翻看几页就能获取flag。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

ctfshow{84470883ee1eec2e886436461bf79111}


misc51

提示:你会数数吗。
解答
用脚本计算每个像素点出现的数量,并按出现数量的大小顺序排序。

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)
#((128, 96, 64), 279), ((64, 96, 128), 282)

将出现频次较多的是(128, 96, 64)出现279次,(64, 96, 128)出现282次。将这两个像素的位置换成白的。

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()

在这里插入图片描述

ctfshow{51fcc6228d768a3acab1d05572e52133}

我运行的时候出现了问题,记录一下:
如果程序提示DLL load failed while importing _imaging: 找不到指定的模块。那就是python和pillow版本不匹配,可以卸载重安装一下pillow。
pillow网址:https://pillow.readthedocs.io/en/latest/installation.html
在这里插入图片描述

比如我是python3.8,可以选择pillow6.2.1及以上的

pip uninstall pillow
pip install pillow==6.2.1 -i https://pypi.tuna.tsinghua.edu.cn/simple/

misc52

提示:不会数数没关系,这次可以用眼睛瞪。
解答:类似上道题也要计算像素数量。提示说可以用眼瞪,stegsolve查看有一些通道确实可以模糊看到有信息。

(misc52的预期,因为是索引颜色,所以一共只有不超过255种颜色像素点。写个脚本输出每种索引色像素点的排列,会发现大部分都随机排布在整个图像里,但有十种颜色的排布仅出现在特定区域,那么这十种颜色的像素点必然携带了某种信息,把它们提取出来就行。)
在这里插入图片描述

z.volcano师傅的wp里说选择出现次数最少的十种即可获取flag。(emmm所以我才对misc题比较头疼,总会出现一些没有见过的思路)

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部分。
解答
Alpha0、B0、G0通道发现隐写痕迹,是竖向排列的,选择按列(column)。
在这里插入图片描述

在这里插入图片描述

ctfshow{b1f8ab24b8ca223d0affbf372ba0e4fa}


misc55

提示:怎么又是愉快的LSB部分。
解答:R0,G0,B0,竖向,但是直接这样提取没有发现信息。
图片是反转的,那可能涉及镜面反转。
在这里插入图片描述

方法一:可以用画图软件翻转一下,win自带的画图软件就可以实现。
在这里插入图片描述

然后再lsb分析一下啊,发现压缩包,save bin提取出来。
在这里插入图片描述

获取flag。
在这里插入图片描述

方法二:使用zsteg

zsteg -a misc55.png   
 #-a 查看各个通道的lsb,尝试各种已知组合

发现有一个通道有zip。
在这里插入图片描述

提取一下该通道,获取flag。
zsteg -e b1,rgb,lsb,YX misc55.png ->1.zip


misc56

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

获取flag。
在这里插入图片描述

ctfshow{1b30c28a5fca6cec5886b1d2cc8b1263}


misc57

提示:没完没了的LSB部分。
解答:可看到rgb3-0通道都有。
在这里插入图片描述

zsteg不成功,那就是低位读取。(具体可看“进一步学习”的链接)

使用Stegslove,六个bit plane order,穷举吧。
测了一圈顺序,我一个也不认识。所以我干脆就把6个顺序全导出来,去linux下测了测。
在这里插入图片描述

测了之后发现GBR的是个zlib压缩数据。
在这里插入图片描述

找个了zlib压缩和解压缩的脚本。
用binwalk就可以解压缩:binwalk -e zlib文件

我下面也附上一个脚本实现的解压缩:
python使用zlib压缩和解压文件@CA-CA

import zlib
def decompress(infile, dst):
    infile = open(infile, 'rb')
    dst = open(dst, 'wb')
    decompress = zlib.decompressobj()
    data = infile.read(1024)
    while data:
        dst.write(decompress.decompress(data))
        data = infile.read(1024)
    dst.write(decompress.flush())
decompress('555',"555.dat")

在这里插入图片描述
进一步学习

java lsb隐写_LSB隐写工具对比(Stegsolve与zsteg)@非专业de人士


misc58

提示:似曾相识的LSB部分。
解答:是 rb:3-1。
在这里插入图片描述

用stegsolve分析不出来,那就是小端存放,先用zsteg分析一下看看是不是高位读取。确实能够获取数据,再利用上面的zlib脚本就获取到了flag。
在这里插入图片描述


misc59

提示:LSB之两个工具两个工具跑得快跑得快全都解不出来全都解不出来真奇怪真奇怪。

解答:rbg2-0应该不用多说了。

两个工具都跑不出来,其实就是低位读取,小端存放。(注:misc57的“进一步学习”里有相关知识点链接)

那么用Stegsolve把数据导出,选择LSBFirst低位读取。save bin。
(导出rgb就可以,我起初以为要六个都测一遍,没想到第一个就是)
在这里插入图片描述

然后把读取的数据小端存放即可。

import binascii

with open('rgb1','rb')as file:
    content=file.read()
    content_hex=binascii.hexlify(content)
result=""
for i in range(0,len(content_hex),2):
    tmp=str(bin(int(content_hex[i:i+2],16))[2:].zfill(4*2))
    result+=tmp[::-1]
result_hex=hex(int(result,2))[2:]
result_data = bytearray.fromhex(result_hex)
with open('rgb1_lsb_large.zip','wb') as file2:
    file2.write(result_data)

执行后得到一个压缩包,打开压缩包获取flag。
在这里插入图片描述

期待师傅们可以更一下misc61的wp,让我学习学习,目前还没有思路~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/3631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV-Python 颜色识别(红色)并拟合矫正目标区域

OpenCV版本:4.6.0.66 算法实现思路: 颜色识别(红色)形态学去噪轮廓检测多边形拟合透视矫正代码实现: import cv2 import numpy as np# 可视化 def img_show(name, img):cv2.namedWindow(name, 0)cv2.resizeWindow(name, 1000, 500)cv2.imsh…

Java内存模型与volatile

Java内存模型 Java内存模型Java Memory Model,简称JMM,本身是一种抽象的概念并不真实存在它仅仅描述的是一组约定或规范,通过这组规范定义了程序中(尤其是多线程)各个变量的读写访问方式并决定一个线程对共享变量的写入何时以及如何变成对另…

白鹭群优化算法(ESOA)附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

单调区间能写成并吗?【基于间断区间的讨论】

不能。 问题 在做到一道题的时候,发现了两个减区间,于是就用并∪连接到一起了,但是答案是要用和连接。于是想要辨析一下这个并和和的区别。 区别 并:并的意思是将多个区间看成一个并起来的整体,在整个区间上仍然是…

按照 STAR 法则介绍自己做过的项目

大家好啊,我是大田 介绍项目注意两点:1、自己真的做过 2、逻辑表达能力 为什么推荐你用 STAR 法则说呢? STAR 法则是结构化面试中非常重要的理论。 面试官通过这样的描述全面了解你的测试知识、经验、技术能力的掌握程度,通过你发…

本地pycharm连接到远程服务器(超级详细)

本地pycharm连接到远程服务器(超级详细) 文章之前,你需要做的是 1.服务器需要创建好虚拟环境 2.你的本地安装好pycharm 目的是 同步服务器上的文件 在本地进行debug,并将修改后的文件进行更新 一般是将文件代码上传到服务器上面&…

【微服务】Sentinel 控制台

目录 1. 概述 2. 启动控制台 2.1 获取 Sentinel 控制台 2.2 启动 3. 客户端接入控制台 3.1 引入JAR包 3.2 配置启动参数 3.3 触发客户端初始化 4. 查看机器列表以及健康情况 5. 监控 5.1 "簇点链路"中显示刚刚调用的资源(单机实时) …

猿创征文|分享一下我的日常开发工具和常用软件

1、Eclipse IDE for Java Developers 这个软件,个人已经用了很多年的免费 Java 开发软件。 1)配置JDK 2)新建项目 3)运行使用 这里注意到有 Run As 和 Debug As ,区别就是后者是调试模式,你可以在代码任意处打断点跟…

element-ui中获取el-divider的组件的ref时为空

element-ui中的el-divider组件是函数式组件,所以当我尝试获取其ref时总是获取不到,因为函数式组件没有this. ![在这里插入图片描述](https://img-blog.csdnimg.cn/496711bf5c2a4dd1bee168e4e2d638d4.png)此时打印this.$refs,控制台输出: 没有h2,翻看el-divider源码发现是函数式…

C++入门学习3-指针与字符数组,函数,指针数组

c入门学习3char型指针的使用p*p*p与p与[整型指针指向整型数组]的区别指针与函数的使用指向函数的指针空指针调用函数从函数中返回指针一维数组和二维数组的类比CHAR型指针数组关于&achar型指针的使用 char型指针可以直接指向一个字符串,如下 char s[]{a,b,c};…

YOLO V7源码解析

1.命令行参数介绍 YOLO v7参数与YOLO v5差不多,我就直接将YOLO v5命令行参数搬过来了,偷个懒 --weights:初始权重--cfg:模型配置文件--data:数据配置文件--hyp:学习率等超参数文件--epochs:迭代次数-imgsz:图像大小--rect:长方…

多目标蜉蝣优化算法(MOMA)附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

统计信号处理基础 习题解答6-6

题目 在本题中,我们扩展标量BLUE的结果。假定 其中θ 是待估计的未知参数,β 是已知常数,数据矢量x 的协方差矩阵是C 。在本题我们定义修正的线性估计量为 证明BLUE为: 另外求最小方差。 解答: 首先确保线性估计量是…

TFT-LCD显示中英文

TFT-LCD显示中英文 在前面编写了屏幕显示ASCII字符和字符串后,本次实现屏幕显示中文字符和中文字符串 中文字符取模 阴码,逐行式,逆向,十六进制数,C51格式, 输入要显示的中文字符,字体选择宋…

【数据结构】搜索二叉树(C++实现)

目录 一、二叉搜索树的概念 二、二叉搜索树的实现 2.1 节点的定义及构造 2.2 树的结构及功能展示 2.3 树的 Insert 2.4 树的中序遍历 2.4 树的 Find 2.5 树的 Erase 2.6 拷贝构造、赋值运算符重载、析构函数 三、递归实现树的增删查 3.1 递归实现 FindR 3.2 递归实…

Vue | Vue.js Composition API(二)

🖥️ Vue.js专栏:Vue.js 初级知识 Composition API(二) 🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 ✨ 个人主页:CoderHing的个人主页 🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀…

嘿,朋友,其实 CSS 动画超简单的 - 时间函数篇(贝塞尔曲线、steps,看完还不懂算我输)

分配内存 - new 官方定义:new是一个分配内存的内置函数,第一个参数是类型,而不是值,返回的值是指向该类型新分配的零值的指针。 func new(Type) *Type 我们平常在使用指针的时候是需要分配内存空间的,未分配内存空间…

Java自定义注解

目录 一、什么是自定义注解 1)Java注解简介 2)Java注解分类 JDK基本注解 JDK元注解 自定义注解 如何自定义注解? 二、自定义注解 1)获取类上注解值 2)获取类属性上的注解属性值 3)获取方法上的注…

WireShark 常用协议分析

WireShark 常用协议分析 1.3 实战:使用 WireShark 对常用协议抓包并分析原理 协议分析的时候 我们 关闭混淆模式, 避免一些干扰的数据包存在。 1.3.1 常用协议分析 - ARP 协议 地址解析协议 (英语:Address Resolution Protocol&…

从内核角度看网络包发送流程

一、前置知识 1、RingBuffer结构详解 关于RingBuffer网上有很多说法,有的人说RingBuffer是系统启动时就预先申请好的一个环形数组,有的人说RingBuffer是在接收或发送数据时才动态申请的一个环形数组,那么到底RingBuffer的结构是怎么样的呢&…