**
一.在處理圖片隱寫題的時候,可能會修改圖片原有的寬高,導致圖片里面的內容無法正常顯示,那么怎么判斷它的寬高是否被修改了呢?
**
1.把圖片拖進010editor中會發現左下角提示CRC不匹配,這是因為修改了高寬,卻沒有修改CRC,導致讀取報錯,

2.在linux中CRC32錯誤的圖片是無法打開的,也可以利用pngcheck檢查圖片,會提示CRC32校驗錯誤

**
二.既然知道了CRC校驗碼錯誤,那么如何修改呢? 首先我們要知道CRC32是有哪些位元組構成的
**
PNG檔案中總是以固定的八個位元組開頭
89 50 4E 47 0D 0A 1A 0A
資料塊長度13
00 00 00 0D
檔案頭資料塊標示IDCH
49 48 44 52
13位資料塊(IHDR)
下面為寬和高
00 00 07 7E 00 00 03 60
這5個位元組依次為Bit depth,ColorType,Compression method,Filter method,Interlace method
08 06 00 00 00
接下來的四位元組為該png圖片的CRC校驗碼
7D C7 3F 7F
CRC校驗碼,由IDCH和IHDR共十七位位元組進行crc計算得到

解決方法:
1.簡單點的隱寫題,可以直接修改寬高,然后顯示flag
2.那么如果修改寬高,并不會直接看到flag,需要放入stegsolve里或者做其它的進一步處理時,
這里會產生一個問題,那就是修改過寬高的圖片stegsolve無法打開,提示IO錯誤,
這是因為png影像的IHDR段中的高寬被修改,導致計算出來的CRC不正確,所以無法正確讀取,
通過python2腳本來獲取圖片高度
# -*- coding: utf-8 -*-
import binascii
import struct
crc32key = 0x7DC73F7F
for i in range(0, 65535):
height = struct.pack('>i', i)
#CRC: 7DC73F7F
data = '\x49\x48\x44\x52\x00\x00\x07\x7E' + height + '\x08\x06\x00\x00\x00'
crc32result = binascii.crc32(data) & 0xffffffff
if crc32result == crc32key:
print ''.join(map(lambda c: "%02X" % ord(c), height))
運行:得到圖片實際高度為0000043C,在010editor中修改保存

修改寬度同理,只需將引數進行簡單替換
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/212840.html
標籤:其他
