C# 从程序启动文件的安全性

C# 从程序启动文件的安全性,c#,security,process,config,launch,C#,Security,Process,Config,Launch,我有一个launcher应用程序,它允许用户选择想要快速打开的exe文件。为此,他们从文件浏览器中选择文件,我将exe路径存储在配置文件中。这有安全问题吗?我担心的是,一些恶意软件可能会改变配置文件,将exe文件更改为恶意可执行文件,然后应用程序会启动它。这是一个可行的威胁,还是如果恶意软件可以重写一个文件,它就不需要代理应用程序来启动另一个文件?我可以对文件进行加密,但我不介意用户通过文本编辑器手动更改设置。您可以将启动的exe文件的哈希存储在配置文件中,并在执行之间通知用户哈希是否更改 要计

我有一个launcher应用程序,它允许用户选择想要快速打开的
exe
文件。为此,他们从文件浏览器中选择文件,我将exe路径存储在配置文件中。这有安全问题吗?我担心的是,一些恶意软件可能会改变配置文件,将exe文件更改为恶意可执行文件,然后应用程序会启动它。这是一个可行的威胁,还是如果恶意软件可以重写一个文件,它就不需要代理应用程序来启动另一个文件?我可以对文件进行加密,但我不介意用户通过文本编辑器手动更改设置。

您可以将启动的exe文件的哈希存储在配置文件中,并在执行之间通知用户哈希是否更改

要计算文件的哈希值,请执行以下操作:

public static string ComputeHash(string fileName)
{
    using(FileStream st = File.OpenRead(fileName))
    {
         SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider());
         byte[] hash = sha1.ComputeHash(st);
         return BitConverter.ToString(hash).Replace("-", "");
    }
}

您可以将启动的exe文件的哈希值存储在配置文件中,并在执行之间通知用户哈希值是否发生变化

要计算文件的哈希值,请执行以下操作:

public static string ComputeHash(string fileName)
{
    using(FileStream st = File.OpenRead(fileName))
    {
         SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider());
         byte[] hash = sha1.ComputeHash(st);
         return BitConverter.ToString(hash).Replace("-", "");
    }
}

你猜对了:如果恶意软件可以更改磁盘上文件的内容,那么你已经有麻烦了,因为它可以用另一个版本替换exe,或者格式化磁盘。

你猜对了:如果恶意软件可以更改磁盘上文件的内容,那么你已经有麻烦了,与更改配置文件不同,它可以用另一个版本替换exe或格式化磁盘。

我喜欢这个想法,但是恶意软件不能用它想要启动的exe文件的哈希替换配置文件中的哈希吗?应该是一个非常了解您的应用程序的恶意软件。我说,是针对你的。这是否可能取决于您的执行环境。是的,我正在考虑一些特定于应用程序的问题。这是一款消费者应用程序,所以它可能会很受欢迎(或者只是不为人所知)。我想另一种方法是将salt硬编码到我的程序中,该程序与您的哈希代码一起使用。虽然代码会变得模糊,但如果有人真的尝试过,他们可能会找到salt,但我认为这将大大降低尝试使用我的应用程序作为代理的吸引力。这是个好主意吗?很难说。你在用户机器上保存的所有东西都可能被一个坚定的黑客操纵和破坏。你只能试着给他一个有挑战性的任务,但你永远不会安全。我不希望100%安全,但只是想确保这需要一点努力。我想我会使用salt+hash方法。谢谢,我很喜欢这个想法,但是恶意软件难道不能用它想要启动的exe文件的散列替换配置文件中的散列吗?应该是一个非常了解你的应用程序的恶意软件。我说,是针对你的。这是否可能取决于您的执行环境。是的,我正在考虑一些特定于应用程序的问题。这是一款消费者应用程序,所以它可能会很受欢迎(或者只是不为人所知)。我想另一种方法是将salt硬编码到我的程序中,该程序与您的哈希代码一起使用。虽然代码会变得模糊,但如果有人真的尝试过,他们可能会找到salt,但我认为这将大大降低尝试使用我的应用程序作为代理的吸引力。这是个好主意吗?很难说。你在用户机器上保存的所有东西都可能被一个坚定的黑客操纵和破坏。你只能试着给他一个有挑战性的任务,但你永远不会安全。我不希望100%安全,但只是想确保这需要一点努力。我想我会使用salt+hash方法。谢谢