在.net之前,源代码被直接编译为机器码.而在.net环境下,源代码被编译为中间语言(IL),在实际运行的时候,才转换为二进制本地码执行.而中间语言(IL)是很容易被反编译的..NET自己就带着一个查看IL的工具ILDASM.
VS2005自带一个保护源代码的工具DotFuscator,是社区版的,只有基本的混淆命名的功能.专业版功能很多,可以混淆流程,加密字符串,加入水印,程序签名等,可惜太贵~..~(好像一个授权要30k),只好找破解版的来学习一下.
社区版的DotFuscator使用很简单,从VS2005集成开发环境-->工具-->DotFuscator Community Edition,打开后不用注册可以直接使用.在输入选项卡中导入一个dll或者exe文件,在生成选项卡中输入输出目录,直接点击生成即可.想复杂也不成,因为其他的功能基本都是灰的,要专业版才行.
专业版的可选项多一些,除了可以对名称进行重命名,还可以混淆流,打乱程序原有的结构,但保持逻辑不变.混淆后的代码用Reflector查看,会发现都是一堆goto语句,很难理解.还可以加密字符串,一些敏感信息,例如数据库连接字符串等,如果不加密,很容易被找到并非法利用.也可以在代码中加入水印,如果公司信息,版权标志等.加入水印不会影响程序原有代码的执行.DotFuscator提供一个工具用来查看程序集中的水印premark.exe,可以在DotFuscator的安装目录下找到.也可以对水印进行加密.DotFuscator还可以对程序集进行强名称签名,防止程序集被非法篡改.
在使用的过程中,有几个疑惑一直没有解决,欢迎大家交流.
1.如果dll中包含资源文件,那么进行重命名混淆后,用反射的方式无法访问资源,必须在混淆的时候,将资源文件排除在外.
2.在程序集中加入水印,用premark无法查看该水印.不知道是不是因为破解版的原因?