Encryption C+的加密+/CLI/clr DLL和Assembly.Load()

Encryption C+的加密+/CLI/clr DLL和Assembly.Load(),encryption,assemblies,c++-cli,load,mixed,Encryption,Assemblies,C++ Cli,Load,Mixed,伙计们。我正在为我所属的一个在线社区开发一个客户端软件。为了让我编写一个客户端,所有者和网站管理员要求对我的代码进行加密(而不仅仅是模糊处理)。我的大部分项目是用VB.NET(F3.5)编写的,出于性能原因,其中一些项目通过C++/CLI使用SQLite和libcrypt(因此我不能使用/clr:safe)。换句话说,如果要使用/clr:safe,那么编写C++/CLI代码是毫无意义的(我只需要用VB编写所有代码,这要简单得多) 如果这只是VB项目,我只需编写一个C++加载器,将代码从存储器解密

伙计们。我正在为我所属的一个在线社区开发一个客户端软件。为了让我编写一个客户端,所有者和网站管理员要求对我的代码进行加密(而不仅仅是模糊处理)。我的大部分项目是用VB.NET(F3.5)编写的,出于性能原因,其中一些项目通过C++/CLI使用SQLite和libcrypt(因此我不能使用/clr:safe)。换句话说,如果要使用/clr:safe,那么编写C++/CLI代码是毫无意义的(我只需要用VB编写所有代码,这要简单得多)

如果这只是VB项目,我只需编写一个C++加载器,将代码从存储器解密成内存,然后使用Stuto.Load()来通过一些公共方法(例如,主窗体)运行它。然而,一些令人费解的策略阻止我使用未经验证的C++/CLI代码执行此操作。我不知所措,因为我可以使用任何“不安全”的DLL而不受限制地使用正常的DLL加载机制,但由于某些原因,我无法使用Assembly.Load()来实现这一点。我不明白为什么这应该更安全(考虑到另一种选择是可用的)。Caspol.exe没有帮助,即使有帮助,我也不能要求社区中的每个人关闭他们机器中的访问安全。直接从内存加载EXE或DLL似乎不可行(使用常规DLL但不使用.NET DLL)

因此,我提出以下问题:

  • 你们能想出我可以用来加密C++/CLI DLL的MISL部分的任何方法吗?(我认为该代码与常规x86机器代码混合在一起)

  • 是否有任何方法可以从字节加载未经验证的.NET DLL,就像我尝试使用Assembly.Load那样

或者,由于CreateProcess()和LoadLibrary()只采用路径,我想我可以编写一个临时EXE映像并从存储器中运行它。但我需要用户无法访问该图像,因此将其写入磁盘将是愚蠢的;它应该是一些易变的东西,比如私有ramdisk或其他东西。想到什么了吗?(Windows 2000及更高版本)

非常感谢


Guille

您可以使用方法从流中加载assenbly。有关详细信息,请参阅

您可以使用方法从流中加载assenbly。有关详细信息,请参阅

Assembly.Load(字节[…])明确禁止无法验证(混合模式)的程序集。您可以在上检查问题。

Assembly.Load(字节[…])明确禁止无法验证(混合模式)的程序集。您可以在上查看此问题。

注意:我目前正在研究此代码,这可能是解决方法:AppPacker也有相同的问题。这里没有运气。注意:我目前正在调查这段代码,这可能是解决方法:AppPacker也有同样的问题。这里运气不好。不幸的是,我也不能用这个方法摆脱“无法验证的代码策略检查失败”异常。尽管我不能像前面所描述的那样使用代码,因为使用args.Name找不到我的资源;我只能使用[namespace].[filename]来查找资源。也许我把它埋错了?i、 e.:'This nothing:Dim s As Stream=a1.GetManifestResourceStream(args.Name)'这给了我一个资源,但抛出了不需要的异常:Dim s As Stream=a1.GetManifestResourceStream(“MyLoader.MyLibrary.dll”)您并没有嵌入它“错误”,只是不同而已。从你的帖子听起来,你有多个问题。我不确定验证部分,但我确实想提供一个如何从字节流加载程序集的想法。我明白了。我的主要问题是如何加密我的混合代码程序集,并将其加载到可执行文件中,而不将其解密到磁盘中。顺便问一下,你有什么不同的意思?我觉得你给我指明了正确的方向,因为Cellbi最新版本的AppPacker确实加载了我的代码,尽管我的防病毒软件抱怨“可能有病毒”。Cellbi的应用程序似乎也使用了AssemblyResolve方法,但使用了不同的方法,然后成功了。我找不到最新AppPacker版本的源代码。我获取源代码的旧版本因异常问题而失败。将资源嵌入exe时,可以为其指定名称。你用了一个不同的名字。与我使用的名称不同。我自己更正:AppPacker也会因策略检查异常而失败:(遗憾的是,我也无法使用此方法摆脱“无法验证的代码未通过策略检查”异常。尽管我无法按照所述使用代码,因为使用args.Name找不到我的资源,但我只能使用[namespace].[filename]查找资源。可能我嵌入它的方式不对?例如:“这不会返回任何内容:Dim s As Stream=a1.GetManifestResourceStream(args.Name)”这会给我一个资源,但会引发不需要的异常:Dim s As Stream=a1.GetManifestResourceStream(“MyLoader.MyLibrary.dll”)您没有嵌入它“错误”,完全不同。从你的帖子中听起来,你有多个问题。我不确定验证部分,但我确实想就如何从字节流加载程序集提出一个想法。我明白了。我的主要问题是如何加密混合代码程序集,并将其加载到可执行文件中,而不将其解密到磁盘中。B顺便问一下,你有什么不同的意思?我觉得你给我指明了正确的方向,因为Cellbi的AppPacker的最新版本确实加载了我的代码,尽管我的防病毒软件抱怨“可能有病毒”。Cellbi的应用程序似乎也使用了AssemblyResolve方法,但使用了不同的方法,然后成功了。我找不到最新AppPacker版本的源代码。我获取源代码的旧版本由于异常问题而失败。当您将资源嵌入exe时,可以为其指定名称。您可以使用其他名称。与我使用的名称不同。我更正自己:AppPacker也会因策略检查异常而失败。:(是的,我现在知道了。它是