zoukankan      html  css  js  c++  java
  • 基于硬盘号和CPU序列号的软件加密技术

            CPU序列号是一个建立在处理器内部的、唯一的、不能被修改的编号。它由96位数字组成。高32位是CPU ID,用来识别CPU类型。低64位每个处理器都不同,唯一地代表了该处理器。CPU号可以用来识别每一个处理器。为了适应这一新特征,Intel在处理中增加了两条指令(“读取”和“禁止”)和一个寄存器位(模式指定寄存器位:Model Specific Register一“MSR”)。读取指令扩展了CPUID读取指令。当执行读取指令时可以得到96位的处理器序列号。禁止指令可以禁止对处理器序列号的读取。为了配合CPU序列号的读取和禁止,设置了MSR位。当MSR位为“0”时可以读取CPU序列号;当MSR为“1”时只能读取高32位(即CPU ID)而低64位全为零,只能通过reset CPU才能启用MSR。

    实现代码:

    void CWaterSaveDlg::OnBnClickedButton6()
    {
        // TODO: 在此添加控件通知处理程序代码
        unsigned long s1,s2;
        unsigned char vendor_id[]="------------";//CPU提供商ID
        CString str1,str2,str3;
        // 以下为获得CPU ID的汇编语言指令
        _asm    // 得到CPU提供商信息 
        {  
            xor eax,eax   // 将eax清0
                cpuid         // 获取CPUID的指令
                mov dword ptr vendor_id,ebx
                mov dword ptr vendor_id[+4],edx
                mov dword ptr vendor_id[+8],ecx  
        }
        str1.Format("CPU提供商ID:%s",vendor_id);

        _asm    // 得到CPU ID的高32位 
        { 
            mov eax,01h    
                xor edx,edx
                cpuid
                mov s2,eax
        }
        str2.Format("%08X-",s2);

        _asm    // 得到CPU ID的低64位
        { 
            mov eax,03h
                xor ecx,ecx
                xor edx,edx
                cpuid
                mov s1,edx
                mov s2,ecx
        }
        str3.Format("%08X-%08X ",s1,s2);
        str2="CPU序列号:" + str2 + str3;
        MessageBox(str2);
    }

  • 相关阅读:
    SQL 分组 行变列的一个例子
    用JS如何獲得DropDownList所選Text和Value?
    用了.net2.0,再用1.1的问题。1.1里修改.cs文件不重新编译,.dll不重新生成。
    ASP.NET中上传文件
    获得用户控件的值!
    在没有vs2005环境里部署Crystal Reports 10水晶报表
    onkeypress,onkeydown,onkeyup区别
    2012湖南大学第八届程序设计竞赛 Incredible[公式]
    POJ3624 Charm Bracelet[01背包问题入门]
    HDOJ1257 最少拦截系统[DP入门]
  • 原文地址:https://www.cnblogs.com/kind064100611/p/4420254.html
Copyright © 2011-2022 走看看