[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
#\x49\x48\x44\x52\x00\x00\x05\x1C\x00\x00\x05\x00\x08\x06\x00\x00\x00
#其中\x00\x00\x05\x1C表示寬度,\x00\x00\x05\x00表示高度

crc32key = 0x6F03AD71#IHDR段中CRC值
for i in range(0, 65535):
	height = struct.pack('>i', i)#將整數轉化成16進制
	#compute height
	data = '\x49\x48\x44\x52\x00\x00\x05\x1c'+height+'\x08\x06\x00\x00\x00'
	#compute width
	#data = '\x49\x48\x44\x52'+height+'\x00\x00\x09\xe4\x08\x06\x00\x00\x00'

	crc32result = binascii.crc32(data) & 0xffffffff

	if crc32result == crc32key:
		print ''.join(map(lambda c: "%02X" % ord(c), height))
  • 第二個方法更簡單,在windows下對修改后的圖片,右鍵點擊編輯,然后再保存就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM