ctfshow 做题 MISC入门 模块 31-40

——

misc31

题目描述: 高度是正确的,但正确的宽度是多少呢。
下载附件图片,现在是看不到内容的。

这里和 misc24 的原理一样,通过 bmp 图片像素计算图片的宽度。
还不会写脚本,直接算吧。

目前图片是 900*150=135000个像素大小。
每个像素点由3个字节(十六进制码6位)表示,每个字节负责控制一种颜色,分别为蓝(Blue)、绿(Green)、红(Red)

用 winhex 打开,看到共有 487253 个字节,文件头占 53个字节。
则正确的宽度应为 (487253-53) / 3 / 150 = 1082 (结果取整)

得到正确宽度后,用 010editor 打开,用 BMP.bt 模板修改图片宽度。

再打开图片,得到 flag 。
ctfshow{fb09dcc9005fe3feeefb73646b55efd5}

——
——

misc32

题目描述:高度是正确的,但正确的宽度是多少呢
下载附件为 png 格式的图片,要求正确的宽度。
从大佬的 wp 拿了 python 脚本,直接爆 png 图片的宽度和高度。

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

得到正确的宽度为 1044 ,转换为 16 进制为 414 。
用 010 editor 打开,把 00 00 03 84 改为 00 00 04 14
改完之后保存,打开图片,得到 flag 。
ctfshow{685082227bcf70d17d1b39a5c1195aa9}

——
——

misc33

题目描述: 出题人丧心病狂,把高度也改了
下载附件为 png 格式的图片。
还是用上面的脚本,修改crc32result == 0x5255A798
运行得到 高为 978 ,宽为142 。用 010editor 进行修改
重新打开图片,看到 flag 。
ctfshow{03070a10ec3a3282ba1e352f4e07b0a9}

——
——

misc34

题目描述: 出题人狗急跳墙,把IHDR块的CRC也改了,但我们知道正确宽度肯定大于900
又是一种新的题型,上面的题目就是根据 CRC 确定图片的宽和高,而这里 crc 也被改了,所以无法通过前面的代码确定宽和高。
这里是进行暴力破解,相当于宽度的每个数字都跑出来,看哪个是正确的。
python脚本:

import zlib
import struct
filename = "C:/Users/Goodric/Desktop/misc34.png"
with open(filename, 'rb') as f:
all_b = f.read()
#w = all_b[16:20]
#h = all_b[20:24]
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:]
f1.write(im)
f1.close()

来源:https://blog.csdn.net/weixin_45696568/article/details/115261347

这一行代码,不懂脚本的我一开始一直不知道数字 16-20 代表的是什么意思,后面发现就是文件 16 进制中宽度字节的位置,从 17 字节到 20 字节。

im = all_b[:16]+struct.pack(’>i’,i)+all_b[20:]

运行脚本之后,会看到代码文件的同级目录下会出现每个宽度的图片,然后找到正确宽度的图片,可看到 flag 。并且可以看到,正确图片宽度为 1123 。
ctfshow{03e102077e3e5de9dd9c04aba16ef014}

——
——

misc35

题目描述: 出题人负隅顽抗,但我们知道正确宽度肯定大于900
python 暴力破解代码:

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

运行后,发现每张图片还是没有 flag ,每张图片都是空白。
得知这题还结合了前面一个“flag 在图片下面”,需要先把图片高度改高,这里改成 600 足够了。
再运行代码,看到 宽度为 993-1000 时,可以看到 flag 。
ctfshow{ca35201ca9ed607e5a68f44ef573fbc3}

——
——

misc36

题目描述:出题人坦白从宽,正确的宽度在920-950之间
下载附件为 gif 格式的图片。同样是进行暴力破解。先把高度改高一点。
python 代码:

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

运行代码,看到宽度为 941 的图片显示 flag 。
直接打开无法查看,可以用 StegSolve 打开。
ctfshow{1ebf739f832906d60f57436b8179166f}

——
——

misc37

题目描述: flag在图片里
下载附件为一张 gif 动图,用 StegSolve 打开,查看每一帧的内容,
从第 9 、14、21、31、34 帧中得到 flag 。
ctfshow{2056782cd57b13261dcbbe3d6eecda17}

——
——

misc38

题目描述: flag在图片里
这个是 apng 图片,像 gif 一样会动, 可以理解为 PNG 版的 GIF 动画图片。
我这里用 Honeyview 打开可以看到动图,也可以查看每一帧的内容。
最终,在 9、17、36、40 帧中得到 flag 。
ctfshow{48b722b570c603ef58cc0b83bbf7680d}

——
——

misc39

题目描述: flag就像水,忽快忽慢地流
下载图片为一个 gif 动图,共有 287 帧图片,但是并没有 flag 的内容。
这题是 gif 帧数间隔隐写,就是动图每一帧播放的速度时间都是不一样的。
需要用到 Linux 下的工具 identify ,
Linux 下的安装命令:

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 = '37 37 36 36 36 37 37 37 37 37 36 37 36 36 37 37 36 36 37 37 36 37 37 37 36 36 37 37 37 37 36 37 36 36 36 37 37 36 37 37 37 37 37 37 37 36 37 37 37 37 37 37 37 36 37 37 36 37 37 36 37 36 37 36 37 37 36 36 37 36 36 37 37 37 36 36 36 36 37 37 36 36 36 37 36 37 37 36 36 37 36 37 37 36 36 37 37 36 37 37 36 36 37 37 36 36 37 37 37 36 36 37 36 37 37 37 36 36 37 36 37 37 36 37 36 37 37 37 36 36 37 37 36 37 37 36 36 36 37 36 36 37 37 36 37 37 37 37 37 36 36 36 37 36 37 37 36 36 37 36 37 36 37 37 36 36 37 36 36 37 37 36 37 37 36 36 37 37 37 36 36 36 37 37 36 36 37 36 36 36 37 37 37 36 36 37 36 37 37 36 37 37 36 36 37 37 36 36 37 37 37 37 36 36 36 36 37 36 37 37 37 36 36 37 37 37 36 36 37 36 37 37 37 36 36 36 37 36 37 37 36 36 36 37 37 37 37 36 36 36 36 37 36 37 37 36 36 36 36 36 37 37 36 37 36 36 36 37 37 36 37 36 37 36 37 37 37 36 36 37 37 37 37 37 37 36 37'
s = s.replace('37','1').replace('36','0').replace(' ','')# s = s[1:]print(s)print(len(s))for i in range(len(s)//7):
try:
print(chr(int(s[i*7:i*7+7],2)),end='')
except:
pass

运行得到 flag :ctfshow{52812ff995fb7be268d963a9ebca0459}

——
——

misc40

题目描述: flag就像歌,有长有短仿佛岁月悠悠
用图片浏览器打开,看到是一张动图,即 apng 图片。

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

用 python 代码脚本提取每个 txt 文件的内容。(从每个 txt 文本中的第七个字符开始取)
大佬 wp 中说从第 28 个 txt 文本开始,到最后的第 68 个,前面的为干扰数据。共 41 个文本,刚好每个文本中的数字转换为一个字符,组成 41 个字符的 flag 。

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

运行得到 flag :ctfshow{95ca0297dff0f6b1bdaca394a6fcb95b}

ctfshow 做题 MISC入门 模块 31-40相关推荐

  1. ctfshow 做题 MISC入门 模块 41-50

    ctfshow 做题 MISC入门 模块 41-50 -- misc41 题目描述: H4ppy Apr1l F001's D4y! 愚人节到了,一群笨蛋往南飞,一会儿排成S字,一会儿排成B字. 直接 ...

  2. ctfshow 做题 萌新 模块(1)

    ctfshow 做题 萌新 模块(1) -- 萌新认证 加 qq 群发"萌新码"得到萌新快乐码. -- -- 萌新_密码1 可以猜测出,显示的是一串 16 进制码. 把 16 进制 ...

  3. ctfshow 做题 萌新 模块(3)

    ctfshow 做题 萌新 模块(3) -- 萌新 隐写5 下载的附件 txt 文本是这样的. 文本中有一串不明文字: 䴀娀圀䜀䌀娀娀䤀一䈀儀圀㘀堀㌀䬀一䘀㈀嘀㘀夀吀嘀䰀㔀㐀圀㘀㌀吀䠀䰀㔀刀䐀䜀䴀匀㜀 ...

  4. ctfshow 做题 萌新 模块(2)

    ctfshow 做题 萌新 模块(2) 萌新 杂项3 就给出了一段话. 直接盲猜小五的银行卡密码. 密码可能包含生日和他的名字共6位数字. 猜了两下就得出答案.最终密码为 971015,九七年10月1 ...

  5. ctfshow学习记录-misc入门(图片篇-文件结构45-49)

    目录 misc45 misc46 misc47 misc48 misc49 misc45 提示:有时候也需要换一换思维格式 解答:常规做法没有发现信息,题目提示换个格式,之前我们做的题目里除了png, ...

  6. ctfshow 网络迷踪做题记录(1)

    ctfshow 网络迷踪做题记录(1) -- 新手上路 找桥的名字. 附件为一张海边图片. 百度识图为蜈支洲岛,得到地点名,但还需要具体桥的名字. 再用搜索引擎搜索关键字,就可以看到结果中的" ...

  7. 【剑指Offer】俯视50题之31 - 40题

    [剑指Offer]俯视50题之31 - 40题 面试题31连续子数组的最大和 面试题32从1到n整数中1出现的次数 面试题33把数组排成最小的数 面试题34丑数 面试题35第一个仅仅出现一次的字符 面 ...

  8. 攻防世界Misc入门题之掀桌子

    攻防世界Misc入门题之掀桌子 继续开启全栈梦想之逆向之旅~ 这题是攻防世界Misc入门题之掀桌子 题目是一串16进制数,因为只有0~f,不是base64,直接扔到十六进制转字符串: 好的,不知道转了 ...

  9. 攻防世界Misc入门题之坚持60s

    攻防世界Misc入门题之坚持60s 继续开启全栈梦想之逆向之旅~ 这题是攻防世界Misc入门题之坚持60s 下载附件,一开始我默认用压缩包对jar文件,搞到一解压出来还以为是某个游戏存档,后来才发现是 ...

  10. Misc做题总结(做题一时爽)

    文章目录 №.1 隐写 Stegsolve一般怎么用呢? Winhex又怎么用呢? 最后还有一个Binwalk~ №.2 流量分析 来看几道题目: №.3 NTFS交换数据流隐写 日常做题: 偶尔做题 ...

最新文章

  1. 双向滚动scrollview
  2. 查看Linux硬件信息命令的使用
  3. java mvc 断点续传_用SpringMVC 实现断点续传 (HTTP)
  4. MATLAB在通信系统仿真中的注意
  5. FreeMarker基础语法教程
  6. 如何使用PHP自动备份数据库
  7. 程序员在囧途之我是一头牛
  8. python3 csv读写_在python3中读取、更新和写入更新的CSV文件
  9. 二阶振荡环节的谐振频率_自动控制系统时域分析十三:对数频率特性
  10. html5 音乐转盘,HTML5 幸运大转盘
  11. IOS和Android测试分别有什么侧重点?
  12. 指数分布族(The Exponential Family)与广义线性回归(Generalized Linear Model GLM)
  13. AMESim 14.0 win10环境下安装教程
  14. node mysql菜鸟教程_Node.js 全局对象
  15. Jdom的安装和使用
  16. 62个大数据可视化工具
  17. svn执行Cleanup总是提示cleanup failed的解决方法
  18. VideoJS 网页直播实现双击全屏
  19. 自己动手实现fft.m函数
  20. 虚拟机概论(六)——JAVA虚拟机模型

热门文章

  1. java liveness_Kubernetes Liveness and Readiness Probes
  2. 机器学习岗位面试总结:简历应该关注的5个重点
  3. 文件管理服务器搭建教程,文件服务器搭建教程
  4. 查看计算机内存条型号,怎么查内存条型号 这几步你要了解
  5. 网站必备之简繁切换功能实现
  6. unity网络实战开发(丛林战争)-正式开发阶段(015-游戏场景及开始界面UI搭建)
  7. win7一直弹计算机,Win7电脑总是自动弹出拨号连接怎么办 Win7总是弹出拨号连接对话框的解决办法(两种)...
  8. 阿里巴巴罗汉堂聚6位诺贝尔奖得主研究社会问题丨科技在哪里强大,哪里便有更大的责任...
  9. 移动终端开发工程师工作流程的总结
  10. Ubuntu设置开机启动项目