首页 > 解决方案 > 如何保护提取的嵌入式资源?

问题描述

所以我正在做一个项目,我需要构建一个登录应用程序来授予对嵌入式可执行资源的访问权限。我一直在寻找,并没有找到一种方法来做到这一点。从多么糟糕的情况来看,我不能不提取它就执行。所以我必须有一种方法来锁定可执行文件,比如密码,这样,只有我的程序才能访问它。我没有可执行文件的源代码。这可能吗?谢谢

标签: c#

解决方案


因为另一个应用程序是一个 .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)函数将阻塞,直到其他程序从它的 main 方法返回。

这将允许您运行该 exe,而不会将其作为驱动器上的自己的文件存在。

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

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


推荐阅读