`
380071587
  • 浏览: 443256 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

 
阅读更多

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

办法一、作为嵌入式资源


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


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

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

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

程序中关键代码如下:

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

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

办法二、改文件后缀

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

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

程序中关键代码如下:

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

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

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

分享到:
评论

相关推荐

    spring.net中文手册在线版

    Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序。它提供了很多方面的功能,比如依赖注入、面向方面编程(AOP)、数据访问抽象及ASP.NET扩展等等。Spring.NET以Java版的Spring框架为...

    asp.net知识库

    在 ASP.NET 2.0 中创建 Web 应用程序主题 ASP.NET 2.0 中的数据访问 ASP.NET 2.0:弃用 DataGrid 吧,有新的网格控件了! 将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005 ASP.NET 2.0 ...

    ASP.NET WebAPI 接口自测工具(v4.0最新版)

    自己在研究ASP.NET WebAPI的过程中,为了方便自己调试,写了一个自测工具。 可以进行 application/json 协议的访问,也可以进行 application/x-www-form-urlencoded 协议的访问。 为了方便经常调试某个接口,可将 ...

    基于ASP.NET的Web应用程序安全性的探讨

    目前,虽然网站的绝大部分资源对浏览者是开放的.但是有些信息则是特别针对某些用户的,例如...需要使用严密的安全机制来保护,以确定用户访问资源的权限。Web安全性便是为限制只有特定用户群才能访问某些文件而设计。

    探讨C#中Dispose方法与Close方法的区别详解

    在这里,要明确一下C#程序(或者说.NET)中的资源。简单的说来,C#中的每一个类型都代表一种资源,而资源又分为两类:托管资源:由CLR管理分配和释放的资源,即由CLR里new出来的对象;非托管资源:不受CLR管理的对象...

    Url重写篇视频------本讲将通过实例比较ASP.NET下的三种典型URL重写方案

    ASP.NET2.0内置的urlMappings和基于自定义HTTPModule的URL重写(使用NBear.Web中的UrlRewriteModule实现),并探讨URL重写中可能遇到的陷阱及处理办法。 需要手动为UrlRewriteWebSite目录添加一个到...

    Visual Basic 2008/2010 高级编程(第5版)(高清PDF 330MB) 3/6

     本书主要介绍了如何在VB解决方案中使用Microsoft提供的最新、最强大的工具,探讨了LINQ、AJAX、新的Visual Studio版本等,使读者能把这些功能应用于自己目前要完成的工作。本书的内容还包括.NET Framework、部署...

    Visual Basic 2008/2010 高级编程(第5版)(高清PDF 330MB) 6/6

     本书主要介绍了如何在VB解决方案中使用Microsoft提供的最新、最强大的工具,探讨了LINQ、AJAX、新的Visual Studio版本等,使读者能把这些功能应用于自己目前要完成的工作。本书的内容还包括.NET Framework、部署...

    ASP.Net可切换皮肤的后台源码

    本人的CSS和JAVASCIRPT的功底有限,开发的东西难免会有些BUG或者很肤浅的地方,希望和朋友们一起探讨解决其中的一些问题。也非常希望高手们优化我JS。 功能介绍: 1、可以换皮肤、其中住框架、具体页面可以统一使用...

    Android程序设计基础

    第3章探讨用户界面,也就是大多数Android程序中最重要的部分。  致谢  我要感谢为本书成功出版做出贡献的许多人,包括审稿人Anthony Stevens、Gabor Paller、Fred Burke、Dianne Hackborn和Laurent Pontier,...

    Windows 7高级编程

    Windows 7中的许多功能在.NET Framework 4.0中只是部分实现,因此要创建能运行的应用程序,就必须使用这些第三方库文件。 如果您希望运行对硬件有特殊要求的应用程序,例如应用程序要求具有传感器,那么就需要将硬件...

    Windows环境下32位汇编语言程序设计.rar

    当搭建编译和对编译器的使用不再成为绊脚石的时候,初学者的问题往往集中在对Windows程序结构的迷惑上,消息驱动体系、窗口过程、与硬件隔绝的图形接口及资源文件等相对于DOS程序来说都是全新的内容,接下来的4章将...

    精通DirectX.3D图形与动画程序设计.pdf

     本书配套光盘提供了书中所有示例程序的可执行文件、工程文件和完整源代码,以方便读者编译、调试示例程序。  本书主要面向对direct3d三维图形程序设计感兴趣的编程人员、游戏开发人员以及可视化仿真工程技术...

    Windows环境下32位汇编语言程序设计(chm 罗云彬)

    当搭建编译和对编译器的使用不再成为绊脚石的时候,初学者的问题往往集中在对Windows程序结构的迷惑上,消息驱动体系、窗口过程、与硬件隔绝的图形接口及资源文件等相对于DOS程序来说都是全新的内容,接下来的4章将...

Global site tag (gtag.js) - Google Analytics