繁体   English   中英

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

[英]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,还是我会遇到同样的问题,无论我使用什么语言? 是否真的值得付出努力。

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

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

我对你问题的第一段不是很清楚。但这里有一些想法供你参考。

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM