签署或密码c#中的任何exe

时间:2011-08-25 14:50:40

标签: c# sign

我有用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#中找到该可执行标志或密码 程序?

2 个答案:

答案 0 :(得分:1)

我不确定我的健康状况是否合适,但我会尽力而为。

您可以使用strong-name工具sn您的程序集。 这是一个简短的教程: http://sharpertutorials.com/creating-strong-named-assemblies/ enter link description here

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

中手动添加
[assembly: AssemblyKeyFile("c:\\mykey.sn")]

属性(就像在文章中说的那样),您甚至可以在选项卡签名 =>下的每个项目的属性中更轻松地定义它。 签署程序集并在那里输入 snk 文件的路径。

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

Checking an assembly for a strong name

答案 1 :(得分:0)

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

再次运行时:获取exe(或组合文件)的字节哈希值,并比较哈希是否与decrpyted哈希相同。

如果是,你可以运行该程序,如果没有一些恶作剧或一些字节被翻转;)