我应该担心我的软件被反编译吗?

Should I worry about my software being decompiled?

我正在尝试创建一个软件,允许用户登录并流式传输要用于注入的 dll 的一个字节 []。例如

public static byte[] getDLL()
{
    using (WebClient wc = new WebClient())
    {
        Uri url = new Uri("http://mysite/dll.dll");
        return wc.DownloadData(url);
    }
}

我使用 visual studio 在 C# 中成功做到了这一点。但是,您可以轻松地反编译程序并使其在计算机上的特定位置创建 dll,从而泄漏它。我几乎无法阻止这种情况。

我会更好地使用一种更难反编译的语言,例如 C++ 或 C,还是我只是 运行 遇到同样的问题,无论我使用什么语言?这真的值得付出努力吗?

我不是很清楚你的第一段question.But这里有一些想法给你。

只要反编译不是问题,如果外人无法使用生成的代码来劫持您的程序集。

据我了解,有很多工具可以 "reasonable de-compile" 或浏览 .NET 程序集内容。 如果你使用C++或C,有反编译器,它们生成的源代码不准确,需要大量手动工作。

其次,如果您使用的是 C 或 C++ 等本地语言,则这些语言存在很多漏洞。您必须使用所有良好实践来避免注入问题。 https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=637

有避免反编译的工具。你可以 google Obfuscator。一些著名的是 Dotfuscator、Secure Team。

还有你可以考虑一下项目架构的变化。例如在主 EXE 中包含 DLL 代码等...

您也可以使用密钥生成机制来验证 DLL。加载DLL后exe调用DLL中的常用函数得到one time key并验证.

你无法阻止反编译任何东西,无论是 C# 还是 C++ 或其他任何东西。
与 eg 相比,像 C++ 这样的语言需要更多的手动工作。 C# 和混淆器会使代码更难理解,但一切都只会减慢执行代码的速度,而不是阻止它。
(DLL 和加密之类的东西对保护代码完全没有帮助)

如果程序的某些用户可以看到完整的代码是个问题,那么你做错了什么。密码等任何秘密都不属于用户获得的文件,而是在您控制的某些服务器上,用户只能通过网络连接等访问。