我希望为我的服务器提供某种保护,以防有人访问服务器计算机并尝试窃取服务器可执行文件。因此,如果黑客无法找到真正的服务器可执行文件,他将转储服务器进程。
保护就像那样:
我将有一个服务器加载器应用程序,服务器本身编译为.net程序集
服务器机器几乎永远不会有这个程序集,我会将它写入CD-R并在加载程序应用程序启动时插入它,它从CD-R读取汇编字节,然后加载并从该程序集创建所需的类,这将导致main服务器应用程序启动
然后我从驱动器中删除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
答案 0 :(得分:2)
这是一个奇怪的问题,你现有的代码几乎没问题。您只需从byte[]
将程序集加载到应用程序域即可。但是,一旦加载它们,字节必须存在于内存中,以便应用程序可以运行。您始终可以从AppDomain中取出程序集byte[]
。您无法从RAM中删除程序集的字节。但是,将byte []加载到内存中并且文件系统上没有实际的.dll确实更安全。有人仍然可以从RAM中获取字节,但这将更加困难和复杂。没有什么是100%安全的,但你肯定会让黑客很难。
如果程序集中的业务逻辑非常敏感而您不希望任何人抓住它,您可以考虑将其放在公司LAN内的机器上,防火墙后面,并且可以访问Internet DMZ中的机器接收来自外界的请求,然后将其请求转发到LAN中的逻辑服务器。这将是黑客必须访问的另外一台机器,并且在局域网内部更难一点(假设有人知道他们正在做什么设置防火墙)。