在c#中签名或密码任何exe

本文关键字:密码 任何 exe | 更新日期: 2023-09-27 18:06:51

我有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#中到达那个符号或密码可执行文件吗项目?

在c#中签名或密码任何exe

我不确定我是否回答对了你的问题,但我会尽力的。

您可以使用sn工具对组件进行strong-name。这里有一个简短的教程:http://sharpertutorials.com/creating-strong-named-assemblies/enter链接说明在这里

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

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

属性(如本文所述),您甚至可以更容易地在每个项目的属性中Signing => 对程序集进行签名,并在那里输入snk文件的路径。

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

检查程序集是否存在强名称

我认为最后你想用SHA或另一种加密哈希来散列完整的exe,并使用一些加密算法(我猜当你自己签名时可以是对称的)用盐值来加密这个哈希。然后将文件内容与加密的散列和盐值一起打包到另一个文件中,或者在exe.

之外的其他文件中仅添加散列+盐。

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

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