是否可以从其进程二进制转储中恢复可执行文件,这有多难?

问题描述 投票:0回答:1

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

像那样保护:
我将有一个服务器加载器应用程序,并将服务器本身编译为 .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
.net protection
1个回答
2
投票

这个问题很奇怪,你现有的代码几乎没问题。您可以从

byte[]
将程序集加载到应用程序域中。然而,一旦它们被加载,这些字节就必须存在于内存中,这样应用程序才能运行。您始终可以从 AppDomain 中取回程序集
byte[]
。您不能从 RAM 中删除程序集的字节。然而,将 byte[] 加载到内存中而不在文件系统上拥有实际的 .dll 确实更安全。有人仍然可以从 RAM 中取出字节,但会更困难、更复杂。没有什么是 100% 安全的,但你当然可以让黑客难以应对。

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

© www.soinside.com 2019 - 2024. All rights reserved.