zoukankan      html  css  js  c++  java
  • [CTF-MISC][图片隐写]如何判断图片被修改了宽高

    图片修改宽高判断

    图片隐写题中修改图片的宽高是非常常用手段之一,如何快速判断图片修改了宽高呢?

    1. 使用windows查看图片属性,会发现属性里的高度和16进制软件(010Editor、winhex、hxd)里提供的高宽数据不一样,这时候就可以怀疑宽高被修改了。
      注:有的时候是一致的,所以一致不代表没被修改

    2. 图片放入010Editor,自动载入自带的Template,左下角会提示CRC不匹配,这是因为修改了高宽,却没有修改CRC,导致读取报错。
      看到这样的提示,说明图片高宽很可能被修改过。

    3. pngcheck、tweakpng检查图片会发现,都会提示CRC校验错误。

    4. 修改高或者宽,再查看图片会发现图片变乱了,无法正常显示,这说明这个高或者宽不能修改了,如果能正常显示,说明宽高被修改了,只管往大了修。


    常见题型的处理

    1. 修改宽高,直接就可以看到flag,这里不需要做其他工作。
    2. 修改宽高,并不会直接看到flag,需要放入stegsolve里或者做其它的进一步处理。
      这里会产生一个问题,那就是修改过宽高的图片stegsolve无法打开,提示IO错误。
      这是因为png图像的IHDR段中的高宽被修改,导致计算出来的CRC不正确,所以无法正确读取。
      这里有两种办法进行处理:
    #!/usr/bin/env python
    # encoding: utf-8
    
    # -*- coding: utf-8 -*-
    import binascii
    import struct
    
    #这段数据就是png图中IHDR段的16进制数据,不包括开始的length和最后CRC
    #x49x48x44x52x00x00x05x1Cx00x00x05x00x08x06x00x00x00
    #其中x00x00x05x1C表示宽度,x00x00x05x00表示高度
    
    crc32key = 0x6F03AD71#IHDR段中CRC值
    for i in range(0, 65535):
    	height = struct.pack('>i', i)#将整数转化成16进制
    	#compute height
    	data = 'x49x48x44x52x00x00x05x1c'+height+'x08x06x00x00x00'
    	#compute width
    	#data = 'x49x48x44x52'+height+'x00x00x09xe4x08x06x00x00x00'
    
    	crc32result = binascii.crc32(data) & 0xffffffff
    
    	if crc32result == crc32key:
    		print ''.join(map(lambda c: "%02X" % ord(c), height))
    
    • 第二个方法更简单,在windows下对修改后的图片,右键点击编辑,然后再保存就可以了。
  • 相关阅读:
    Java这样学,Offer随便拿,学习方法和面试经验分享
    LeetCode All in One 题目讲解汇总(持续更新中...)
    nodejs连接sqlserver
    配置-XX:+HeapDumpOnOutOfMemoryError 对于OOM错误自动输出dump文件
    list.ensureCapacity竟然会变慢
    java List.add操作可以指定位置
    java MAT 分析
    java STW stop the world 哈哈就是卡住了
    python中的is判断引用的对象是否一致,==判断值是否相等
    卡尔曼滤波(Kalman Filter)
  • 原文地址:https://www.cnblogs.com/cxjchen/p/12611792.html
Copyright © 2011-2022 走看看