3

我有用 C# 编写的可执行文件。我想在我的 Windows 服务上尝试这种情况。通常我们使用下面的代码在我们的程序中启动可执行文件:

Process process = new Process(); 
process.StartInfo.FileName = applicationpathandname.exe; 
process.Start();

我想在启动它之前比较我的可执行文件的符号或密码。如果签名或密码不匹配,则应退出 Windows 服务中的主程序。所以我的伪代码是这样的:

*/load exe
*/compare sign or password of my assembly
*/if match start exe 
*/else exit main program

实际上,我有两个问题:

  1. 我可以签名或密码保护任何可执行文件或程序集吗?
  2. 我可以在我的其他 C# 程序中访问该符号或密码可执行文件吗?
4

2 回答 2

1

我不确定我的问题是否正确,但我会尽力而为。

您可以使用该工具进行strong-name装配。sn这是一个简短的教程: http ://sharpertutorials.com/creating-strong-named-assemblies/在此处输入链接描述

然后,您可以将创建的snk文件添加到解决方案中的项目中。作为一个不同的选项,而不是手动添加它

[assembly: AssemblyKeyFile("c:\\mykey.sn")]

属性(就像文章中所说的那样),您甚至可以更轻松地在每个项目的属性中定义它,在选项卡Signing => Sign the assembly并在那里输入您的snk文件的路径。

对程序集进行强命名后,您可以对其密码执行一些检查:

检查程序集的强名称

于 2011-08-25T14:57:14.360 回答
0

我认为最后你想用 SHA 或其他加密散列对完整的 exe 进行散列,并使用一些加密算法(我猜你自己签名时可以是对称的)和盐值来加密这个散列。然后将文件内容与加密散列和盐值一起打包到另一个文件中,或者仅将散列+盐添加到 exe 之外的附加文件中。

在运行时再次相同:获取 exe 的字节(或从组合文件中)对它们进行散列并比较散列是否与解密后的散列相同。

如果是,您可以运行程序,如果不是,则会发生一些恶作剧或某些字节被翻转;)

于 2011-08-25T15:14:17.887 回答