BUUCTF 梅花香之苦寒来 1

news/2024/5/19 21:05:20 标签: 安全, CTF, 笔记, 网络安全, BUUCTF, Misc

BUUCTF:https://buuoj.cn/challenges
在这里插入图片描述

题目描述:
注意:得到的 flag 请包上 flag{} 提交

密文:
下载附件,解压得到一张.jpg图片。
在这里插入图片描述


解题思路:
1、用010 Editor看了一下,刚开始以为是修改宽高的题,没有想到这个方向。(想到也不会做)
在010 Editor中看到,在图片数据的后面附加了很多的无关数据。(“FF D9”为jpg文件结尾)

在这里插入图片描述

2、将这些数据转换一下,看看是什么文件的数据。将全部的灰色数据复制下来,新建一个txt文本,粘贴进去保存。

在这里插入图片描述

在010 Editor中,使用“文件”选项卡的“导入16进制文件”选项,导入刚才新建的txt文件。

在这里插入图片描述

得到一堆坐标数据,接下来尝试将数据转换为图像。

在这里插入图片描述

(这一步其实就是将16进制的数据转换为ASCII字符,使用任意转换工具都可以,这里提供一个python脚本)

在这里插入图片描述

with open('hex.txt', 'r') as h:     # hex.txt为要转换的文本文件
    val = h.read()
    h.close()

with open('result.txt', 'w') as re: # 转换完成后写入result.txt
    tem = ''
    for i in range(0, len(val), 2):
        tem = '0x' + val[i] + val[i+1]
        tem = int(tem, base=16)
        print(chr(tem), end="")
        re.write(chr(tem))
    re.close()

3、使用gnuplot来进行绘制图像(gnuplot下载地址,提取码:wel5),安装好gnuplot之后,需要去环境变量(查看高级系统设置)里添加变量,然后就可以在命令行里运行gnuplot了。

在这里插入图片描述

4、使用gnuplot之前需要先将坐标数据格式转换成gnuplot可以识别的格式,下面是Python脚本:

with open('result.txt', 'r') as res:  # 坐标格式文件比如(7,7)
    re = res.read()
    res.close()

with open('gnuplotTxt.txt', 'w') as gnup:  # 将转换后的坐标写入gnuplotTxt.txt
    re = re.split()
    tem = ''
    for i in range(0, len(re)):
        tem = re[i]
        tem = tem.lstrip('(')
        tem = tem.rstrip(')')
        for j in range(0, len(tem)):
            if tem[j] == ',':
                tem = tem[:j] + ' ' + tem[j + 1:]
        gnup.write(tem + '\n')
    gnup.close()

转换之后是这样的数据格式。

在这里插入图片描述

5、将gnuplotTxt.txt放到gnuplot.exe的文件夹下,启动gnuplot,在命令行使用如下命令即可绘图。

plot "gnuplotTxt.txt"

在这里插入图片描述

得到一张二维码图片,扫描二维码得到flag。

在这里插入图片描述

在这里插入图片描述

(原来一开始图片属性就有提示)

在这里插入图片描述

flag:

flag{40fc0a979f759c8892f4dc045e28b820}

http://www.niftyadmin.cn/n/5205404.html

相关文章

No matching variant of com.android.tools.build:gradle:7.4.2 was found.

一、报错信息 创建个新项目,运行直接报错,信息如下: No matching variant of com.android.tools.build:gradle:7.4.2 was found. The consumer was configured to find a runtime of a library compatible with Java 8, packaged as a jar,…

matlab绘图函数plot和fplot的区别

一、背景 有的函数用plot画就会报错,显示数据必须为可转换为双精度值的数值、日期时间、持续时间、分类或数组。 如下图所示: 但用fplot函数就没有问题,因此这里记录一下两者的区别,如果使用不当,画出的图可能就是下…

Linux使用操作

各类小技巧 ctrlc强制停止 ctrld退出账户的登录 或者退出某些特定程序的专属页面 history 查看历史命令 !命令前缀,自动执行上一次匹配前缀的命令 ctrlr 输入内容去匹配历史命令 光标移动快捷键 ctrla,跳到命令开头 ctrle,跳到命令结尾…

MySQL面试,MySQL事务,MySQL锁,MySQL集群,主从,MySQL分区,分表,InnoDB

文章目录 数据库-MySQLMySQL主从、集群模式简单介绍1、主从模式 Replication2、集群模式3、主从模式部署注意事项 UNION 和 UNION ALL 区别分库分表1.垂直拆分2、水平拆分 MySQL有哪些数据类型1、整数类型**,2、实数类型**,3、字符串类型**,4…

基于SSM的旅游管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

ChatGPT/GPT4丨编程助手;AI画图;数据分析;科研/项目实现;提示词工程技巧;论文写作等

ChatGPT 在论文写作与编程方面也具备强大的能力。无论是进行代码生成、错误调试还是解决编程难题,ChatGPT都能为您提供实用且高质量的建议和指导,提高编程效率和准确性。此外,ChatGPT是一位出色的合作伙伴,可以为您提供论文写作的…

2:kotlin集合(Collections)

集合有助于数据分组,方便后续操作 集合类型说明Lists有序的可重复的集合Sets无序的不可重复的集合Maps键值对映射集合,键唯一,且一个键只能映射到一个值 每个集合类型都可以是可变的或者只读的 List List按照添加的顺序存储内容&#xff…

【libGDX】使用Mesh绘制圆形

1 前言 使用Mesh绘制三角形 中介绍了绘制三角形的方法,使用Mesh绘制矩形 中介绍了绘制矩形的方法,本文将介绍绘制圆形的方法。 libGDX 以点、线段、三角形为图元,没有提供绘制圆形的接口。要绘制圆形边框,必须通过割圆法逼近圆形&…