使程序可以从另一个程序独占执行

时间:2012-08-13 17:51:15

标签: c#

我想为单独的exe创建一个启动程序。我需要在启动器外部无法访问主程序(而不是启动程序)。

6 个答案:

答案 0 :(得分:4)

根本不可能安全地做到这一点。发射器可以做的任何事情,用户也可以这样做。

通过使启动器将加密签名的时间戳传递给单独的程序,您可以使用户更难。但是,用户可以从启动器中提取私钥并手动签署时间戳。

您可以让程序检查其父PID,并确保启动器EXE使用您自己的私钥进行签名,但用户可以修改程序以删除该检查。

您也可以使用启动程序调用的方法将EXE转换为DLL,但用户可以编写自己的EXE并调用该方法。

答案 1 :(得分:1)

一种选择是在运行第二个程序时需要一个参数,尽管这很容易被利用。你没有真正说出这是为了什么,所以它可能已经足够了。

根据您的启动程序执行的操作,您可以检查这些操作是否已完成,如果没有,则退出程序。

如果您需要特别安全,您可以设置一些私钥 - 公钥系统,并加密动态信息(如时间戳)。老实说,我认为这将是更多的工作,而不是它的价值,如果要拆解的任何一个程序,它仍然可以被利用。

答案 2 :(得分:0)

您可能希望将主要功能实现为单独的 DLL 文件,并从启动应用程序调用它。 这是主要功能不完全是一个单独的应用程序,所以它可能不是你想要的,但它是分开的,需要运行另一个应用程序(一个启动器)。

答案 3 :(得分:0)

合适的解决方案取决于您要阻止的确切内容。

如果您的目标是“在任何情况下,熟练的黑客都不会通过A.exe发布B.exe”,这很难实现。

如果您的目标是“我不希望用户意外启动B.exe,因为A.exe是他们应该使用的”,那么有一些选项。例如,将命令行参数从A.exe传递给B.exe,普通用户不知道该传递参数。

答案 4 :(得分:0)

我有两个建议来实现你想要的目标。

  1. 第二个exe需要实际上是一个exe吗?你可以把它变成图书馆电话吗?将该功能作为在启动程序进程下运行的线程调用。

  2. 使用未发布的命令行参数。如果没有提供,则第二个exe终止。这不是完全安全的,但我相信这是现代游戏发射器的工作方式。

  3. 最终,如果没有“通过默默无闻的安全”,我认为没有办法做到这一点

答案 5 :(得分:0)

您可以在启动器中创建一个名为Guid的互斥锁作为名称。然后检查程序中的互斥锁。像其他人所说,这不是很安全,但会阻止大多数人直接启动该计划。