.NET代码保护很难吗?

agai4031578 2007-01-20 08:54:30
IL最终编译为机器代码,那么,为什么不允许程序员自备具体环境(机器+操作系统),将IL代码编译成机器码,再将机器码交付给用户?程序照样是可移植的,只是需要发布方多编译几次得到针对性的版本而已。

然而为什么不允许这么做,是很难做到,还是微软不愿意做到?微软既然把.NET看得这么重要,为何留一个这么明显的缺陷呢?

怎样才能既使用.NET类库,又能实现代码保护?想了N久也无头绪,请高人指点迷津。
...全文
1737 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
viena 2007-01-22
  • 打赏
  • 举报
回复
to 楼主:

//因为用户是很懒的,用户是不懂电脑的
那你还担心用户去研究你的代码?况且你的代码也不没有好到值得别人研究的地步

之所以用.NET,是因为它开发快速、方便,能很快地实现不同企业及用户的多边的需求

如果你要做通用软件,完全没有必要用.NET,你可以用C++,甚至用C+SDK来精雕细刻,再加上好的创意与设计,这样的软件才能与windows的代码、可口可乐的配方相提并论

顺便说一下,无论VC的MFC还是.NET,微软自己都是不用的~
cityyokel 2007-01-22
  • 打赏
  • 举报
回复
一般使用混淆器。
egxsun 2007-01-22
  • 打赏
  • 举报
回复
to:viena
顺便说一下,无论VC的MFC还是.NET,微软自己都是不用的~
--------------------------------------------------
微软有些网站就是用.NET做的呀
kissknife 2007-01-21
  • 打赏
  • 举报
回复
对于LZ最后对viena的回答不敢苟同..

就我参与和了解过的,对于业务逻辑,肯定是要由用户提供的,你不可能靠着用户提供的一个软件名称就开始开发,LZ可以想想你参与过的,是不是这样?...

另外,对于LZ以可口可乐之类的比喻回答viena,基本属于文不对题..
greennetboy 2007-01-21
  • 打赏
  • 举报
回复
方向不一样,如果你的源代码很重要,推荐你用C++,或者b/s模式
agai4031578 2007-01-21
  • 打赏
  • 举报
回复
恰恰相反,我认为程序员一定要对业务逻辑有深刻的理解,不但要懂编程,同是也是相关行业的绝对专家。指望用户提供“业务逻辑”是不行的,因为用户是很懒的,用户是不懂电脑的,用户的大脑不是结构化的。不把业务逻辑结合在自己的算法中,就算勉强做出一个东西,也是不好用的,而且过程艰辛。

windows的代码是公开的吗。可口可乐的配方是公开的吗?就算是一些服务性行业,比如事务所,它们的文档模板都是不公开的,再例如“绝味鸭脖”之类,他们的配方,佐料,都是不给自己分店,由总店发下来的。软件行业什么时候变得独立于社会各部门,软件产品成了没有技术含量的东西?我难以理解。

当然,开源有开源的好处,但并不是所有的情况都适合开源。

老实说,但凡说一样东西没有技术含量,往往是对那样东西没有深刻的体会。不单是软件,任何行业,工业、农业、第三产业都是如此。
htqx 2007-01-21
  • 打赏
  • 举报
回复

什么心态有什么样的成就,中国是保密大国,现在的下场值得唏嘘.'
wubaowang 2007-01-21
  • 打赏
  • 举报
回复

关注...
lookcode 2007-01-21
  • 打赏
  • 举报
回复
在贴一些,可以去VS里找这个工具看看,我都是从帮助里贴过来的.
--------------
为什么需要模糊处理
针对 .NET 编写的程序很容易进行反向工程处理。这并不是 .NET 在设计上的一个缺陷,而只是由于这个现代化的中间编译语言的固有性质所致。.NET 使用表述性文件语法提供可执行代码或 MSIL(Microsoft 中间语言)代码。这些中间文件比二进制机器代码高级得多,其中充满了一眼就可看出并且最终可理解的标识符和算法。毕竟,既要做到易于理解、灵活且可扩展,同时又要隐藏关键细节,这显然很难实现。

所以,任何人只要有一个可免费得到的 .NET 反编译器就可以轻易对代码进行反向工程处理。一时间,所有人都有了更多的机会可以看到软件许可代码、复制保护机制以及专有的业务逻辑,无论这样做是合法还是非法。任何人都可出于任何理由来研究软件细节。他们能够搜索安全缺陷并加以利用,窃取独有的创意并破解程序等等。

但是这不应该成为一种风险,或者成为一种发展障碍。对 .NET 平台上的知识产权问题心存疑虑的组织需要了解有一种解决方案可帮助他们解决反向工程这个难题。模糊处理这种技术能够对程序集中的符号进行无迹可寻的重命名,并提供很多其他手段,从而阻止进行反编译。正确地应用模糊处理技术,可使应用程序的抗反编译的保护能力以指数级增加,而应用程序不会受到任何影响。

模糊处理的目的
模糊处理 (obfuscation) 意在引起混淆。随着混淆的加重,人脑进行多方面智力思维的能力逐渐降低。请注意,这种规则并不改变前向(可执行的)逻辑,仅仅是将其表示为不可理解的形式。当一个编写出色的模糊处理工具对可读的程序指令进行处理之后,可能产生的一个副作用是输出结果不仅使人看了不知所云,而且它还会使反编译器无从下手。尽管保留了前向(可执行的)逻辑,但反向语义却呈现出非确定性。其结果是,通过反向工程将指令翻译为“编程语言”(如 C# 或 VB)的任何尝试都很可能失败,因为翻译结果含混不清。深度模糊处理能产生无数种可能的反编译结果,其中的一些如果进行重新编译,则可能会产生错误的逻辑。反编译器只是一种计算机器,无法知道哪种可能的结果经过重新编译后在语义上是有效的。人类编写和使用反编译器是为了自动执行人类难以胜任的反编译算法。所以,可以这样说,如果连反编译器都对模糊处理程序奈何不得,能力更逊一筹的人类自然就更加束手无策了。

原始的模糊处理程序实质上是将在代码中找到的标识符重命名为不可读的内容。它们可能使用哈希技术,或者对字符集进行算术偏移,将字符变为不可读字符或不可输出字符。这些技术虽然表面上很有效,可是很显然,它们是可逆的技术,因此很难起到保护作用。PreEmptive 的模糊处理工具远远超过了这种原始的重命名方法,它使用很多其他颇具独创性的“引起混

水印处理
水印处理 (Watermarking)是一种可以跟踪未经授权的软件副本直至其源头的方法。通过 PreMark™,Dotfuscator Professional Edition 3.0 版增加了对 .NET 程序集进行水印处理的支持。水印处理可用来将版权信息或唯一标识号之类的数据隐蔽地嵌入 .NET 应用程序,而又不会影响其在运行时的行为。

lookcode 2007-01-21
  • 打赏
  • 举报
回复
Dotfuscator Community Edition 3.0
.NET 应用程序对于确保公司收益至关重要。因此,保护这些应用程序迫在眉睫。为此,未将应用程序与源代码捆绑在一起的任何 .NET 程序都应使用 Dotfuscator 加以保护。忽视应用程序保护会增加您的组织将面临的各种风险,包括知识产权失窃、破解和盗版等。

PreEmptive Solutions 的 Dotfuscator 是领先的 .NET 模糊处理程序、压缩程序和水印处理程序,它有助于保护程序,使之免遭反向工程处理,同时使程序更小巧且更高效。Dotfuscator Professional Edition 旨在阻止各种反编译器生成有用输出,即便是那些最好的反编译器。它提供了全面、高效的 .NET 代码开发和部署过程。

---------------
在VS ->工具 ->Dotfuscator Community Edition
把你写好的代码EXE的DLL的都可以,用这个工具进行模糊处理,就可以很好的保护你的代码免受破解.
这个工具是微软购买的第三方工具,用起来还不错,在VS2002里,就已经集成在VS里了,也有其他第三方非微软提供的.NET代码保护工具,可以去找找.
.NET和JAVA一样,直接编译的代码,经过反编译,可以很容易的看清楚代码,都要经过模糊处理,就可以很好的提供代码保护,和C++,VC类的代码一样,都会很难看懂.
有兴趣你也可以自己搞代码的模糊处理,这种机制,提供了这种可能性.

-------------
Dotfuscator 的益处
Dotfuscator 是一种用于 .NET 应用程序的开发后重编译系统。它分析应用程序并使它们更小巧、更快捷且更难于进行反向工程。简而言之,Dotfuscator 使应用程序变得“更好”。

Dotfuscator 极大地增强了代码安全性
Dotfuscator 采用最新的技术以保护 .NET 应用程序 - 即保护应用程序内所包含的重要知识产权。

Dotfuscator 极大地减小了 .NET 程序的体积
Dotfuscator Professional Edition 分析应用程序并精确计算出您真正需要使用的应用程序部分。据此,它可以剥离出这些部分,使您得到尽可能小的可执行文件。

Dotfuscator 提高运行时性能
通过移除不需要的程序元素并将标识符重命名为短小的名称,Dotfuscator 可切实提高程序运行速度。

此外,Dotfuscator 还提供了很多其他的益处 (Benefits),如将很多程序集链接到一个程序集中,以及使用隐藏信息为应用程序添加水印。




shrinerain 2007-01-21
  • 打赏
  • 举报
回复
你可以混淆...
还可以加壳...

li45214521 2007-01-21
  • 打赏
  • 举报
回复
再告诉你一下
机器码 是在不同的CPU 上是不一样的
C++ 只能用大家都有的那一部分
而IL 可以在不同的机器上生成不同的机器码
建议看看 <<高级.net程序设计>>
li45214521 2007-01-21
  • 打赏
  • 举报
回复
vs IDE 有把生成的exe,dll 代码打乱的工具
Dotfuscator Community Edition
或者你用第三方工具
lr21shiji 2007-01-21
  • 打赏
  • 举报
回复
楼上的方法不错
test33 2007-01-21
  • 打赏
  • 举报
回复
加密奥`
HOHO`
agai4031578 2007-01-21
  • 打赏
  • 举报
回复
业务逻辑,肯定是要由用户提供的
我知道这是现实,但是现实不一定是最好的
这就是我认为很多行业软件做得很差的原因

我只是不明白源代码保护怎么成了“无理要求”了,呵呵
viena 2007-01-20
  • 打赏
  • 举报
回复
把“所有的东西”给客户有问题吗?
企业级应用最重要的是业务逻辑(而这恰恰是用户提供的),程序一般都是调用现成的类库,没有多少技术含量,我不认为有什么需要保密的东西;无论是Java还是.NET,都有很多有一定技术含量的开源的框架、类库、控件,你保密自己的那点代码,思想有点狭隘;况且人觉得你的代码很好吗?别人未必认可,未必敢直接用你的,而研究你的代码更费劲,还不如自己写来的爽快~
agai4031578 2007-01-20
  • 打赏
  • 举报
回复
viena,或许就是你在上上楼说的那个原因吧。。唉
agai4031578 2007-01-20
  • 打赏
  • 举报
回复
viena,但是并不是所有的企业级应用都是BS结构吧,有时候还是要把“所有的东西”给客户的,并不都是只给另一部分,另一部分在开发者的服务器上存着。 :)

混用倒是我所知道的方式。但我觉得,作为一个成熟的产品,我认为NET框架应该具有某种能力,如果没有,我难以理解。
viena 2007-01-20
  • 打赏
  • 举报
回复
既然已经编译为IL,再编译为本地代码,已经失去意义了
实际上微软提供了编译本地代码的工具(具体EXE文件名我不记得了),但效果并不好
只是启动快一些而已,性能反而不如IL及时编译~
加载更多回复(9)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧