.net程序中资源文件的保护办法探讨

 

在编写.net程序(特别是WinForm时)经常会遇到一些需要加以保护的资源文件,比如一些数据库文件、图片文件等等,我们希望能被自己的程序访问,但是又不希望别人把我们辛辛苦苦收集来的数据被别人毫不费力地用于自己的程序中,在网上已经有不少朋友问到过这个问题,我也与不少朋友探讨过这个问题,今天把一些常用的做法介绍给大家,仅供参考。 

办法一、作为嵌入式资源


采用这种办法的优点是资源文件做成整个可执行文件的一部分了,优点是不同反编译等手段,无法获知程序的内部情况,缺点是因为已经嵌入到exe中了,所以无法对嵌入的文件做内容上的修改。

 


图:打开调换字节顺序的word文件的情况

办法四、对文件字节进行补运算

 

实践证明:对一个字节变量b,以下操作横成立:~(~b)=b,利用这个原理我们可以对文件的字节值进行位操作来保护,我们可以将原始文件的字节值进行一次~运算,将加密后的文件字节内容随同软件一同发布,在需要查看和修改文件的时候,再对文件进行一次~运算就可以了。这种方法的优点要知道文件内容只需要对文件逐字节进行~运算就可以了,缺点是一旦被人知道此种加密方式,懂得一点编程的人就可以对文件内容复原。

程序中关键代码如下:

// 下面的循环实现对文件内容逐字节进行求补运算
             for  ( int  i  =   1 ; i  <  fileLength; i ++ )
            {
                source[i] 
=  ( byte )( ~ source[i]);
            }
            
return  source;

 

总结:以上各种方式各有优缺点,需要根据的最终用户的计算机水平来确定什么保护方法。

 

办法二、改文件后缀

我问过不少朋友,有些使用过这种办法,因为一般来说一种文件后缀对应一种编译或者查看的工具,例如.mdb通过Access可以查看和修改,.txt可以通过记事本查看和修改,如果我们把一个txt文件的后缀改成.mdb,那么双击后系统会用Access打开文件,结果自然是乱码,如果我们不理会文件后缀,仍然以记事本打开则仍然可以正常查看和编辑。也就是我们更改文件后缀达到误导系统用错误的方式打开的目的。也有些朋友甚至干脆不用文件后缀,这样就让操作系统无所适从了。这种方法的优点是知道文件的实际格式后可以对文件进行查看和修改,缺点是常用的文件后缀不多,遇上有心人可以尝试通过更改文件后缀的办法来获取文件内容的办法,这种几率还是比较大的。

办法三、对文件的字节顺序进行调整
这种办法是我今天要重点介绍的一种办法。几年前我参与过一个OA系统的开发,里面有一个环节就是如何保证以Word形式保存的合同、审批申请不会被篡改。我当时的做法就是Word文件分段存储,也就是将整个文件头20个byte存放到数据库,剩余字节仍然以Word文档的方式存储到硬盘上,这样别人通过正常办法打开Word文件时看到的乱码,一旦需要调看文件时,再通过程序将头20字节和本地存储的文件的内容合并成一个完整的Word文档。后来我嫌利用数据库存储麻烦,将这种办法改进了一下,将文件的前n个字节与后n个字节位置对换,这样不更改文件后缀,仍然可以实现对文件内容进行查看和修改。这种办法的缺点是对于文本型的文件,如果不进行字节调换,则没有调换的部分依然不是乱码。

程序中关键代码如下:

FileStream stream  =  fileInfo.OpenRead();
                
byte [] total  =   new   byte [fileLength]; // 存储文件内容的字节数组
                stream.Read(total,  0 ,fileLength);
                stream.Close();
                
byte  tempByte; // 用于交换文件字节的数据
                
// 下面的循环实现文件的首字节与文件的尾字节对换
                
// 文件的第二字节与文件倒数第二字节对换
                
// 假设文件的字节长度为length,那么对换字节的索引n,m满足:n+m=length-1
                
// 也就是n=length-m-1
                 for  ( int  i  =   0 ; i  <  byteLength; i ++ )
                {
                    tempByte 
=  total[i];
                    total[i] 
=  total[fileLength  -   1   -  i];
                    total[fileLength 
-   1   -  i]  =  tempByte;
                }
                
return  total; // 返回调整次序后的文件字节内容

说明:完整源代码请到http://download.csdn.net/source/417558下载。下载到的压缩包中包含了程序源文件和编译成功的可执行文件。

说明:有朋友提出了其它办法,比如对文本型文件进行DES加密等等,这些办法当然也是可以的,我在文中并没有说只有这些办法,文中提到的办法对所有文件类型都是可以的。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NET资源文件生成器(ResourceWorkshop)是专业的资源文件开发工具,集成了VS.NET中的所有资源文件开发工具的功能,是.NET程序员的必备工具。它有中英文两种语言版本,支持多文档窗口,具有独特的文件关联功能,使您编缉资源文件时更加得心应手。 主要功能: 1、支持.NET框架下的三种资源文件格式(.txt文件、.resX文件和.Resources文件)。 2、支持字符串、颜色、图片、光标等各种资源。 3、提供了添加、删除、重命名、剪切、复制、粘贴等常用编缉功能。 4、支持多文档窗口,可同时编缉多个文件。 5、可将不同资源文件格式之间的相互转换。 6、可将多个不同格式的资源文件合并为一个资源文件。 7、提供了资源文件关联功能,便于对照比较多个资源文件。 设置资源文件关联,是本程序的一个特色功能。将多个资源文件关联在一起,并将其中一个作为主动文件,当主动文件的当前资源项改变时,其它文件中的当前资源项也随之变化,指向与之同名的资源。类似Foxbase中数据库之间的关联功能,被动数据库中的记录指针随着主动数据库的记录指针变化。 当被动资源文件中找不到与主动资源文件中同名的资源时,根据不同的设置,可定位到第一项资源或询问是否复制资源或自动复制资源。 请到我们的主页http://www.guohuasoft.com下载最新版本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值