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);
    }

  • 相关阅读:
    页面布局方案-上固定,下自适应
    页面布局方案-左右固定,中间自适应
    身心疲惫
    生产计划拆分说明-班组绩效匹配算法
    CSS代码片段
    常见内部函数----Python
    pyramid的第一个项目
    2015年大连国际马拉松半程经历
    高效时间管理
    《番茄工作法图解》第四章读书笔记
  • 原文地址:https://www.cnblogs.com/kind064100611/p/4420254.html
Copyright © 2011-2022 走看看