Detector de tip de fișier — decid octeții, nu numele
Detector de tip de fișier
Extensia unui fișier este doar o etichetă — redenumirea lui virus.exe în photo.jpg nu schimbă nimic în interior. Această pagină citește primii octeți ai fiecărui fișier încărcat și îi compară cu peste 60 de semnături reale: imagini, documente, arhive, audio/video, fonturi, executabile, baze de date și chei. Se obțin tipul detectat, tipul MIME, extensiile pe care le folosește de obicei acel tip, un avertisment când extensia contrazice conținutul și, acolo unde formatul le conține, detalii precum dimensiunile imaginii, versiunea PDF sau marca MP4. Totul se inspectează local în browser.
Se aleg fișiere
Se trag fișierele aici, sau se face clic pentru a le alege Un fișier sau mai multe. Se citesc doar primii 512 octeți din fiecare; fișierele nu părăsesc niciodată acest calculator.
Niciun fișier selectat.
Rezultate
Tabelul de detectare apare aici după ce se aleg fișierele și se apasă Detectare.
Ce înseamnă „potrivire”:consecvent — extensia corespunde formatului detectat; nepotrivire — conținutul este un alt format decât cel pe care îl declară extensia (un fișier redenumit sau, mai rău); „fără semnătură” — primii octeți nu corespund niciunei semnături cunoscute, ceea ce este normal pentru text simplu, CSV și majoritatea formatelor de date care pur și simplu nu au antet.
Confidențialitate: fișierele se citesc cu FileReader-ul propriu al browserului; nimic nu se încarcă.
Ce este o semnătură de fișier?
Aproape fiecare format binar începe cu o secvență fixă de octeți — numărul magic — pus acolo pentru ca un program să-și poată recunoaște fișierele fără să aibă încredere în nume. Un PNG începe întotdeauna cu cei opt octeți 89 50 4E 47 0D 0A 1A 0A („\x89PNG\r\n\x1a\n”), un PDF cu textul ASCII %PDF, un ZIP cu PK\x03\x04 (inițialele lui Phil Katz, care a proiectat formatul). Sistemele de operare ignoră în general acești octeți și se uită la extensie — motiv pentru care un fișier redenumit nu „se deschide bine” nicăieri, iar instrumentele de securitate verifică conținutul.
Primii octeți celebri
Octeți
Format
Notă
89 50 4E 47 0D 0A 1A 0A
Imagine PNG
\r\n protejează împotriva corupției din cauza sfârșiturilor de rând
FF D8 FF
Imagine JPEG
fiecare cadru JPEG începe cu un marcaj SOI
25 50 44 46 2D
Document PDF
„%PDF-1.7” — urmează versiunea
50 4B 03 04
Arhivă ZIP
docx/xlsx/odt/epub sunt arhive ZIP care poartă o extensie
D0 CF 11 E0
Office vechi
doc/xls/ppt/msi — fișierul compus OLE2
4D 5A
EXE Windows
„MZ”, după Mark Zbikowski de la Microsoft
7F 45 4C 46
ELF Linux
\x7fELF — programe și biblioteci partajate
1A 45 DF A3
Matroska/WebM
începutul containerului EBML
75 73 74 61 72la deplasamentul 257
Arhivă TAR
semnătura se ascunde adânc în antet
Cum decide detectorul
Primii 512 octeți ai fiecărui fișier se compară cu un tabel de semnături în ordinea specificității: containerele de marcă (RIFF…WAVE față de RIFF…AVI față de RIFF…WEBP, casetele de marcă ISO la deplasamentul 8) sunt verificate înaintea containerelor lor generice, iar formatele bazate pe ZIP (EPUB, ODF, OOXML) înaintea simplului ZIP. Acolo unde un format conține metadate care se descriu singure, pagina coboară cu un nivel mai adânc: dimensiunile PNG/GIF/BMP/JPEG/WebP se citesc din antete, versiunea PDF din octetul 5, marca MP4 și versiunea clasei Java din deplasamentele lor standard. Fișierele care nu corespund niciunei semnături trec printr-o euristică textuală (BOM, <?xml, <html, shebang, proporția de caractere tipăribile) înainte de a fi declarate necunoscute.
Greșeli frecvente
„Spune ZIP, dar fișierul este .docx” — este corect: un .docx este o arhivă ZIP al cărei prim element este [Content_Types].xml; detectorul recunoaște acest caz și raportează în mod specific Office Open XML. „Spune că nu are semnătură, dar fișierul se deschide bine” — CSV, majoritatea codului sursă și nenumărate formate științifice nu au deloc octeți magici; „fără semnătură” nu este o acuzație. „Poate spune dacă fișierul este sigur?” — nu. Verificarea conținutului spune ce este un fișier, nu ce face; un EXE este un EXE indiferent dacă este un program de instalare sau un malware.
Întrebări frecvente
De ce doar 512 octeți? — fiecare semnătură acceptată se află în primii 512 octeți (cea mai adâncă este ustar din TAR, la deplasamentul 257); citirea mai multor ar încetini inutil lotele mari. Detectează durata video? — nu, doar containerul și marca lui; durata cere analizarea întregului index, ceea ce este treaba unui player. Mai multe fișiere deodată? — da, se trage o selecție întreagă; fiecare rând este detectat independent. Pagină înrudită: pentru sensul invers — de la extensie la tipul MIME — se folosește Căutarea tipului MIME; pentru a calcula hash-ul acelorași fișiere se folosește Hash în lot al fișierelor.