C# 对c中的任何exe进行签名或设置密码#

C# 对c中的任何exe进行签名或设置密码#,c#,sign,C#,Sign,我有用C#编写的可执行文件。我想在我的windows服务上尝试这种情况。通常,我们使用以下代码在程序中启动可执行文件: Process process = new Process(); process.StartInfo.FileName = applicationpathandname.exe; process.Start(); 我想在启动可执行文件之前比较它的签名或密码。如果签名或密码不匹配,则应退出Windows服务中的主程序。所以我的伪代码是这样的: */load exe */co

我有用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
实际上,我有两个问题:

  • 我可以签名或密码保护任何可执行文件或程序集吗
  • 我可以在我的另一个C中访问该符号或密码可执行文件吗# 节目

  • 我不确定你的问题是否正确,但我会尽力的

    您可以使用
    sn
    工具
    strong name
    您的程序集。 以下是一个简短的教程:

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

    [assembly: AssemblyKeyFile("c:\\mykey.sn")]
    
    属性(如本文所述),您甚至可以在每个项目的属性中的选项卡Signing=>Signing the assembly下更轻松地定义它,并在那里输入snk文件的路径

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


    我认为最终您希望使用SHA或其他加密哈希对完整的exe进行哈希,并使用一些加密算法(我想可以像您自己签名一样对称)和salt值来加密此哈希。 然后将文件内容连同加密哈希和salt值一起打包到另一个文件中,或者仅将hash+salt添加到exe之外的其他文件中

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


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

    是否要加密exe?当然可以这样做(在调用前对exe端进行加密和解密),但为什么要这样做?这是你的服务器为什么要保护你的前任不受你自己的服务的影响?MSFT有signtool来执行实际的代码签名,并且可以自动执行。验证签名是否有效是由操作系统在应用程序启动时完成的哦。。。我想我明白了-你只想启动你可以确定的exe-比如XBox、WinPhone等上的情况。程序需要由Microsoft签名才能在设备上运行-对吗?正如你所说的CKoenig,我想启动可以确切地确定签名的exe,首先我在解决方案中添加了snk文件,但我看不出snk文件包含密码。谢谢你的回答,但这种方式对我来说非常昂贵,因为当我有更多(例如10个或更多)可执行文件时,这种解决方案会增加很多密钥的权重,因此这种方式绑定以保留公钥。你不需要为每个组件都使用新密钥!您最好只创建一个,以便始终对它们进行签名,以验证是您创建了它们。或者,如果要区分它们,可以为每个应用程序创建一个。CKoenig;这是我想要的最接近的方式。但我对此有疑问,因为如果加载成本不高,我的可执行文件是否可以具有相同的哈希值,因为我必须以这种方式保留可执行文件的哈希值。否如果对其进行加密,则可以将其保存在可执行文件旁边(或将其与exes字节一起写入新文件)-你只需要在跑步前检查一下