通過二進位制頭識別檔案型別

weixin_33858249發表於2016-05-16
通過二進位制頭識別檔案型別,可以使用UE或者WinHex軟體開啟

1.JPEG/JPG
- 檔案頭標識 (2 bytes): $ff, $d8 (SOI) (JPEG檔案標識) 
- 檔案結束標識 (2 bytes): $ff, $d9 (EOI) 

2.TGA
- 未壓縮的前5位元組   00 00 02 0000
- RLE壓縮的前5位元組   00 00 10 0000

3.PNG
- 檔案頭標識 (8 bytes)   89 50 4E 470D 0A 1A 0A

4.GIF
- 檔案頭標識 (6 bytes)   47 49 46 3839(37) 61
                       G  I  F  8 9 (7)  a

5.BMP
- 檔案頭標識 (2 bytes)   424D
                       B   M

6.PCX
- 檔案頭標識 (1 bytes)   0A

7.TIFF
- 檔案頭標識 (2 bytes)   4D 4D 或 4949

8.ICO
- 檔案頭標識 (8 bytes)   00 00 01 0001 00 20 20 

9.CUR
- 檔案頭標識 (8 bytes)   00 00 02 0001 00 20 20

10.IFF
- 檔案頭標識 (4 bytes)   46 4F 524D
                       F  O  R  M

11.ANI
- 檔案頭標識 (4 bytes)   52 49 4646
                        R  I  F F

    根據這些檔案頭標識的收集,我可以寫一個識別影象格式的模組了。但是在寫這個模組之前可以對收集到的檔案頭標識進行優化,使得程式中字串比對次數儘量的少。
1.JPEG我們知需要比對檔案頭的$ff, $d8這兩個字元,而不用讀取最後的兩個結束標識了。
2.TGA,ICO,CUR只需比對第三個與第五個字元即可。
3.PNG比對[89][50]這兩個字元。
4.GIF比對[47][49][46]與第五個字元。

廢話不多說了,利用記憶體流來判斷檔案的格式,其實判斷檔案的前幾個位元組就可以簡單的判斷這個檔案是什麼型別的檔案,例如

jpg檔案 是 FFD8 (從低位到高位就要反過來 D8FF 下面都是一樣)

BMP檔案 是 424D ---4D42

其他的我就不一一列舉了,想知道跟多檔案型別分別是用什麼字元作為檔案的開頭的話,下載個C32asm或者UE等這類16進位制編輯器就可以看到了。

原文連結:http://zjf30366.blog.163.com/blog/static/41116458201042194542973/

附:常見檔案的檔案頭標識

 

255044PDF 
526563 EML 
D0CF11 PPT 
4D5AEE COM 
E93B03 COM 
4D5A90 EXE 
424D3E BMP 
49492A TIF 
384250 PSD 
C5D0D3 EPS 
0A0501 PCS 
89504E PNG 
060500 RAW 
000002 TGA 
60EA27 ARJ 
526172 RAR 
504B03 ZIP 
495363 CAB 
1F9D8C Z 
524946 WAV 
435753 SWF 
3026B2 WMV 
3026B2 WMA 
2E524D RM 
00000F MOV 
000077 MOV 
000001 MPA 
FFFB50 MP3 
234558 m3u 
3C2144 HTM 
FFFE3C XSL 
3C3F78 XML 
3C3F78 MSC 
4C0000 LNK 
495453 CHM 
805343 scm 
D0CF11 XLS 
31BE00 WRI 
00FFFF MDF 
4D4544 MDS 
5B436C CCD 
00FFFF IMG 
FFFFFF SUB 
17A150 PCB 
2A5052 ECO 
526563 PPC 
000100 DDB 
42494C LDB 
2A7665 SCH 
2A2420 LIB 
434841 FNT 
7B5C72 RTF 
7B5072 GTD 
234445 PRG 
000007 PJT 
202020 BAS 
000002 TAG 
4D5A90 dll 
4D5A90 OCX 
4D5A50 DPL 
3F5F03 HLP 
4D5A90 OLB 
4D5A90 IMM 
4D5A90 IME 
3F5F03 LHP 
C22020 NLS 
5B5769 CPX 
4D5A16 DRV 
5B4144 PBK 
24536F PLL 
4E4553 NES 
87F53E GBC 
00FFFF SMD 
584245 XBE 
005001 XMV 
000100 TTF 
484802 PDG 
000100 TST
414331 dwg 
D0CF11 max

另外還有一些重要的檔案,沒有固定的檔案頭,如下: 

TXT 沒固定檔案頭定義 
TMP 沒固定檔案頭定義 
INI 沒固定檔案頭定義 
BIN 沒固定檔案頭定義 
DBF 沒固定檔案頭定義 
C 沒沒固定檔案頭定義 
CPP 沒固定檔案頭定義 
H 沒固定檔案頭定義 
BAT 沒固定檔案頭定義 

還有一些不同的檔案有相同的檔案頭,最典型的就是下面: 

4D5A90 EXE 
4D5A90 dll 
4D5A90 OCX 
4D5A90 OLB 
4D5A90 IMM 
4D5A90 IME


參考:http://blog.sina.com.cn/s/blog_6bfe46bc0100q1bx.html

相關文章