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下对修改后的图片,右键点击编辑,然后再保存就可以了。
  • 相关阅读:
    Oracle Autonomous Health Framework(AHF)
    Autonomous Health Framework(AHF)相关操作
    Postgresql 正则表达式
    如何去官网下载JDK (JDK8 JDK1.8)
    配置免安装版Oracle客户端
    子用户角色权限菜单 浅谈:子账户设计方案
    EF Power Tools Beta 2 生成 Entity Framework Code First 提示 参数错误 hresult e_invalidarg
    mvc 截取上传图片做头像,自动生成不同小尺寸缩略图
    亚马逊的下拉菜单插件 jQueryMenuAim 使用
    apacheab并发负载压力测试
  • 原文地址:https://www.cnblogs.com/cxjchen/p/12611792.html
Copyright © 2011-2022 走看看