我应该担心我的软件被反编译吗?
本文关键字:编译 担心 我的 软件 我应该 | 更新日期: 2023-09-27 18:18:02
我试图创建一个软件,允许用户登录和流一个字节[]的dll用于注入。例如
public static byte[] getDLL()
{
using (WebClient wc = new WebClient())
{
Uri url = new Uri("http://mysite/dll.dll");
return wc.DownloadData(url);
}
}
我成功地在c#中使用visual studio制作了这个。然而,你可以很容易地反编译程序,并使它创建dll在您的计算机上的特定位置,因此泄漏它。我几乎没有办法阻止它。
我是否会更好地使用一种更难反编译的语言,比如c++或C,或者我只是会遇到同样的问题,无论我使用什么语言?这真的值得吗?
你不能阻止任何东西的反编译,无论是c#还是c++或其他任何东西。
与eg相比,像c++这样的语言需要更多的手工工作。c#和混淆器会使理解代码变得更加困难,但这一切只会减慢做代码的人的速度,而不是阻止它。
(像dll和加密这样的东西对保护代码没有任何帮助)
如果程序的某些用户可以看到完整的代码是一个问题,那么你做错了什么。任何秘密,如密码等,都不属于用户获取的文件,而是属于您控制的某些服务器,并且只能通过网络连接等对用户进行访问。
我不太清楚你问题的第一段。但我有个主意给你。
如果外人不能使用生成的代码劫持您的程序集,那么简单地反编译就不是问题。
据我所知,有很多工具可以"合理地反编译"或浏览. net程序集内容。如果你使用c++或C,有反编译器,由它们生成的源代码不准确,需要大量的手工工作。
其次,如果您使用的是C或c++等本地语言,那么这些语言有很多漏洞。你必须使用所有的好方法来避免注射问题。https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=637
有一些工具可以避免反编译。你可以谷歌Obfuscator
。一些著名的是Dotfuscator, Secure Team。
你还可以考虑项目架构的变化。例如在主EXE中包含DLL代码等…
还可以使用密钥生成机制来验证DLL。加载DLL exe后,调用DLL中的公共函数,得到one time key
并验证。