Python ile Password Cracker Yapımı
crypt modülü
crypt modülü password ve salt parametrelerini kullanarak parolanın hashlenmesini sağlar.
Hashing işlemi, herhangi uzunluktaki bir veriyi sabit uzunlukta bir çıktıya dönüştürme işlemidir, bir şifreleme işlemi değildir. Çünkü şifrelemede yapılan işlemler verileri korumak içindir. Hashingde ise işlemler verinin değiştirilmediğinden, veriyle oynanmadığından emin olunmak için yapılır. Tek yönlüdür, yani geri döndürülemez bir işlemdir. Bu yüzden bu uygulamada yeni hash değerleri elde edip saklanan hash değerleriyle karşılaştırma işlemi yapılmıştır.
Buradaki amaç hashli parolayı elimizdeki sözlüğü kullanarak bulabilmek.
Kütüphaneyi ekleyip crypt işlemini yaptım:

Burada password yerine hashlenmesi istenilen herhangi bir veri girilir.
Salt parametresi hashlenmiş parolanın başına eklenir. Bu, kullanıcıların aynı parolayı seçmeleri durumda farklılık yaratmak ve şifrelerin depoda güvenliğini sağlamak içindir. Random seçebiliriz ama genelde HX,HY,GN gibi saltlar seçilir. Artık parolanın hashlenmiş halini biliyoruz.
Python kodumuzu kaydedeceğimiz dizine password ve dictionary adında iki tane txt dosyası oluşturmamız gerek.
password.txt kullanıcıların parolalarının saklandığı dosyadır:

dictionary.txt ise sözlük dosyasıdır. Bu aşamada sözlüğünüzün ne kadar güçlü olduğu büyük önem taşır. Burada örneği anlamak ve parolanın bulunmasını görmek için doğru olan tek bir değeri girdim:

Şimdi koda gelelim:
Önce def main fonksiyonundan başlayalım: passwords.txt dosyasını alıp satırları okuyor. “:” ile ayrım yapıyor.
[0] ile satırdan kullanıcı adını ve [1] ile hashlenmiş parolayı alıyor.
rstrip ile satırın sonundaki alt satıra geçme işlemini (\n) siliyor.
Değerleri ekrana yazdırıp hashlenmiş parolayı testPass fonksiyonuna gönderiyor.
testPass fonksiyonunda hashlenmiş parolanın ilk iki harfini salt olarak alıyor. Hatırlarsanız crypt.crypt() işlemini yapınca girdiğimiz salt değerini hashlinin başına eklemişti.
Yani şimdiye kadar main fonksiyonundan hashlenmiş parolayı ve testPass fonksiyonundan salt değerini aldık.
for döngüsünden önce dictionary.txt dosyasını alıyor ve içindeki kelimeleri \n’e göre ayırıyor. Bulduğu kelimeyi ekrana yazıyor. Daha sonra o kelimeyle bir yukarda bulduğu salt değerini kullanıp en başta yaptığımız crypt.crypt() işlemini yapıyor. Ve sonucu cryptWord değişkenine atıyor.
Aslında bir deneme yanılma işlemi yapılıyor. Sözlüğün içindeki kelimeleri tek tek hashleyip var olan hashli veri ile karşılaştırıyor.
password.txt dosyasından aldığı cryptPass ile kendi oluşturduğu cryptWord eşit olduğunda parolayı çözmüş oluyor ve ekrana basıyor:

Elimizdeki sözlük dosyasıyla ve salt parametreleriyle tekrar tekrar hashing işlemi yapılır. cryptPass değeriyle cryptWord değeri aynı olduğunda anlarız ki password.txt dosyasında saklanan hashli değer, sözlüğümüzden kullandığımız değerle aynıdır. Şifreyi çözmüş oluruz.
Şimdi aynı işlemi daha geniş password ve dictionary dosyaları ile yapalım:

crypt işlemi ile çıkan sonuçları passwords.txt dosyasına ekliyoruz:

dictionary.txt dosyasında sadece user2 için doğru parola değeri var, sadece user2 için parolayı bulup diğerlerini bulamamasını görmüş olacağız:

Ve sonuç, sözlüğümüzde sadece user2'nin parolası bulunduğu için onu çözebildi:

Hashing işlemi tek yönlü olduğu için onu geri döndürmek yerine yeni hash değerleri üretip hepsini tek tek karşılaştırdık ve aynı sonucu alarak aslında hashlenmiş parolanın ilk halini bulduğumuzu anladık. Burada en önemli etken sözlük dosyamızdaki kelimelerdir.
Uygulamaya github sayfamdan da ulaşabilirsiniz → uygulama-linki
Kaynakça: http://index-of.es/Varios-2/Hacking%20with%20Python%20The%20Ultimate%20Beginner's%20Guide.pdf