快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

在.NET下获取硬盘序列号的问题

一般软件的注册机制可以通过获取硬件序列号,然后用非对称加密算法生成相应的公钥和私钥。但是用Managed Code写获取硬盘序列号的代码不能解决所有的问题,比如不能在非治理员的权限下使用,前几天Sunmast在他的Blog上发布了《如何得到硬盘序列号?.NET版本[C#]》,就是没有解决这个问题,用WMI也有很多问题。

要想顺利获取硬盘的序列号,目前只能依赖非托管代码了。DiskId32是一个源码公开的C++程序,可以解决上述问题。由于代码比较底层,我对VC和DDK不认识,没有能力将其封装为DLL,希望各位帮忙!

还有,就算封装好了这个Native DLL并可以使用了,但还有问题没有解决。假如封装到了Native DLL,该DLL很轻易被人替换成另外一个,究竟在Managed Code里面可以看到调用Native DLL的函数声明,别人只要模拟这些函数界面重新写一个新的就很轻易达到破解目的了。不过详细我没有测试过,不知道行不行。

于是我又想到了另外一个方式,就是把获取硬盘序列号的Native DLL作为资源文件封装到Managed Code中,然后在每次要调要该DLL时,先把该DLL写入磁盘,再动态绑定。由于Managed Code可以通过混淆器来保护,以致不能对其进行修改,这个我在《如何保护我们的 .NET 程序集?》中已经给出了答案。动态绑定Native DLL又是另外一个技术难题,我已经找到了一些资料,与大家分享。
Late binding on native DLLs with C#
Late-Binding DLLs in C#
Using legacy plug-ins with .NET - Part 1
Using legacy plug-ins with .NET - Part 2
C-Function pointer for .NET
Dynamic PInvoke method calls

不过最牛的就是下面这一招了!直接把Native Code用字节数组保存在Managed Code中,然后调用,真是牛B,不过我还没有完全弄懂,希望大家来实践实践。
Execute Native Code From .NET

另外还有一篇文章是关于加密字符串的,值得研究!
Poly-Engine Crypt String

希望各位多多交流.NET程序的保护问题,找出最好的解决方案!





返回类别: 教程
上一教程: .NET 的对象关系持久化机制(1)
下一教程: 使用.NET生成Excel文件

您可以阅读与"在.NET下获取硬盘序列号的问题"相关的教程:
· 解决.NET(WebApplication)安装部署的不能选择安装路径的问题
· VS.NET Beta2安装后添加/删除程序不能正常启动的问题的解决方案
· .NET的自动序列号工具
· 用.net 2003开发Windows CE应用,解决与pocket pc通讯的问题
· VS.NET下水晶报表分发时的问题及解决2
    微笑服务 优质保证 索取样品