我有用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
实际上,我有两个问题:
答案 0 :(得分:1)
我不确定我的健康状况是否合适,但我会尽力而为。
您可以使用strong-name
工具sn
您的程序集。
这是一个简短的教程:
http://sharpertutorials.com/creating-strong-named-assemblies/ enter link description here
然后,您可以将创建的snk
文件添加到解决方案中的项目中。作为一个不同的选项,而不是在
[assembly: AssemblyKeyFile("c:\\mykey.sn")]
属性(就像在文章中说的那样),您甚至可以在选项卡签名 =>下的每个项目的属性中更轻松地定义它。 签署程序集并在那里输入 snk 文件的路径。
强化命名程序集后,您可以对其密码执行一些检查:
答案 1 :(得分:0)
我认为最后你想用SHA或其他加密哈希散列完整的exe并使用一些加密算法(可以是你自己签名的对称,我猜)用salt值来加密这个哈希值。 然后将文件内容与加密的哈希值和salt-value一起打包到另一个文件中,或者只在除exe之外的其他文件中添加hash + salt。
再次运行时:获取exe(或组合文件)的字节哈希值,并比较哈希是否与decrpyted哈希相同。
如果是,你可以运行该程序,如果没有一些恶作剧或一些字节被翻转;)