0

我想为我的服务器提供某种保护,以防有人访问服务器并试图窃取服务器可执行文件。因此,如果黑客未能找到真正的服务器可执行文件,他将转储服务器进程。

保护 像这样:
我将有一个服务器加载器应用程序,服务器本身编译为 .net 程序集
服务器机器几乎不会有这个程序集,我会将它写入 CD-R 并在加载程序应用程序启动时插入它,它读取程序集字节从 CD-R,然后从该程序集加载并创建所需的类,这将导致主服务器应用程序启动。
然后我从驱动器中取出 CD-R。

byte[] raw_assembly = File.ReadAllBytes("E:\\server.dll");
Assembly ass = Assembly.Load(raw_assembly);
Type myclass = ass.GetType("Server.Form1");
object o = Activator.CreateInstance(myclass);
Application.Run((Form)o);
raw_assembly.Clear(); //pseudo Clear... no matter how, just delete from memory
4

1 回答 1

2

尽管这是一个奇怪的问题,但您现有的代码几乎没问题。您只需将程序集从byte[]. 但是,一旦它们被加载,这些字节必须存在于内存中,这样应用程序才能运行。您始终可以将程序集byte[]从 AppDomain 中取出。您不能从 RAM 中删除程序集的字节。然而,将 byte[] 加载到内存中并且文件系统上没有实际的 .dll 确实更安全。有人仍然可以从 RAM 中取出字节,但这会更困难、更复杂。没有什么是 100% 安全的,但你当然可以让黑客很难做到。

如果您的程序集中的业务逻辑非常敏感,以至于您不希望任何人掌握它,您可以考虑将它放在公司 LAN 内的一台机器上,在防火墙后面,并在DMZ 接收来自外界的请求,然后将他的请求转发到局域网中的逻辑服务器。这将是黑客必须访问的另外一台机器,并且在 LAN 内要困难一些(假设知道他们在做什么的人设置了防火墙)。

于 2012-06-24T16:39:52.597 回答