2010-03-31 51 views
1

我通常不会打扰混淆Web应用程序DLL,但现在我必须与某些可能有利益冲突并可能试图窃取该交易的人共享某个服务器空间并反编译它。不是我知道的理想解决方案,但嘿。混淆ASP.Net 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标签的名称?

+1

为什么你不得不与可以从窃取你的代码中受益的人共享硬件? – hunter 2010-03-31 18:21:45

+0

长话短说。也许不是最好的SO:D – uriDium 2010-03-31 19:00:02

回答

1

您已接近解决方案。 在你的情况下,我不知道在哪个上下文中使用了'Browse',但是你是否将它作为一个字符串引用?

当您以某种方式使用它时,有些东西根本无法混淆。

例如,当您将自定义对象绑定到控件时。您已指定为值成员的显示成员的属性不能被混淆。 这是因为属性被定义为一个字符串。所以在设计时,控制和实际属性之间没有任何联系,但是在运行时有。 我不知道如何更好地解释它;但这里有一些代码:

// 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; 

希望它能解决您的问题。如果没有,请告诉我。

+0

我认为浏览类型是.Net类型,但它不是。这是我的哈哈。它属于母版页,因为我使用了母版页。然后我试图排除我的母版页类型,但是现在当我添加排除项时,我无法构建dotfuscator。 – uriDium 2010-03-31 18:36:05

+0

我认为你必须在排除混淆的部分的情况下稍微玩一下。 – Rhapsody 2010-04-01 05:34:41

0

我从未使用Dotfuscator社区版,但尝试查看是否只能重命名私有类型变量。这应该使它更难以看到。海事组织大多数混淆器都有问题,当你发现一个错误时,他们希望你发送你的代码,以便他们能够解决这个问题。我发现大多数商业版本的问题,但也许他们在过去几年里变得更好...

0

对于asp.net我不知道一个快速的出路。我发现最快的方法是Secure Team's代码保护功能。它离开界面,但加密所有的il,并使人难以扭转它。

Asp.net是棘手的,因为所有的动态解析和反射使用一旦你开始改变它变得脆弱的东西的名称,并需要整个其他轮测试,以确保一切都加载和没有中断。

0

我们需要类似的东西,并尝试bitHelmet。它为某些已知可由框架按名称访问的对象提供了预定义的排除,例如Web.UI.Page Descendants。它完美适用于网络应用程序。