目录

  • misc34
  • misc35
  • misc36
  • misc37
  • misc38
  • misc39
  • misc40
  • misc42
  • misc43
  • misc44

misc34

提示:出题人狗急跳墙,把IHDR块的CRC也改了,但我们知道正确宽度肯定大于900
解答:可以写脚本,修改宽度,每修改一个就保存一个,然后肉眼扫描找到flag。

import os
import binascii
import struct
bp = open("misc34.png", "rb").read()
for i in range(901,1500):png_name='test/misc34/'+str(i)+'.png'#我是建立一个文件夹,可以不写前面的文件夹路径。png=open(png_name,"wb")data=bp[:16] + struct.pack('>i', i)+bp[20:24]+bp[24:]#这里可以直接写成bp[:16] + struct.pack('>i', i)+bp[20:],我是把高度单独写出来了。png.write(data)png.close()

可以看到1123宽度的为flag图片。


ctfshow{03e102077e3e5de9dd9c04aba16ef014}


misc35

提示:出题人负隅顽抗,但我们知道正确宽度肯定大于900
解答:jpg格式。
利用和上题类似的脚本(需要调整成适合jpg格式的数据),爆破出来的结果没有flag。之前的题大多是在高度上有调整,调整一下高度,确实有被裁减的部分,大概到600左右,可以看到模糊的flag项出来了,同时图片边界也显现出来。

对调整高度后的图片再利用脚本爆破。

import os
import binascii
import struct
bp = open("misc35.jpg", "rb").read()
for i in range(901,1500):#根据题目给的图片格式修改后缀image_name='test/misc35/'+str(i)+'.jpg'image=open(image_name,"wb")#png #data=bp[:16] + struct.pack('>i', i)+bp[20:24]+bp[24:]#png#jpgdata=bp[:157]+bp[157:159] + struct.pack('>h', i)+bp[161:]  #jpgimage.write(data)image.close()

993宽度开始,有一部分就出现了正确的flag。


ctfshow{ca35201ca9ed607e5a68f44ef573fbc3}


misc36

提示:出题人坦白从宽,正确的宽度在920-950之间
解答:gif格式,给了一定的宽度范围。同样先调整一个高度,这次调整到300即可。

import os
import binascii
import struct
bp = open("misc36.gif", "rb").read()
#for i in range(901,1500):
for i in range(920,951):#根据题目给的图片格式修改后缀image_name='test/misc36/'+str(i)+'.jpg'image=open(image_name,"wb")#png #data=bp[:16] + struct.pack('>i', i)+bp[20:24]+bp[24:]#png#jpg#data=bp[:157]+bp[157:159] + struct.pack('>h', i)+bp[161:]  #jpg#gifdata=bp[:38]+ struct.pack('>h', i)[::-1]+bp[40:42] +bp[42:]#gifimage.write(data)image.close()

宽度941出现flag。

ctfshow{1ebf739f832906d60f57436b8179166f}


misc37

提示:flag在图片里
解答:gif图片,用gif分离器分离一下。
第8、13、20、30、33个图都有部分flag,需要一个一个提取。
ctfshow{2056782cd57b13261dcbbe3d6eecda17}


misc38

提示:flag在图片里
解答:png图片。apng,类似gif一样的动图,用honeyview打开。

9、17、36、40有部分flag,逐一提取。
ctfshow{48b722b570c603ef58cc0b83bbf7680d}


misc39

提示:flag就像水,忽快忽慢地流
解答
没有遇到过的题型,看了一下wp,是需要取帧,利用不同帧之间的间隔时间来隐写的。
按照这个逻辑再去看题目,忽快忽慢体现就是一个时间,再结合给的gif动图,可以推测是利用不同帧之间的间隔时间来隐写。

用命令identify,可以在ubuntu或kali使用该命令。

安装:
sudo apt-get install imagemagick
提取:
identify -format "%T " misc39.gif > 1.txt-format "string"    #输出图像指定特性


内容全部都是36和37,只有两个数据,可能是二进制,那么替换一下,36转0,37转1。

#二进制替换&二进制to char
from os import replace
f="""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"""
f=f.replace("36","0").replace("37","1")
a=f.split(' ')
flag=''
num=7
zu=len(a)//numfor i in range(zu):b=a[i*num:i*num+num]c=int("".join(str(j) for j in b),2)print(c,end=",")flag+=chr(c)
print(flag)
#{52812ff995fb7be268d963a9ebca0459}

misc40

提示:flag就像歌,有长有短仿佛岁月悠悠
解答:都有gif分离器了,怎么能没有apng分离器。
APNG Disassembler

处理完后,每一帧图片都会带有一个 txt 文件。

分离出来的图片没有任何flag信息。那么可能就是txt文件中的信息,比如1中229,在后面的信息中极有可能存在flag,提取一下。

flag=""
for i in range(1,69): if(i<10):f = open('D:/Downloads/misc40/apngframe0'+str(i)+'.txt')else:f = open('D:/Downloads/misc40/apngframe'+str(i)+'.txt')s = f.read()flag += chr(int(s.split("/")[0][6:]))
print(flag)
#前面一堆乱码迷惑数据,后面是flag:ctfshow{95ca0297dff0f6b1bdaca394a6fcb95b}

misc42

提示:flag有多长?2cm……不好意思打错了,41位
解答:用tweakpng打开,可以看到idat的长度是flag。

ascii转一下chr。

a="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"
c=a.split(',')
flag=""
for i in range(0,len(c)):flag+=chr(int(c[i]))print(flag)
print(flag)
#ctfshow{078cbd0f9c8d3f2158e70529f8913c65}

misc43

提示:错误中隐藏着通往正确答案的道路
解答:png图片,用tweakpng打开,出现很多CRC错误的报错。

根据提示我们需要提取错误的CRC
工具一
PCRT:一款自动化检测修复PNG损坏的取证工具。但是这个工具是python2,没有python3的。

#安装:
git clone https://github.com/sherlly/PCRT.gitpython PCRT.py -y -v -i misc43.png > 43.txt


提取错误crc,转成str。

ctfshow{6eb2589ffff5e390fe6b87504dbc0892}

工具二
PNG Debugger:可读取 PNG 图片的数据,检测每个数据块中的 CRC 是否正确。
下载地址

下载后,建一个cmd的快捷方式,属性的起始位置设置为PNGDebugger.exe存放的路径。

点击该快捷方式,执行指令。不重定向的话,结果会直接出现在终端。

为了方便查看,这里我输出到txt中。

PNGDebugger png图片路径 >输出位置(pngdebugger小写也可以)

然后之后就和上面一样了。


misc44

提示:错误中还隐藏着坑
解答:这里使用方法二。

错误数据较多,且如misc43转换后并未有任何flag信息。那么再看一下信息,正确的和错误的都很多,那么是否涉及二进制01转换。测试一下。

先对txt文件删减一下,只保留其中的IDAT部分。开头删一下,结尾删一下。

然后脚本跑一下,获取flag。

f=open("D:/Downloads/misc44/44.txt","r").read()
flag=""
for i in f.split():if "OK!" == i:flag += "1"elif "FAILED" ==i:flag += "0"
print(flag)
for i in range(len(flag)//8):print(chr(int(flag[8*i:8*(i+1)],2)),end="")
#ctfshow{cc1af32bf96308fc1263231be783f69e}

ctfshow学习记录-misc入门(图片篇-文件结构34-4042-44)相关推荐

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

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

  2. ctfshow学习记录-web入门(命令执行69-77118)

    目录 web69-70 web71 web72 web73-74 web75-76 web77 web118 这一组题肝的很辛苦 web69-70 解答:根据反馈的错误可知highlight_file ...

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

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

  4. CTF学习之MISC之图片隐写与文档隐写

    CTF学习之MISC之图片隐写 隐写术概述 图片隐写技术 图片EXIF信息隐写 图片LSB低位隐写 隐写术(Stega) 隐写术(Steganography,简写Stega) 一门关于信息隐藏的技巧与 ...

  5. PaddlePaddle深度学习7日入门CV篇Summaries

    PaddlePaddle深度学习7日入门CV篇|Summaries 文章目录 PaddlePaddle深度学习7日入门CV篇|Summaries 一.什么是PaddleX? 二.为什么要参加训练营 三 ...

  6. MongoDB学习记录:入门(一)——五叶草

    预热看我之前的文章Node学习记录: mongodb 这个系列旨在系统的学习Mongodb 部分图片来自慕课网mongodb入门截图 学习目标 MongoDB官网:https://www.mongod ...

  7. 《迅为开发板i.MX8MM 学习记录》——【MIPI篇】Linux 应用程序显示一张图片

    文章目录 前言 一.准备工作 1.开发环境 2.文件准备 二.伪代码分析 1.读取图片数据到数组 2.打开DRM设备,创建fb 3.填充framebuffer 三.完整代码 1.app.h 2.app ...

  8. Java网络爬虫学习记录(请求基础篇)

    目录 个人实验遇见错误集: 一.javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX ...

  9. 学习记录635@python图片人脸识别算法

    概述 对图片进行训练,达到人脸识别的目的. 其实就是对图片建立分类的算法,输入图片得到标签,这个标签就是名字. 其实核心是将图片数字化,其次才是建立KNN算法. 图片数字化首先将图片进行灰度处理,在进 ...

  10. 【Python学习记录——从入门到放弃】八、类(下)

    给子类定义属性和方法 class Car():def __init__(self, make, model, year,odometer_reading=0):self.make = makeself ...

最新文章

  1. 详解微信域名防封的方法以及检测等工具的技术原理
  2. mciSendString 的两个小坑
  3. .net学习之委托和事件
  4. apache mysql php实现最大负载的方法_如何架设高性能nginx+php+mysql搭配的服务器,解决高并发问题...
  5. 解决libuuid.so.1 no version information available问题
  6. 弄懂CNN,然后提升准确率4.21-4.27
  7. C++实现array left rotation数组左旋转(附完整源码)
  8. Leetcode 1109.航班预定统计 差分
  9. [css] 用css给一个元素加边框有哪些方法?
  10. VUE2第五天学习---自定义指令
  11. HTTP--历史、组件系统
  12. 关闭 php opcache
  13. mac磨皮插件_Adobe Pr 黑科技插件合集,一键安装,Mac+Win
  14. js放到head中失效的原因与解决方法
  15. plsql变量参数化_谁说建模一定要会画图?参数化设计让你事半功倍!
  16. joson返回数据库的时间格式在前台用js转换
  17. [Go实战]goFrame框架初次使用
  18. 【JAVASCRIPT】使用ztree树,实现右键增加,修改,删除节点。带有复选框。
  19. 在群晖(Synology) 中运行115网盘Linux版(docker)
  20. 关于网络直播营销活动监管中的《广告法》

热门文章

  1. 十载寒冰,难凉热血——2020CSDN年度博客之星Top10心路历程
  2. 20 个有用的 Go 语言微服务开发框架吐血总结!!!
  3. java毕业设计成品SpringBoot+VUE实现的电影院会员积分管理系统
  4. 【18年北京网络赛】Tomb Raider【递归求所有子序列】
  5. 会议室管理前端页面_多媒体会议室,会议系统,指挥控制中心,调度中心方案设计方案...
  6. ROC曲线、AUC、Gini系数和KS值
  7. 群面时被问到“让你淘汰一个组员”一般如何淘汰谁?
  8. 智慧时代正向我们走来(一)
  9. padding属性的用法和作用
  10. SRAM and DRAM