如何获得硬盘的序列号.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何获得硬盘的序列号

如何获得硬盘的序列号 博士网()问答区--Delphi版 作者:kongfang(bnnay) 来源:7 标题:如何获得硬盘的序列号-文章 如何在Windows 95/98下读取硬盘序列号 ――兼谈“如何从应用程序中执行特权0级代码” 北京时代先锋软件有限责任公司 丁凯 一、什么是硬盘的序列号 ---- 硬盘的序列号是生产时由厂家设定的,存在于硬盘的控制芯片内,不随硬盘的 分区 、格式化状态而改变,象硬盘的物理柱面数、扇区数一样,是一个与操作系统无关的 特 性。该序列号只能用硬盘控制器的I/O指令读取.,并且不能用常规办法修改。 ---- 需要注意的是,硬盘的序列号是物理存在的,这与将硬盘格式化成FAT或FAT32 后在 分区引导扇区自动生成的序列号有着根本的区别。格式化产生的序列号是一种逻辑上 的 号码,每次格式化产生的序列号是不同的,并且可以手工修改。 二、为什么要读取硬盘的序列号 ---- 可以想到的唯一原因就是软件防拷贝保护。这是由硬盘序列号的唯一性和只读 性所 决定的。一般的做法是在软件安装到硬盘时读取该序列号,在做些适当的变化后保存 起 来,以后,安装到硬盘的软件可以根据当前的硬盘序列号和安装时保存的序列号进行 比 较,如果发现二者不一致时,说明该软件被非法拷贝到其实硬盘上运行。 ---- 因为该序列号已经由生产厂家保证了它的唯一性,并且用户又不可能修改,所 以用 这种方法基本上保证了软件的合法效益,国内已经有许多DOS下的软件采用了这种方 式。 顺便提一下,这些软件还常利用主板的BIOS配合硬盘的序列号进行保护。究其原因, 一 方面是为了增大加密的强度,另一方面,也就是本方法的缺点,就是有些硬盘,如 SANS UNG 的某些型号,是没有序列号的。 三、如何读取硬盘的序列号 ---- 硬盘的序列号只能采用对硬盘控制器直接操作的方式进行读取,也就是说只能 采用 CPU的I/O指令操作硬盘控制器,读取的方法如下面的C语言程序所示: static int WaitIde() { int al; while ((al=inp(0x1F7)) =0x80) ; return al; } static void ReadIDE() { int al; int i; WORD pw[256]; WaitIde(); outp(0x1F6,0xA0); al = WaitIde(); if ((al0x50)!=0x50) return; outp(0x1F6,0xA0); outp(0x1F7,0xEC); al = WaitIde(); if ((al0x58)!=0x58) return; for (i=0;i 256;i++) pw[i] = inpw(0x1F0); } ---- 上面的程序实际上读取了保存在硬盘控制器内的全部信息,而序列号只是其中 的一 部分,位于上面提到的 pw[] 数组的 10 至 20 元素内,即从 pw[10] 开始的10个 WOR D内,每个WORD占两个字节,共占用了20个字节。由于该序列号保存时每个WORD的 高、低 字节是非Intel顺序,也就是说它的高字节在前,低字节在后,所以在使用时需要将 高、 低字节颠倒一下,这样就能得到完整的序列号。 四、上面所说的读取方法为什么不能在Windows 95下用 ---- 以前,在DOS时代,用这种方法完全可以读到硬盘的序列号并利用它进行软件防 拷 贝保护,即使在Windows 3.x下也没有问题,但随着Windows 95(及Windows 98,下简 称 Windows 9x)的普及,这种方法的局限性也显露出来,因为在Windows 9x下用这种方 法根 本就读不到任何信息。 ---- 原因是在Windows 9x下,上面代码所用的I/O指令被作为特权指令限制起来了。 那 么,什么是特权指令呢? ---- 首先,简单回顾一下Intel 80386以上CPU的保护机制,从80386以后,CPU分为 四个 特权级别(即Ring 0-3),供操作系统使用,其中Ring 0的级别最高,Ring 3的级别 最低 。所允许的CPU指令集从0到3有所减少。那些仅在Ring 0级别上使用的指令即为特别 指令 。在其它级别上执行特权指令会导致CPU异常的产生。 ---- 现在回到Windows 9x中,Wi

文档评论(0)

me54545 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档