软件注册站
热情软件屋

 
磁盘序列号能否作为程序加密的依据
编号: QA001266    
建立日期: 1999年7月1日 最后修改日期: 2000年11月17日
所属类别: Visual Basic - 磁盘、文件和目录
   
    vb6.0
    win98
    通过这段程序能得到软盘,硬盘的序列号。
     Private Declare Function GetVolumeInformation Lib _
     "kernel32.dll" Alias "GetVolumeInformationA" (ByVal _
     lpRootPathName As String, ByVal lpVolumeNameBuffer As _
     String, ByVal nVolumeNameSize As Integer, _
     lpVolumeSerialNumber As Long, lpMaximumComponentLength _
     As Long, lpFileSystemFlags As Long, ByVal _
     lpFileSystemNameBuffer As String, ByVal _
     nFileSystemNameSize As Long) As Long
     Function GetSerialNumber(strDrive As String) As Long
    
     Dim SerialNum As Long
    
     Dim Res As Long
     Dim Temp1 As String
     Dim Temp2 As String
    
     Temp1 = String$(255, Chr$(0))
     Temp2 = String$(255, Chr$(0))
    
     Res = GetVolumeInformation(strDrive, Temp1, _
     Len(Temp1), SerialNum, 0, 0, Temp2, Len(Temp2))
    
     GetSerialNumber = SerialNum
    
     End Function
    

    每个硬盘,软盘的序列号都是不一样的。好像是由操作系统在格式化是分配给它的。因为每次格式化同一张磁盘,得到的数据是不一样的。请问这个信息放在了磁盘的什么位置?可否不通过格式化来写入这个号?现在是否有软件能做到这点?如果这个号码不能随便写入,那就可以用来作为程序加密的依据。谢谢!!!!!(wujing)

共享软件加密算法库
一款用于共享软件加密的动态链接库文件,包含了获取硬盘物理序列号、主板序列号及BlowFish、MD5、SHA512、RSA、CRC32、
字符串、文件加解密等多种强大加密算法,支持Windows平台下的各类开发工具。
广告

   
    序列号是写在磁盘的引导区的,不同的文件系统略有不同。可以通过直接读取磁盘的相关区域来修改,而不需要格式化。对于FAT分区,可以使用DOS中断Int 21h的440DH功能的46H子功能来设置序列号。这在VB中不容易实现,但在其它软件中可以实现。所以序列号作为加密的依据不是特可靠。但现在的确有很多软件都利用序列号来生成注册号,因为毕竟大多数人都无法修改序列号。
    
    贺辉:
    操作系统: Windows 98
    编程工具: VB6
    问题: 在VB6中,有什么办法可以唯一地识别一台计算机,我试过用硬盘系列号,可是每次格式化硬盘之后,该系列号都会变化,难道没有更好的方法吗?
    回答:
    这个问题没有太好的办法,因为至今仍没有一种方法可以非常好地识别一台计算机。CPU系列号只对PIII以上的CPU有效。主板的系列号没有统一的标准而且许多厂商都不公开读的方法。以前有一种读硬盘的出厂号的方法,不过只能在DOS下用,不能在Windows下使用。对于你的问题,你也可以采用这样的策略,比如允许用户更换一次硬盘,即提供两次系列号。而且在查系列号时,不仅仅要查C盘,也看看其他盘的系列号。如果你的软件比较贵的话,还是采用硬件狗比较好,软件加密只适用于廉价的大众软件。
    
    叶文伟的意见:
    请在获得0级特权后,读物理序列号。但不是所有的硬盘都有物理序列号。(主持人注:读的方法可以进一步参考晓月儿和skipme合写的文章ide.zip。另外http://www.winsim.com/diskid32/diskid32.html提供了Diskid32的程序,它可以读物理序列号,并提供了全部C源码。)
    
    相关问题:
    QA000801 "如何在Windows下实现对磁盘进行绝对读写"(它演示了如何读写引导扇区修改序列号。)
    QA002177 "如何用VC++获得计算机的CPU的序列号"
    QA002951 "关于对IDE的I/O操作(1F0-1F7)"

    

此问题由李海回答。

附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, 磁盘、文件和目录, disk, file, fat, directory, folder

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio