Arkadaşlar selamlar ben Kruvazör.
Bugün sizlerle c# kullanarak uygulamaların internete çıkmasını firewall kuralı yazarak engelleyeceğiz.
Teknik bir bilgiye pek ihtiyaç duymadan güvenlik duvarı ayarlarına girerek de aynı işlemi yapabilirsiniz ancak bazı insanlar klavye kullanmaktan bile aciz olabiliyor...
Senaryo (Gerçek)
(Okumak için aşağı tıklayınız.)
Oyun fiyatlarının pahalılığı dolayısıyla Sekiro: Shadows Die Twice oynayamayan fukara yazılımcı bir çare aramaktadır.
Aklına crack indirmek gelir ancak Vietnamlı bir hacker grubuna bitcoin kazandırmak istememektedir.
zartoyunzurtsatis.com a girip 20 liraya Steam hesabı almak aklına gelir ve hesabı satın alır.
Yaptığı Anadolu kurnazlığının verdiği keyif ile zevkten 4 köşe olmuşken oyuna girmek ister ve "Ucuz Etin Yahnisi Yenmez" gerçeği yüzüne bir baba tokadı gibi çarpar.
Hesap milyarlarca çinli, hindistanlı vb bireyler tarafından kullanılmakta olduğu için ve steam üzerinde bir oyuna 2 kişi giremediği için oyuna girememektedir.
Aklına crack indirmek gelir ancak Vietnamlı bir hacker grubuna bitcoin kazandırmak istememektedir.
zartoyunzurtsatis.com a girip 20 liraya Steam hesabı almak aklına gelir ve hesabı satın alır.
Yaptığı Anadolu kurnazlığının verdiği keyif ile zevkten 4 köşe olmuşken oyuna girmek ister ve "Ucuz Etin Yahnisi Yenmez" gerçeği yüzüne bir baba tokadı gibi çarpar.
Hesap milyarlarca çinli, hindistanlı vb bireyler tarafından kullanılmakta olduğu için ve steam üzerinde bir oyuna 2 kişi giremediği için oyuna girememektedir.
Planlarının tutmaması yüzünden gözyaşı denizlerden kendini hüzün dağlarına vuran yazılımcı son şeytani hamlesini yapar ve Visual Studioyu açar:
Şu şekilde bir form tasarımı yapıp GroupBox2 yi GroupBox1 in üstüne koyar.
(Son Hali)
Ve kodları yazmaya başlar:
vocaluxe.dependencies.netfwtypelib
İsimli kütüphaneyi nuget aracılığıyla kurup kütüphaneyi ekliyoruz.
C#:
using NetFwTypeLib;
C#:
public partial class Form1 : Form
{
private Dictionary<string, INetFwRule> ruleDictionary;
//kuralları listelemek adına kullanılacak bir dict yapısı oluşturuyorum
public Form1()
{
InitializeComponent();
ruleDictionary = new Dictionary<string,INetFwRule>();
LoadFirewallRules();
}
private void Form1_Load(object sender, EventArgs e)
{
LoadFirewallRules();
groupBox1.Visible = false;
groupBox2.Visible = false;
}
//
private void LoadFirewallRules()
{
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
// Tüm kuralları al
foreach (INetFwRule rule in firewallPolicy.Rules)
{
try
{
//kuralları listboxa dökmek için sihir yapıyorum
INetFwRule2 fwRule = (INetFwRule2)rule;
if (!ruleDictionary.ContainsKey(fwRule.Name))
{
ruleDictionary.Add(fwRule.Name, fwRule);
listBox1.Items.Add(fwRule.Name);
}
}
catch (InvalidCastException)
{
// valla burda hata veriyodu burayı çaldım :P
continue;
}
}
}
private void kuralToolStripMenuItem_Click(object sender, EventArgs e)
{
groupBox1.Visible = true;
groupBox2.Visible = false;
//işte stripmenuye tıklanınca groupboxlardan biri gözüksün diğeri gözükmesin şeyi
}
private void button1_Click_1(object sender, EventArgs e)
{
if (textBox1.Text=="")
{
MessageBox.Show("Kural adını doldurunuz!");
}
else
{
try
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Executable Files (*.exe)|*.exe|All Files (*.*)|*.*";
openFileDialog.FilterIndex = 1;
openFileDialog.RestoreDirectory = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
string selectedAppPath = openFileDialog.FileName;
textBox2.Text = openFileDialog.FileName;
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
// Yeni bir kural oluştur
INetFwRule rule = (INetFwRule)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
rule.Action = NET_FW_ACTION_.NET_FW_ACTION_BLOCK; // Bağlantıyı engelle
rule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT; // Giden bağlantıları engelle
rule.Enabled = true;
rule.ApplicationName = selectedAppPath;
rule.Name = textBox1.Text;
// Kuralı güvenlik duvarına ekle
firewallPolicy.Rules.Add(rule);
MessageBox.Show("Kural başarıyla oluşturuldu.", "Başarılı", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (Exception ex)
{
MessageBox.Show("Hata oluştu: " + ex.Message, "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void kuralKaldırToolStripMenuItem_Click(object sender, EventArgs e)
{
groupBox2.Visible = true; groupBox1.Visible = false;
LoadFirewallRules();
}
private void button2_Click(object sender, EventArgs e)
{
if (listBox1.SelectedItem != null)
{
string selectedRuleName = listBox1.SelectedItem.ToString();
if (MessageBox.Show($"Seçilen kuralı silmek istediğinizden emin misiniz?\n\nKural Adı: {selectedRuleName}", "Kuralı Sil", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
try
{
// Kuralı güvenlik duvarından kaldır
INetFwRule ruleToRemove = ruleDictionary[selectedRuleName];
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallPolicy.Rules.Remove(ruleToRemove.Name);
listBox1.Items.Remove(selectedRuleName);
ruleDictionary.Remove(selectedRuleName);
MessageBox.Show("Kural başarıyla kaldırıldı.", "Başarılı", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show("Kural kaldırılırken bir hata oluştu: " + ex.Message, "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
else
{
MessageBox.Show("Lütfen silmek istediğiniz kuralı seçin.", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
(Steam'i engellemeniz daha mantıklı.)
Final:
(Eğer hayatınızda her şey yolunda gidiyor ve bir problem arıyorsanız kesinlikle oynamanız gereken bir oyun.)