我通常不会费心去混淆Web应用程序DLL,但现在我必须与可能存在利益冲突的人共享一些服务器空间,并且可能会试图窃取交易并对其进行反编译。我知道这不是一个理想的解决方案,但是嘿。
所以我使用VS 2005,一个Web部署项目(编译成单个DLL)和Dotfuscator社区版。当我混淆DLL时,Web应用程序中断了,我得到了一些消息,如
Could not load type 'Browse' from assembly MyAssembly
所以我四处搜索,发现如果我禁用重命名,那么应该修复它。它做的。但现在当我使用.Net反射器查看DLL时,我可以再次看到所有内容。所以这似乎毫无意义。
有没有办法让它发挥作用? 有没有更好的方法来保护我的DLL免受我必须共享服务器的人的影响?
更新:
我发现了我的问题。所有的类名都改变了,但现在我的所有
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="mycode.aspx.cs" Inherits="mycode" %>
不正确,因为mycode不再存在。它现在是某种东西。是否有任何工具也会更改Codefile和Inherits标签的名称?
答案 0 :(得分:1)
你接近解决方案。 在您的情况下,我不知道在哪个上下文中使用了“浏览”,但是您是否将其作为字符串引用到某个地方?
当你以某种方式使用它时,有些东西根本无法混淆。
例如,当您拥有绑定到控件的自定义对象时。您指定为值成员的显示成员的那些属性不能被混淆。 这是因为属性被定义为字符串。所以在设计时控件和实际属性之间没有连接,但在运行时有。 我不知道如何更好地解释它;但是这里有一些代码:
// custom object
Public Class MyObject
{
string Test() { get; set; }
}
// here the object is bound to a combobox
MyCombo.ValueMember = "Test"; // The Test property cannot be obfuscated because of this 'indirect' reference.
MyCombo.DisplayMember = "Test";
MyCombo.DataSource = lstListOfMyObjects;
希望它可以解决您的问题。如果没有,请告诉我。
答案 1 :(得分:0)
我从未使用过Dotfuscator社区版,但试着看看你是否只能重命名私有类型变量。这应该让人们更难以看到。 IMO大多数混淆器都存在问题,当您发现错误时,他们希望您发送代码以便他们解决问题。我发现了大多数商业版本的问题,但也许他们在过去几年里变得更好......
答案 2 :(得分:0)
对于asp.net,我不知道快速出路。我发现最快的方法是Secure Team's代码保护功能。它离开了界面但加密了所有的il并且让某人很难逆转它。
Asp.net很棘手,因为一旦你开始改变它变得易碎的东西的名字,并且需要进行另一轮测试以确保一切都加载而没有任何破坏,所以使用所有动态解析和反射。
答案 3 :(得分:0)
我们需要这样的东西并尝试bitHelmet。它为某些已知由框架按名称访问的对象提供预定义的排除,例如Web.UI.Page Descendants。它与网络应用程序完美配合。