前言

今天我们想来介绍一下关于图片隐写相关处理,以及修复被修改尺寸的PNG图片。

关于PNG图片的相关处理,是CTF Misc图片隐写术中极为基础的一项操作,笔者这里是想要提一些做题过程中发现的小技巧。

CTF图片处理基本套路

各种图片类型

比较常见有PNG图片,JPG图片,GIF图片。

其中GIF图片通常涉及逐帧分离,后续操作等等。JPG、PNG图片通常修改图片尺寸,图片隐写术等等。后续我们要重点提的就是修复被修改尺寸的PNG图片。

检查详细信息

很多时候重要信息就隐藏在图片的详细信息内,有可能是后续解题步骤所需信息或者Hint,例如可能是后续隐写压缩文件的解压密码等等,所以睁大眼睛仔细看哦。

十六进制编辑器处理

万物皆文件,都可以用十六进制编辑器打开,这里笔者常用的十六进制编辑器是“010 Editor”,当然其他十六进制编辑器例如“WinHex”也是可以的。十六进制编辑器打开后仔细检查,可以ASCII搜索“flag”、“key”或者其他题目提示信息。

kali分析文件

kali中file命令、binwalk命令都可以用来分析文件

其中如下命令可以用来分离隐写文件

binwalk -e filename

foremost命令也可以用来分离隐写文件,有些binwalk无法分离的可以使用foremost命令尝试。

foremost filename

//反正笔者一般是binwalk分析文件,有隐写就直接用foremost分离文件。

如下图就分离出来隐写的两张图片和一个zip压缩包

当然其他还有zsteg工具、stegdetect工具、dd命令、手动分离等等。

神器 Stegsolve

stegsolve真可谓神器,可以用来帧查看,切换颜色通道,处理LSB隐写等等。

File Format:文件格式

Data Extract:数据提取(常用来处理LSB隐写)

Steregram Solve:立体试图 可以左右控制偏移

Frame Browser:帧浏览器

Image Combiner:图像合并(如果题目给出多张图片,可以将两张图片进行XOR、OR、AND等操作,有时候两张图片异或运算后神奇地出现了一个二维码!)

这里给出一个stegsolve modifed version Github链接

https://github.com/Giotino/stegsolve

//原版一般主流工具包中都有 网络上也比较容易找到

脑洞大开

CTF就是这样,50%的实力和50%的灵感,许多时候灵感是非常重要的。

修复被修改尺寸的PNG图片

再次放上blog的头图

PNG文件结构



参考:https://www.cnblogs.com/lidabo/p/3701197.html

CRC循环冗余检测比较常用,笔者在计算机网络中就有学到。

这里我们重点提一下文件头之后的数据块

就是说一张PNG图片第17个字节起的8个字节就表示了图片的宽度高度信息。

那么我们有什么方法可以判断一张PNG图片的尺寸被修改了呢?

//笔者在写blog的时候发现被修改尺寸的PNG图片在Typora中无法预览出图片,而是以markdown链接的形式,这算是个新发现吧。

Irfanview

IrfanView是适用于Windows XP,Vista,7、8和10的快速,紧凑和创新的FREEWARE(非商业用途)图形查看器。

这是笔者的默认图片查看器,主要是因为启动快,软件体积小,支持保存格式多等等。笔者也是在做题过程中发现,如果PNG图片被修改,用Irfanview打开时会有报错提示。

//win10的照片(系统自带的照片查看器)打开被修改尺寸的图片是不会有报错提示的。

TweakPNG

TweakPNG是用于检查和修改PNG图像文件的低级实用程序。它支持Windows XP及更高版本。为了充分利用它,您至少必须对PNG文件的内部格式有所了解。有关PNG的信息,请参见 PNG主页

或者可访问该地址下载软件:http://entropymine.com/jason/tweakpng/

当使用TweakPNg打开被修改尺寸或者是其他信息的PNG图片时,会有提示。

提示CRC错误。

这里有两种可能

1)图片CRC被修改

可以尝试用十六进制编辑器打开图片,修改CRC。

2)图片尺寸被修改

这时候就要用十六进制编辑器修改图片尺寸了。

Python脚本计算正确的尺寸

import os
import binascii
import struct crcbp = open("xxx.png", "rb").read() #打开图片
for i in range(2000):
for j in range(2000):
data = crcbp[12:16] + \
struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29]
crc32 = binascii.crc32(data) & 0xffffffff
if(crc32 == 0x38162a34): #图片当前CRC
print(i, j)
print('hex:', hex(i), hex(j))

这里的脚本是在一个非常火的CTF培训课程中了解到的

//原脚本长宽限制0~1023 笔者这里将其修改为2000防止图片尺寸过大没有遍历到

链接:https://www.bilibili.com/video/BV1Kt411j7r7

使用时修改脚本中的打开图片名称和图片当前CRC

然后在图片所在目录运行Python脚本

(或者填上要计算的图片的绝对路径,运行Python脚本)

我们这里修改后的脚本如下

然后运行脚本可得正确尺寸

然后我们再用十六进制编辑器复原图片尺寸

当当当!就复原PNG图片啦!

顺便也验证了笔者之前的猜想,PNG图片修改为原尺寸后Irfanview打开就不会报错。

233图是笔者自己P的 顺便安利《德鲁纳酒店》、《我的大叔》真的好看!!(跑题了...)

碎碎念

当然这只是图片隐写术中很小的一个知识点,但是或许可以拿去逗逗同学(?)

实战中一般笔者Irfanview打开如果有报错提示(表明PNG图片尺寸被修改),一般随缘修改下尺寸就行了,一般不会用Python脚本去爆破原始尺寸,解题速度要紧。

转载请注明出处

本文作者:双份浓缩馥芮白

原文链接:https://www.cnblogs.com/Flat-White/p/13515090.html

版权所有,如需转载请注明出处。

【CTF】图片隐写术 · 修复被修改尺寸的PNG图片的更多相关文章

  1. Python 图片格式的转换和尺寸修改

    import cv2 import os import numpy as np from PIL import Image import shutil import sys image_size=14 ...

  2. javascript图片隐写术,感觉可以用它来干点有想法的事情

    1.什么是图片隐写术? 权威的wiki说法是“隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容.”,图片隐写术简而言之就是利用图片 ...

  3. Javascript实现的图片隐写术

    javascript图片隐写术,感觉可以用它来干点有想法的事情   1.什么是图片隐写术? 权威的wiki说法是“隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人 ...

  4. 【PS】证件照修改尺寸

    证件照同时修改尺寸.分辨率.像素 2019-07-14  12:56:25  by冲冲 1. 需求 实现证件照自由切换一寸.小一寸.大一寸.二寸. 2. 步骤 ① 裁剪工具 -- 原始比例 -- 存储 ...

  5. PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转

    [强烈推荐]下载地址(github.com/masterexploder/PHPThumb). 注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意. 在网站建设过 ...

  6. 电脑文件出现“windows-文件发生意外问题-可修复(严禁修改)-错误代码0X00000BF8”错误,怎么办

    电脑文件出现"windows-文件发生意外问题-可修复(严禁修改)-错误代码0X00000BF8"错误,怎么办 下载一个"纵情文件修复器"修复一下就可以了 下载 ...

  7. 使用百度UMeditor富文本编辑器,修改自定义图片上传,修改源码

    富文本编辑器,不多说了,这个大家应该都用到过,至于用到的什么版本,那就分很多种 CKEditor:很早以前叫FCK,那个时候也用过,现在改名了,比较流行的一个插件,国外很多公司在用 UEDITOR:百 ...

  8. 在代码中修改TextView的DrawableRight图片

    TextView的xml <TextView android:id="@+id/textciew1" android:layout_width="match_par ...

  9. 设置批量商品优惠、如何修改ZenCart产品显示图片的大小

    利用下面的方法,可以实现: 买一送一.买一件第二件5折.买三件优惠10%等功能. 管理页面 - 商品管理 - 价格管理 - (选择商品) - 编辑 - 添加空白折扣. 应用上面的办法,能够完成:买一送 ...

随机推荐

  1. redis和mysql结合数据一致性方案

    缓存读: 缓存由于高并发高性能,已经被广泛的应用.在读取缓存方面做法一致.流程如下: 写缓存: 1.先更新数据库,再更新缓存 2.先更新数据库,再删除缓存. (1).先更新数据库,再更新缓存 这套方案 ...

  2. django学习-4.url动态传值

    1.前言 我们在浏览器访问一个网页A是通过一个指定的url地址去访问的.但在浏览器用一个不存在的url地址去执行访问是打不开正确的网页的,只会打开一个浏览器自带的有错误提示的网页. 在django框架 ...

  3. 小白养成记——MySQL中的排名函数

    1.ROW_NUMBER() 函数 依次排序,没有并列名次.如 SELECT st.ID '学号', st.`NAME` '姓名', sc.SCORE '成绩', ROW_NUMBER() OVER( ...

  4. Java基础语法:final修饰符

    一.final类 描述: 用'final'修饰的类不能被继承,没有子类. 例如,我们是无法写一个类去继承String类,然后对String类型扩展的,因为API中已经将String类定义为'final ...

  5. 基于Hi3559AV100 RFCN实现细节解析-(1)VGS初介绍

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,因为RFCN用到了VGS加框,因此本篇随笔将给出VGS视频图像子系统的具体说明,便于后面RFCN的细节实现说明. VGS 是视频图形子 ...

  6. 人脸检测数据源制作与基于caffe构架的ALEXNET神经网络训练

    本篇文章主要记录的是人脸检测数据源制作与ALEXNET网络训练实现检测到人脸(基于caffe). 1.数据获取 数据获取: ① benchmark是一个行业的基准(数据库.论文.源码.结果),例如WI ...

  7. 干货满满-原来这才是hooks-React Hooks使用心得

    序言 ---最后有招聘信息哦-React是一个库,它不是一个框架.用于构建用户界面的Javascript库.这里大家需要认识这一点.react的核心在于它仅仅是考虑了如何将dom节点更快更好更合适的渲 ...

  8. .Net Core 处理跨域问题Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource

    网页请求报错: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Or ...

  9. windows10 缺失 msvcp140.dll 解决办法

    1.问题描述 我更新完windows10 驱动后,出现计算机缺失msvcp140.dll文件,虚机和QQ都无法启动 2.解决办法 查找大量文章,最终发现通过重新安装 Visual Studio 201 ...

  10. 60秒定位问题,十倍程序员的Debug日常

    作者:陶建辉 这是我在 2020 年 5 月写的一篇内部博客,当时是希望研发和技术支持同学能够帮助用户快速定位 Bug,解决问题.2020 年 12 月我又迭代了一版,并还针对此进行了内部的培训.这段 ...