动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   程序开发 → 阅读文章

 利用磁盘的序列号进行软件加密

作者来源: 
阅读 数 503 人次 , 2006-5-18 11:13:00 


  用过共享软件的人都知道,一般的共享软件(特别是国外的)在使用一段时间后都会提出一些“苛刻”的要求,如让您输入注册号等等。如果您想在软件中实现该“功能”的话,方法有很多。在这里我介绍一种我认为安全性比较高的一种,仅供参考。

  大家都知道,当您在命令行中键入“dir”指令后,系统都会读出一个称作Serial Number的十六进制数字。这个数字理论上有上亿种可能,而且很难同时找到两个序列号一样的硬盘。这就是我这种注册方法的理论依据,通过判断指定磁盘的序列号决定该机器的注册号。

  要实现该功能,如何获得指定磁盘的序列号是最关键的。在Windows中,有一个GetVolumeInformation的API函数,我们利用这个函数就可以实现。

  下面是实现该功能所需要的代码:

Private Declare Function GetVolumeInformation& Lib "kernel32" _
 Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, _
 ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, _
 lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _
 lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, _
 ByVal nFileSystemNameSize As Long)
Private Const MAX_FILENAME_LEN = 256
Public Function DriveSerial(ByVal sDrv As String) As Long
'Usage:
'Dim ds As Long
'ds = DriveSerial("C")
 Dim RetVal As Long
 Dim str As String * MAX_FILENAME_LEN
 Dim str2 As String * MAX_FILENAME_LEN
 Dim a As Long
 Dim b As Long
 GetVolumeInformation sDrv & ":\", str, MAX_FILENAME_LEN, RetVal, _
 a, b, str2, MAX_FILENAME_LEN
 DriveSerial = RetVal
End Function
    
  如果我们需要某个磁盘的序列号的话,只要DriverSerial(该磁盘的盘符)即可。如 DriverASerialNumber=DriverSerial("A")。
  
 本文Tagsmd5  加密  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:VB中防止文本控件中的部分滚动
· 下一篇:VB COM基础讲座之发布组件
· Java程序员认证模拟题及详细分析(2)
· Java程序员认证模拟题及详细分析(1)
· 简单的例子把OO的JavaScript说明白
· DELPHI基础教程
· 为Java应用程序添加退出事件处理


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077