日期:2014-05-19  浏览次数:20884 次

利用软件水印技术保护.net代码
使用VS.NET的朋友都知道.NET是微软在开发平台上的又一个巨大的飞跃,也是未来软件开发方式的趋势。它编译后的代码是以中间码(MSIL)的形式存放,由于各种语言编译后的代码都是此形式,故可以达到不同语言混合编码的能力,这类似于以前的COM组件。也正由于此特性,我们可以相信有朝一日也可以像JAVA的字节码一样把这种中间码迁移到其他系统平台(UNIX,LINUX)上去,可以实现平台无关性。但是,由于.NET生成的程序集很容易被反编译成中间码,中间码中的元数据中含有大量信息,很容易被阅读,从而修改中间码达到破解软件的目的。

        我现在想做的事情就是:攻击者可以破译我的软件,但是由于我的软件中有一些固有特性是不能被移去的(像胎记一样,比如引用程序集的加载顺序),那么我就可以通过检测软件来证明攻击者所拥有的软件是对我的侵权,从而维护开发者的合法利益。既然是胎记就应该与众不同,不易察觉更好。

        还有如果能在不影响软件的性能的情况下利用软件的固有特性嵌入一些信息那就最好了,这就是软件水印。很明显就像人民币中的水印一样,软件水印也是不容易被被人发现的。

        说了这么多关键就是希望找到.NET(C#语言)程序的独特属性,就是从那个方面入手比较合适,希望各位经常使用和开发.NET程序的同行们多给点建议。

------解决方案--------------------
有点意思,顶起来
------解决方案--------------------
没看明白楼主的意思。如果源代码都被反编了,那么检测软件是不是正版的代码也很容易被替换下去,所以楼主所想是没有意义的。

如果源代码没有被反编,那么软件的md5码本身就是非常好的“水印”,很多软件下载就是用它来“验明正身”的。
------解决方案--------------------
防软件被破解的手段就是混淆,也就是让别人看不明白你写的东西,或者看明白所需的代价非常大
------解决方案--------------------
LZ的想法比较有趣。

如果是为了司法追究的话,起诉别人盗用代码,最好的情况就是能够提供一些代码或者软件的固有特性,否则有专门的机构做代码比较,判断相似度。这些都是最重要的证据。

反过来说,如果要在代码中添加固有特性的话,加几个无伤大雅的Bug是最好的做法。未必能有一套通用的方案,针对特定软件还是可行的。