Windows’ta Uzantısı Değiştirilmiş Dosyaları Tespit Etme: Powershell ile Pratik Yöntem

 Windows işletim sistemlerinde dosya uzantılarının değiştirilmesi, güvenlik ve dosya bütünlüğü açısından zaman zaman riskli olabilir. Özellikle zararlı yazılımların ya da yanlışlıkla yapılan uzantı değişikliklerinin tespit edilmesi, sistem yöneticileri ve adli bilişim uzmanları için önemlidir.

Bu yazıda, Powershell kullanarak bir klasördeki tüm dosyaların gerçek formatını nasıl analiz edebileceğinizi ve uzantısı değiştirilmiş dosyaları nasıl bulabileceğinizi adım adım anlatacağım.


Neden Dosya Uzantısı ile Gerçek Format Kontrolü Yapılır?

  • Zararlı yazılım analizi: Virüsler veya trojanlar genellikle dosya uzantılarını değiştirerek gizlenir.

  • Kullanıcı hatası: Yanlışlıkla değiştirilen dosya uzantıları, açılma problemlerine neden olur.

  • Adli bilişim: Dosya manipülasyonlarını tespit etmek, dijital delil açısından kritiktir.


Dosya Formatı Nasıl Anlaşılır?

Her dosyanın kendine özgü bir “magic number” yani benzersiz bir imzası vardır. Örneğin bir JPG dosyasının başında FFD8FFE0 bulunur. MP4 dosyalarında ise bu imza genellikle 66747970 (ftyp) şeklindedir. Bu imzalar sayesinde dosyanın gerçek formatını tespit edebiliriz.


Powershell ile Uzantısı Farklı Olan Dosyaları Bulma Kodu

Aşağıdaki Powershell betiği, belirlediğiniz klasördeki tüm dosyaların gerçek formatını kontrol eder. Eğer dosya uzantısı ile dosyanın imzası (magic number) farklıysa, o dosyayı listeler. Özellikle JPG, PNG, PDF, ZIP, RAR, 7Z, BMP, MP3 ve MP4 gibi popüler dosya türleri için çalışır.

# Uzantısı ile gerçek dosya tipi farklı olanları listele (mp4 dahil)
$signatures = @{
    "FFD8FFE0" = "jpg"
    "FFD8FFE1" = "jpg"
    "89504E47" = "png"
    "47494638" = "gif"
    "25504446" = "pdf"
    "504B0304" = "zip"
    "504B34"   = "zip"
    "52617221" = "rar"
    "377ABCAF" = "7z"
    "424D"     = "bmp"
    "494433"   = "mp3"
    "66747970" = "mp4"  # MP4 için "ftyp"
}

Get-ChildItem -Recurse -File | ForEach-Object {
    $path = $_.FullName
    $ext = $_.Extension.Trim('.').ToLower()
    try {
        $bytes = [System.IO.File]::ReadAllBytes($path)
        $magic = [BitConverter]::ToString($bytes, 4, 4) -replace "-", ""
        $trueExt = $null
        foreach ($sig in $signatures.Keys) {
            if ($magic.StartsWith($sig)) {
                $trueExt = $signatures[$sig]
                break
            }
        }
        if ($trueExt -and $ext -ne $trueExt) {
            Write-Output "$($path) => Uzantı: $ext, Gerçek Tip: $trueExt"
        }
    } catch {}
}

Nasıl Kullanılır?

  1. Powershell’i yönetici olarak açın.

  2. Yukarıdaki kodu yeni bir dosyaya yapıştırın (örneğin kontrol.ps1 olarak kaydedin).

  3. Komut satırından çalıştırmak istediğiniz klasöre gidin.

  4. kontrol.ps1 dosyasını çalıştırın.

  5. Uzantısı ile gerçek dosya türü farklı olan dosyalar ekrana listelenecektir.


Sıkça Sorulan Sorular

Bu yöntemi kimler kullanmalı?

  • Sistem yöneticileri, siber güvenlik uzmanları ve dosya güvenliğine önem veren herkes bu koddan faydalanabilir.

Desteklenen dosya türleri nelerdir?

  • Betikte yaygın olarak kullanılan jpg, png, gif, pdf, zip, rar, 7z, bmp, mp3 ve mp4 türleri desteklenmektedir. İsterseniz başka dosya türlerini de ekleyebilirsiniz.

Farklı dosya türleri eklenebilir mi?

  • Evet. $signatures dizisine yeni bir satır ekleyerek istediğiniz formatı ekleyebilirsiniz.


Sonuç

Dosya uzantısı değişiklikleri, hem güvenlik hem de veri bütünlüğü açısından önemli bir konudur. Yukarıdaki Powershell betiğiyle, sisteminizdeki uzantısı değiştirilmiş dosyaları kolayca tespit edebilirsiniz.
Siber güvenlik ve adli bilişim alanında çalışanlar için bu tür otomasyonlar, hem zaman kazandırır hem de manuel kontrol hatalarını azaltır.


Yorumlar

Bu blogdaki popüler yayınlar

Asp.Net ile T.C. Kimlik Doğrulama (Mernis) Web Service ile

Chrome HSTS Hatası Nedir ve Nasıl Çözülür?

Windows 11'i Ücretsiz Olarak Etkinleştirme Rehberi