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

时间:2015-10-17 05:20:40

标签: c# c++ command-line-interface decompiler

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

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更难反编译的语言,或者我会遇到与我使用的语言相同的问题吗?这是非常值得的。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:-2)

我对你问题的第一段不太清楚。但这里有一些想法。

如果外人不能使用生成的代码来劫持你的程序集,那么简单的反编译不是问题。

据我了解,有很多工具可以“合理地解编译”或浏览.NET程序集内容。 如果您使用C ++或C,则会有反编译器,它们生成的源代码不准确,需要大量手动工作。

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

有避免反编译的工具。你可以谷歌Obfuscator。一些着名的是Dotfuscator,安全团队。

您也可以考虑项目架构的变化。例如将DLL代码包含在主EXE等中......

您还可以使用密钥生成机制来验证DLL。刚加载DLL exe之后,调用DLL中的common函数并获取one time key并验证。