如何保护已嵌入的嵌入式资源?

时间:2018-12-22 23:32:23

标签: c#

因此,我正在一个项目中,我需要构建一个登录应用程序以授予对嵌入式可执行资源的访问权限。我一直在搜索,但没有找到一种方法来做到这一点。从根本上讲,我不能不提取就执行。因此,对于我来说,必须有一种对可执行文件加锁的方法,例如密码,这样,只有我的程序才能访问它。我没有可执行文件的源代码。这可能吗?谢谢

1 个答案:

答案 0 :(得分:1)

由于另一个应用程序是.net应用程序(您在注释中使用Assembly.LoadFile时未表示执行),您可以将exe作为字节数组加载到AppDomain中,然后运行内存中的程序集。

static void Main(string[] args)
{
    byte[] data = SomeFunctionThatRetrunsTheBytesOfTheExeResource()

    var assembly = Assembly.Load(data);
    assembly.EntryPoint.Invoke(null, null);
}

这将启动您作为嵌入式资源进行的应用程序。请注意,Invoke(null, null)函数将阻塞,直到其他程序从其主方法返回为止。

这将使您可以在不存在该exe的情况下运行该exe,因为它是驱动器上自己的文件。

注意:这将使新应用程序与您的应用程序共享相同的内存空间,因此它可以执行诸如访问静态变量和类之类的操作。您也许可以创建一个新的AppDomain并将其加载到那里(但是当我尝试将其编写时,我无法使其在第二个AppDomain中工作)。

第二个注意事项:如果不通过可混淆资源的代码混淆器运行应用程序,则可以使用任何免费的.net反编译器轻松地从程序中提取exe。