Bir EXE dosyasının güncellenmesi nasıl engellenir?

Boylam.say

Decapat
Katılım
17 Nisan 2023
Mesajlar
144
Merhaba, ben arkadaşımdan gelen bir EXE dosyasını indireceğim ancak dosyanın güncelleme almasını istemiyorum, bunu engellemenin bir yolu var mı?
 
Dosyanın internete bağlanmasını engelleyebilirsin, sadece o EXE için bağlantı engellenecek.

Bunun için aşağıda C# ile yazılmış basit bir örnek var;

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);
         }
     }

 
 }
 
Merhaba, ben arkadaşımdan gelen bir EXE dosyasını indireceğim ancak dosyanın güncelleme almasını istemiyorum, bunu engellemenin bir yolu var mı?

Merhaba hocam, dosyanın güncelleme alıp almaması tamamen içinde ne olduğuna bağlı aslında. Normal bir .exe dosyası kendi kendine durup dururken güncellenmez. Ama içeriğinde bir updater varsa ya da çalıştığında otomatik olarak internetten yeni sürüm kontrolü yapıyorsa, o zaman dış bağlantı kurduğu sürece güncellenebilir.

Eğer sen bu programın güncelleme çekmesini istemiyorsan en net çözüm, çalıştırmadan önce internet bağlantısını kesmek olur. Ama bu her seferinde uğraştırır. Kalıcı çözüm istiyorsan, Windows güvenlik duvarından o .exe dosyasının internete çıkmasını engelleyebilirsin. Böylece çalışır ama dışarı veri gönderemez, güncelleme falan da alamaz. Başka bir seçenek de programın ayarlarında otomatik güncelleme seçeneği varsa onu kapatmak ama her yazılımda bu seçenek olmayabiliyor.

Yani dosya güvenilir ve düzgün çalışıyorsa, bağlantısını kesip kullanmak ya da firewall üzerinden engellemek yeterli olur. Tam olarak hangi yazılım olduğuna göre yöntem de değişebilir ama temel mantık bu.

Başlat menüsüne girip “Windows Güvenlik Duvarı” ya da “Windows Defender Güvenlik Duvarı” yaz, çıkan seçenekten gelişmiş ayarları aç. Sol tarafta “Giden Kurallar” diye bir şey var, ona tıkla. Sağda “Yeni Kural” de. Açılan pencerede “Program”ı seçip ileriye bas. Sonra o .exe dosyasının tam yolunu göster (masaüstündeyse oradaki yolu aynen kopyalayabilirsin). Devam edince “Bağlantıyı engelle” seçeneğini işaretle, sonra ileri deyip kural ismini yaz (örneğin “X Program Güncelleme Engeli” gibi). Bitir deyince işlem tamam.

Artık o program internete çıkamaz, haliyle güncelleme de alamaz. Hem garantili hem kalıcı çözüm olur. Baştan yazmadığım için kusura bakma, şimdi tamam oldu.
 

Dosyanın yönetici olarak çalışmak istemesi bu durumu değiştirir mi?
 
Dosyanın yönetici olarak çalışmak istemesi bu durumu değiştirir mi?

Hayır hocam, dosyanın yönetici olarak çalışması bu engellemeyi etkilemez. Güvenlik duvarı üzerinden yapılan kural, hangi yetkiyle çalışırsa çalışsın geçerli olur. İster yönetici olarak açılsın ister normal, kural “bu .exe dışarı çıkamaz” diyorsa, internet bağlantısını keser. Yani sen güvenlik duvarından o dosyaya giden trafiği engellediğin sürece, program kafasına göre güncelleme falan çekemez.
Ancak program başka bir .exe dosyayı çağırarak arka planda Update yapıyorsa, o zaman o yeni dosya için de aynı kuralı eklemen gerekebilir. Yani olay sadece tek bir dosyaya bağlı değilse, o zaman biraz dikkat etmek gerekiyor. Ama klasik tek dosyalı yapılar için, firewall kuralı gayet yeterli ve sağlam bir çözümdür. Yönetici yetkisi bu engeli bypass etmez. Rahat ol.
 

Teşekkür ederim.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…