我們在分析電腦的圖片格式最直覺就是看一下這個檔案是否可以被圖片軟體打開,然後再來就是看副檔名是什麼.
例如某張圖片拿到的時候是test.jpg,在偵測的時候會是偵測成.bmp格式,但如何證明這張圖片是真的.bmp呢?
如果用win系統去看,可以任意把同一張圖片改成不同格式
由於是通用格式,所以兩者都可以用圖片軟體打開.
但假設我要寫個程式去判斷上傳的檔案格式,如果只是判斷副檔名,很容易就被蒙騙過去,又假設我只允許jpg通過,那上述的檔案就會通過我的判斷,導致後面程式處理異常.
那該怎麼做?
其實電腦的檔案組成都是binary,所以當我們去研究最底層的檔案時就可以看到實際檔案的內容,再搭配相關格式檢查就可以.
那要怎樣查詢檔案真實內容呢?可以下這個有趣的指令
1 |
xxd test.jpg | head |
例如真的jpg(jpeg)應該長這樣
冒充的如果去看內容就會變成
可以依據Wiki的定義查到這兩種檔案的檔案頭代表什麼,就可以知道這張是假冒的啦,剩下就留給看官再去延伸判斷摟!
參考: