我的产品有几个组件:ASP.NET、Windows窗体应用程序和Windows服务.95%左右的代码是用VB编写的.网

出于知识产权的原因,我需要对代码进行模糊处理,到目前为止,我一直在使用dotfuscator的一个版本,现在已经有5年多的历史了.我认为是时候转向新一代工具了.我正在寻找的是一系列需求,当我寻找一个新的混淆器时,我应该考虑这些需求.

到目前为止,我知道我应该寻找什么:

  • Serialization/De-serialization美元.在我当前的解决方案中,我只是告诉工具not模糊任何类数据成员,因为无法加载先前序列化的数据的痛苦实在太大了.
  • Integration with Build Process
  • Working with ASP.NET.在过go ,我发现这是一个问题,因为变化.dll名称(通常每页都有一个)——并非所有工具都能很好地处理这些名称.

推荐答案

回来吧.Net 1.1的模糊处理是必不可少的:反编译代码很容易,你可以从汇编代码到IL代码,再到C#代码,然后用很少的努力重新编译它.

现在,我们来谈谈.NET3.5我一点也不确定.try 反编译一个3.5版本的程序集;你从编译中得到的是一段很长的路.

添加从3.5开始的优化(远好于1.1)和反射处理匿名类型、委托等的方式(重新编译它们是一场噩梦).添加lambda表达式、像linq-语法和var这样的编译器"魔术",以及像yield这样的C#2函数(这会产生名称不可读的新类).您的反编译代码最终与可编译代码相go 甚远.

拥有大量时间的专业团队仍然可以再次对其进行反向工程,但对于任何模糊的代码也是如此.他们从中得到的代码将是不可维护的,并且极有可能是非常有缺陷的.

我建议对程序集进行密钥签名(这意味着如果黑客可以重新编译一个程序集,他们必须重新编译所有程序集),但是我不认为混淆是值得的.

.net相关问答推荐

如何使用AWS Lambda函数制作网络挂钩?

ECS服务无法从Cognito获取配置

无法通过构建目标访问 dotnet 的环境变量

如何确定计时器是否正在运行?

在.NET C#中截断整个单词的字符串

如何从控制台应用程序中的 Task.WaitAll() 获取返回值?

.NET 的 Visual Studio 调试器提示和技巧

为什么我得到 411 Length required 错误?

不同命名空间中的部分类

如何在 C# 4.0 中使任务进入睡眠状态(或延迟)?

为什么需要 XmlNamespaceManager?

如何对无法加载的 VSTO 插件进行故障排除?

我可以在没有两个查询的情况下通过布尔标准将 IEnumerable 一分为二吗?

在 .NET 中填充整数列表

react 式扩展使用的好例子

合并两个(或更多)PDF

在 .Net 中调用 Web 服务时绕过无效的 SSL 证书错误

是 C# 中的 bool 读/写原子

WinForms 中的模型视图演示者

连接字符串而不是使用一堆 TextBlocks