Herkese merhabalar bugün sizlere hazırlamış olduğum iki aşamalı MD5 kırma yazılımını göstereceğim. Programımız isteğe bağlı olarak bilgisayarı fazla yormamak adına HashCat adlı programdan argüman desteği de alıyor. Aslında bu programı kodlamamın sebebi başta sevgili @Kryzlo 'nun açmış olduğu şu konudan dolayı; MD5 hashi bir türlü kıramadım
- Maalesef ki program beni 3-4 gün uğraştırdı ama hakkından gelmeyi başardım. BAT dosyasını bir türlü çalıştıramıyordum bu yüzden grok desteği aldım belirteyim. Konu içerisinde MD5 kelime listesi oluşturma kodlarını da paylaşacağım. Bu kodlar sayesinde var olan kelime listelerini birleştirip büyük bir veri haznesi elde edebileceksiniz, şahsen var olan bazı kelime listelerinin linkini konu sonuna bırakacağım oradan ulaşabilirsiniz. Kodlarımıza geçelim...
using System;using System.Collections.Concurrent;using System.Diagnostics;using System.IO;using System.Linq;using System.Security.Cryptography;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;using static System.Windows.Forms.VisualStyles.VisualStyleElement;2 Adet Textbox birinin adı txtHash bu bize kırılmak istenen MD5 Hash 'ı girmemizi sağlayacak olan kutucuk diğeri ise textBox2 bu da bize ihtiyacımız olan kelime listesinin dosya adresini sağlayacak olan kutucuk.
2 Adet Buton birinin adı btnBaslat bu bize adı üstünde kırma saldırımızı başlatmamızı sağlayacak olan buton diğeri ise button1 ihtiyacımız olan kelime listesini seçmemizi sağlayan buton.
1 adet Progressbar bu bize saldırının yüzdelik dilimini gösterecek.
1 adet Label adı lblDurum bu bize Progressbar nesnesinin yüzdelik dilimini sayı olarak verecek.
1 Adet Listbox bu bize kırılan MD5 'in sonucunu gösterecek.
2 adet radioButton bunlarsa bize hangi seçenek ile saldırıya başlayacağımızı seçmemizi sağlayan nesneler.
partical class verisi altına aşağıya tanımlamış olduğumuz verileri girelim. Bu veriler HashCat dosya yoluna(Debug klasörü) oluşturulacak olan BAT dosyasını & dosya açmamızı sağlayan OpenFileDialog ögesini belirtiyor.
C#:
string dosyaYolu = Path.Combine(Application.StartupPath + @"\hashcat-6.2.6", "ysf.bat");
OpenFileDialog dialog = new OpenFileDialog();
btnBaslat butonu kodlarını girelim. Aşağıdaysa RadioButton1 nesnesi seçiliyse bir BAT dosyası oluşuyor ardından HashCat adlı başlık altında yer alan kodlar çağrılıyor eğer ki Radiobutton2 seçiliyse TemelSözlükSaldırısı adlı başlık altında yer alan kodlar çağrılıyor.
C#:
if (radioButton1.Checked==true)
{
string yaz = $@"@echo off
:: Hash dosyasının yolu
set ""HASH_FILE={txtHash.Text}""
:: Wordlist dosyasının yolu
set ""WORDLIST=kelimeler.txt""
:: Hashcat programı (aynı klasördeyse sadece adı yeterli)
set ""HASHCAT=hashcat.exe""
:: Hash tipi: MD5 (-m 0)
:: Saldırı modu: Dictionary/Wordlist (-a 0)
echo [*] MD5 hash kırma işlemi başlatılıyor...
%HASHCAT% -m 0 -a 0 --potfile-disable -o sonuc.txt %HASH_FILE% %WORDLIST%
exit";
using (StreamWriter writer = new StreamWriter(dosyaYolu))
{
writer.WriteLine(yaz);
}
hashcat();
}
else if (radioButton2.Checked==true)
{
TemelSözlükSaldırısı();
}
button1 'e gelelim buradaysa TemelSözlükSaldırısı başlığı için gereken kelime listesini konu başında oluşturmuş olduğumuz OpenFileDialog nesnesi sayesinde seçiyoruz.
C#:
dialog.Filter = "Metin Belgesi (*.txt)|*.txt";
dialog.InitialDirectory = Environment.CurrentDirectory;
dialog.Title = "Lütfen kelime listesini seçiniz.";
if (dialog.ShowDialog() == DialogResult.OK)
{
textBox2.Text = dialog.FileName;
}
Şimdi hashcat diye bir başlık açalım & aşağıya kodları girelim. Burada konu başında bahsetmiş olduğum şahsımı oyalayan kod bloğu yer alıyor, aslında yaptığı şey BAT dosyasını hedef dizinde çalıştırıp sonuçlarını bir metin belgesine yazmak ardından içeriğini ListBox1 ögesi içerisine yansıtmak.
C#:
string batFilePath = Application.StartupPath + @"\hashcat-6.2.6\ysf.bat";
string workingDirectory = Path.GetDirectoryName(batFilePath);
string resultFilePath = Path.Combine(workingDirectory, "sonuc.txt"); // sonuc.txt dosyasının yolu
var process = new Process();
var startInfo = new ProcessStartInfo()
{
FileName = batFilePath,
WorkingDirectory = workingDirectory,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
};
process.StartInfo = startInfo;
process.OutputDataReceived += (_, args) =>
{
if (!string.IsNullOrEmpty(args.Data))
Console.WriteLine($"OUTPUT: {args.Data}");
};
process.ErrorDataReceived += (_, args) =>
{
if (!string.IsNullOrEmpty(args.Data))
MessageBox.Show($"ERROR: {args.Data}");
};
try
{
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
// İşlem tamamlandıktan sonra sonuc.txt dosyasını oku ve ListBox'a aktar
if (File.Exists(resultFilePath))
{
string[] lines = File.ReadAllLines(resultFilePath);
// UI thread'inde çalıştırmak için Invoke kullan (WinForms)
if (listBox1.InvokeRequired)
{
listBox1.Invoke(new Action(() =>
{
listBox1.Items.Clear(); // Önceki sonuçları temizle
foreach (string line in lines)
{
if (!string.IsNullOrWhiteSpace(line)) // Boş satırları atla
{
listBox1.Items.Add(line);
}
}
}));
}
else
{
listBox1.Items.Clear();
foreach (string line in lines)
{
if (!string.IsNullOrWhiteSpace(line))
{
listBox1.Items.Add(line);
}
}
}
}
else
{
Console.WriteLine("sonuc.txt dosyası bulunamadı!");
}
}
catch (Exception ex)
{
Console.WriteLine($"Hata: {ex.Message}");
}
finally
{
process?.Dispose();
}
C# dilinin temel sözlük saldırısı yerine geldik. Burada aşağıda vereceğim kodlarla temel sözlük saldırısı gerçekleşiyor & hedef MD5 kırılmaya çalışıyor. Bu olaylar gerçekleşirken Progressbar1 hareket ediyor sonuç bulunursa Listbox1 'e ekliyor.
C#:
string targetHash = txtHash.Text.Trim().ToLower();
if (string.IsNullOrEmpty(targetHash) || targetHash.Length != 32)
{
MessageBox.Show("Geçerli bir MD5 hash giriniz!");
return;
}
string wordlistPath = textBox2.Text;
if (!File.Exists(wordlistPath))
{
MessageBox.Show("Wordlist dosyası bulunamadı!");
return;
}
string[] allWords;
try
{
allWords = File.ReadAllLines(wordlistPath, Encoding.UTF8);
}
catch (Exception ex)
{
MessageBox.Show("Wordlist okunurken hata oluştu: " + ex.Message);
return;
}
listBox1.Items.Clear();
bool found = false;
DateTime startTime = DateTime.Now;
progressBar1.Minimum = 0;
progressBar1.Maximum = allWords.Length;
progressBar1.Value = 0;
for (int i = 0; i < allWords.Length; i++)
{
string word = allWords[i].Trim();
if (string.IsNullOrEmpty(word))
continue;
string hashedWord = GetMd5Hash(word);
int progressPercent = (progressBar1.Value * 100) / progressBar1.Maximum;
lblDurum.Text = "%" + progressPercent;
if (hashedWord == targetHash)
{
TimeSpan elapsed = DateTime.Now - startTime;
listBox1.Items.Add($"KIRILDI! Parola: {word}");
listBox1.Items.Add($"Süre: {elapsed.TotalSeconds:0.00} saniye");
found = true;
break;
}
// UI'nin donmaması için küçük gecikme gerekebilir ama gerekirse eklenir
Application.DoEvents(); // UI güncellensin
}
if (!found)
{
listBox1.Items.Add("Parola wordlist içinde bulunamadı.");
}
GetMD5Hash adında bir özel bir string açalım & içerisine aşağıdaki kodu girelim. Bu kod MD5 kodunu form içerisinde tanımlamaya yarıyor.
C#:
private string GetMd5Hash(string input)
{
using (var md5 = MD5.Create())
{
byte[] inputBytes = Encoding.UTF8.GetBytes(input); // Türkçe karakter desteği
byte[] hashBytes = md5.ComputeHash(inputBytes);
StringBuilder sb = new StringBuilder();
foreach (var b in hashBytes)
sb.Append(b.ToString("x2")); // hex format
return sb.ToString();
}
}
RadioButton ayarına gelelim. Burada amacımız şu HashCat seçili iken dışarıdan herhangi bir metin belgesi tanıttığınız zaman OpenCL veya çeşitli hatalarla karşılaştım bu yüzden en iyisinin HashCat dizininde var olan bir kelime listesi olması... Haliyle böyle olunca da üstteki butona ve textbox ögesine ihtiyaç kalmıyor. Burada sadece HashCat ayarı seçili ise buton & textbox ögeleri işlem yapamıyorsunuz diğer Radiobutton seçili ise işlem yapabiliyorsunuz.
C#:
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
textBox2.Enabled = false;
button1.Enabled = false;
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
textBox2.Enabled = true;
button1.Enabled = true;
}
İhtiyacınız Olan Wordlist(Kelime Listesi);
siteye sızıcam ve
user list ile pass list arıyorum bruteforce yapıcam siteye ****sploit ten
ama bende
büyük bir user list ile pass list yok
nerden bulurum ?
biliyorsanız verirmisiniz (varsa)?
user list ile pass list arıyorum bruteforce yapıcam siteye ****sploit ten
ama bende
büyük bir user list ile pass list yok
nerden bulurum ?
biliyorsanız verirmisiniz (varsa)?
- porrsuk
- Cevaplar: 18
- Forum: THT Yardım Merkezi
HashCat Adlı Programı İndirmek İçin;
hashcat - advanced password recovery
World's fastest and most advanced password recovery utility
Şimdi gelelim birden fazla kelime listesini tek bir dosyada birleştirmeye. Aşağıdaki kodlar tam da bunu yapıyor elinizde ne kadar kelime listesi varsa dosya yolunu yazıp programı çalıştırmanız yeterli. Bu kodlar sayesinde hem veriler bir yerde toplanıyor hem de aynı ögeler var ise listeye eklemiyor. Konsol uygulamasıdır unutmayın.
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Threading.Tasks;using System.Collections;using System.Security.Cryptography;static main kodları aşağıdadır.
C#:
static void Main(string[] args)
{
string[] dosyalar = new string[]
{
@"MD5 Crack\Lists\0.txt",
@"MD5 Crack\Lists\1.txt",
@"MD5 Crack\Lists\2.txt",
@"MD5 Crack\Lists\3.txt",
@"MD5 Crack\Lists\4.txt",
@"MD5 Crack\Lists\5.txt",
@"MD5 Crack\Lists\6.txt"
};
HashSet<string> benzersizSatirlar = new HashSet<string>();
foreach (string dosya in dosyalar)
{
if (!File.Exists(dosya))
{
Console.WriteLine($"Dosya bulunamadı: {dosya}");
continue;
}
foreach (string satir in File.ReadLines(dosya))
{
string temizSatir = satir.Trim();
if (!string.IsNullOrEmpty(temizSatir))
benzersizSatirlar.Add(temizSatir);
}
}
// Harf ve sayı ile başlayanları ayır
var harfler = benzersizSatirlar
.Where(x => !string.IsNullOrEmpty(x) && char.IsLetter(x[0]))
.OrderBy(x => x, StringComparer.Ordinal)
.ToList();
var sayilar = benzersizSatirlar
.Where(x => !string.IsNullOrEmpty(x) && char.IsDigit(x[0]))
.OrderBy(x => x, StringComparer.Ordinal)
.ToList();
var birlesikListe = harfler.Concat(sayilar).ToList();
string ciktiDosyasi = "birlesik1.txt";
File.WriteAllLines(ciktiDosyasi, birlesikListe);
// Özet bilgileri yaz
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($"\nSıralama ve yazma işlemi tamamlandı.");
Console.ResetColor();
Console.WriteLine($"Toplam satır: {birlesikListe.Count}");
Console.WriteLine($"Harfle başlayan: {harfler.Count}");
Console.WriteLine($"Sayıyla başlayan: {sayilar.Count}");
}
[ SONUÇ GÖRSELİ ]
-SON TEŞEKKÜRLER-
-SON TEŞEKKÜRLER-
Son düzenleme:

