快乐小胖兔的一窟

用自己的方式过一生 --- zyq654321

VC知识库BLOG 首页 新随笔 联系 聚合 登录
  23 Posts :: 0 Stories :: 95 Comments :: 2 Trackbacks

公告

Welcome you

留言簿(7)

随笔分类

随笔档案

文章档案

相册

网站联接

BLOG友情链接

搜索

最新评论

阅读排行榜

评论排行榜

2006年5月10日 #

    今天在写工作文档时,有网上好友问我关于CPUID被禁止取序列号后该怎么办?于是立即由single-core变为duo-core,呵呵,大脑不用升级就可自动完成,且无新成本发生。

网上其实也说到了禁止取序列号的代码:应该是下面这几句:

MOV ECX, 119H
RDMSR
OR EAX, 0020 0000H
WRMSR

我简单说明这几句,第二和第四分别是读写MSR寄存器的指令,第一句则表明了要访问的MSR的地址。119H对应该的MSR寄存器叫做BBL_CR_CTL MSR寄存器;第三句则是对第21位置1。在BBL_CR_CTLbit21被置以后,processor number这一功能会被禁止,直至系统reset。要说明的是此bit21write-once属性的,即仅可以在reset后被写入一次,这是在硬件上就做好的,所以一旦此位被修改,再写就不可能了。

对一些软件为什么要去置此位就不说了,大多也是安全或加密什么的。但是至少有一点,用户也许要使用processor number,这样就无法去读取了。

最简单的方法是不让修改此位的软件运行,更简单说就是检查一下当前正在运行的程序,看其执行文件中是否包含了相应代码的机器码,当然了,如果必要还要检查其加载的模块。下面是相应的机器码(注意,此代码不一定与“干这事的那个人”的代码完全相符。):

B9 19 01 00 00   mov         ecx,119h

0F 32            rdmsr           

0D 00 00 20 00   or          eax,200000h

0F 30            wrmsr  

发表于 2006-05-10 12:50 Hercules Space 阅读(2626) | 评论 (1)编辑 收藏