查看: 186|回复: 1

[Misc] 2019年8月打卡_隐写_真正的ctfer在哪

[复制链接]
发表于 2019-9-6 13:21:54 | 显示全部楼层 |阅读模式
下载解压题目文件,发现一张图片
245295d71ec426310d.png
用binwalk分析一下,并没有隐藏文件
911915d71ec4fb9076.png
查看图片详细信息,没有隐藏东西。然后看了下图片宽高(分辨率),并用winHex打开发现,高度不一致
557875d71ec5b61c40.png
711325d71ec66764fa.png
将分辨率转换成16进制,0500应该改为0A00。高度恢复了
296305d71ec76e3c8e.png
发现flag了
337425d71eca011cd9.png
发现看不清,也可以看出。想用stegsove反色看一下,然而用stegsolve打不开修改高度后的图片。

于是百度了下原因

对一张正常的图片,通过修改其宽度或者高度隐藏信息,使计算出的CRC校验码与原图的CRC校验码不一致;windows的图片查看器会忽略错误的CRC校验码,因此会显示图片,但此时的图片已经是修改过的,所以会有显示不全或扭曲等情况,借此可以隐藏信息。

而Linux下的图片查看器不会忽略错误的CRC校验码,因此用Linux打开修改过宽或高的png图片时,会出现打不开的情况
795455d71ecaf2ca34.png

箭头所指即为crc效验码。

可以通过爆破图片修改前的宽和高来匹配CRC校验码,并用正确的宽和高来修复图片

为了做题的方便,先尝试爆破高度,脚本如下(百度搜的,还不会写,只修改了参数):

  1. # -*- coding: utf-8 -*-
  2. import binascii
  3. import struct
  4. #\x49\x48\x44\x52\x00\x00\x01\xF4\x00\x00\x01\xA4\x08\x06\x00\x00\x00
  5. crc32key = 0x6F03AD71
  6. for i in range(0, 65535):
  7.   height = struct.pack('>i', i)
  8.   #CRC: 6F03AD71
  9.   data = '\x49\x48\x44\x52\x00\x00\x05\x1C' + height + '\x08\x06\x00\x00\x00'
  10.   crc32result = binascii.crc32(data) & 0xffffffff
  11.   if crc32result == crc32key:
  12.     print ''.join(map(lambda c: "%02X" % ord(c), height))
复制代码

运行脚本,输出000009E4,即原图片高度为00 00 09 E4爆破成功

262805d71ecdb4d7c9.png

修改后,发现可以用stegsolve打开了

644765d71ece9f2b77.png



温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
善莫大焉-2019

0

主题

6

帖子

0

精华

禁止发言

Rank: 2Rank: 2

学币
2
荣耀
0
rank
0
违规
0

    发表于 2019-10-9 19:30:37 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    关闭

    论坛公告上一条 /2 下一条

    快速回复 返回顶部 返回列表