Bilgisayarda "rapor.pdf" adlı bir dosya bulunuyor. Ancak PDF okuyucusu dosyayı açamıyor. İlk akla gelen ihtimal dosyanın bozulmuş olmasıdır. Oysa dosya yanlış uzantıyla kaydedilmiş bir görsel, sıkıştırılmış arşiv veya farklı biçimde bir veri olabilir. Bir dosyanın ismi bize yalnızca ipucu verir. Dosyanın teknik kimliği, içerisindeki baytlarda saklıdır.
Dosya adına neden güvenemeyiz?
- Windows, dosya uzantılarından yararlanarak uygun uygulamayı seçebilir. Ancak ".pdf, .jpg veya txt" uzantıları dosyanın gerçek biçimini garanti etmez.
- Bir PNG görselinin uzantısını ".txt" yapmanız, onu metin dosyasına dönüştürmez.
Örneğin birçok PNG dosyasının başlangıcında şu sekiz bayt bulunur: "89 50 4E 47 0D 0A 1A 0A" PDF belgelerinin başlangıcında ise genellikle "%PDF-" ifadesi yer alır. Bu işaretlere dosya imzası denir.
Yalnızca imza yeterli mi?
Hayır. Bir dosyanın başlangıç baytlarını değiştirmek mümkündür. Ayrıca bazı dosyalar ortak kapsayıcı biçimler kullanır.
Örneğin modern Office belgelerinin bir bölümü ZIP tabanlı paket yapısından yararlanır. Dolayısıyla ZIP başlangıç imzası taşıyan bir dosya, sıradan arşiv de olabilir, Office belgesi de. Doğru sınıflandırma için; dosyanın içindeki dizin ve veri yapıları da incelenmelidir.
Windows üzerinde deney
Yalnızca kendi test dosyanızda PowerShell'i kullanın:
$path = "C:\Lab\ornek.png"
$stream = [System.IO.File]::OpenRead($path)
try {
$buffer = New-Object byte[] 16
$count = $stream.Read($buffer, 0, 16)
[BitConverter]::ToString($buffer, 0, $count)
}
finally {
$stream.Dispose()
}
Bu işlem dosyanın ilk 16 baytını gösterir. Dosyanın bir kopyasının uzantısını değiştirip işlemi tekrarlayın. Gerçek içerik değişmediğinden baytlar aynı kalacaktır. Bu yöntem dosyanın tamamını belleğe almadan başlangıç bölümünü okumak için yararlıdır.
Baytları görmek neden her zaman yeterli değildir?
Hexadecimal değerlerin doğru yorumlanması için; karakter kodlaması, bayt sıralaması ve dosya biçiminin kuralları bilinmelidir.
Örneğin "41" değeri ASCII tablosunda "A" harfine karşılık gelir. Ancak ikili bir dosyada aynı değer, sayısal alanın parçası olabilir.
Okunabilir metin bulmak, ilgili dosyanın metin dosyası olduğunu garanti etmez. Bir dosyanın içinde internet adresi bulunması da o adrese bağlantı kurulduğunu kanıtlamaz.
Sonuç
Dosyanın gerçek biçimini tespit etmek, daha kapsamlı bir incelemenin başlangıcıdır.
Biçim uyuşmazlığını belirlemek başka, bunun neden oluştuğunu ve kim tarafından gerçekleştirildiğini kanıtlamak başka bir iştir. Dosya uzantısı bir etikettir. Adli incelemede etiket değil, gerçek veri yapısı esas alınır.
Kaynaklar
- Microsoft, File Streams: https://learn.microsoft.com/en-us/windows/win32/fileio/file-streams
- Library of Congress, Sustainability of Digital Formats: https://www.loc.gov/preservation/digital/formats/
- NIST, SP 800-86: https://doi.org/10.6028/NIST.SP.800-86