基于硬盘号和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\n",s1,s2);
    str2="CPU序列号:" + str2 + str3;
    MessageBox(str2);
}

时间: 2024-11-25 15:21:41

基于硬盘号和CPU序列号的软件加密技术的相关文章

c#中如何获取本机用户名、MAC地址、IP地址、硬盘ID、CPU序列号、系统名称、物理内存

我们在利用C#开发桌面程序(Winform)程序的时候, 经常需要获取一些跟系统相关的信息, 以下这些代码获取能有些用处. c#中如何获取本机用户名.MAC地址.IP地址.硬盘ID.CPU序列号.系统名称.物理内存. 首先需要引入命名空间: using System.Management; /// 操作系统的登录用户名: string GetUserName() { try { string st = ""; ManagementClass mc = new ManagementCla

密码学-软件加密技术和注册机制

本文是一篇软件加密技术的基础性文章,简要介绍了软件加密的一些基本常识和一些加密产品,适用于国内软件开发商或者个人共享软件开发者阅读参考. 1.加密技术概述 一个密码系统的安全性只在于密钥的保密性,而不在算法的保密性. 对纯数据的加密的确是这样.对于你不愿意让他看到这些数据(数据的明文)的人,用可靠的加密算法,只要破解者不知道被加密数据的密码,他就不可解读这些数据. 但是,软件的加密不同于数据的加密,它只能是“隐藏”.不管你愿意不愿意让他(合法用户,或 Cracker)看见这些数据(软件的明文),

c#中如何获取本机MAC地址、IP地址、硬盘ID、CPU序列号等系统信息

public class Computer { public static string CpuID; //1.cpu序列号 public static string MacAddress; //2.mac序列号 public static string DiskID; //3.硬盘id public static string IpAddress; //4.ip地址 public static string LoginUserName; //5.登录用户名 public static stri

软件加密的现状和发展趋势

一.软件加密方法 前面提到过,软件加密技术分为基于硬件的加密方式和基于软件的加密方式. 1.基于硬件的加密方式 基于硬件的加密方式主要是加密锁,一些重要信息,如加密密钥.敏感数据.授权文件.自定义算法等都可以存储在加密锁中. 加密锁从接口形式分为并口和USB口两种.并口是早期的使用的形式,因为插拔不方便和与打印机冲突,现在已较少使用.目前大多数开发商使用的都是USB接口的加密锁. 加密锁从CPU类型来说分两种,一种使用单片机作CPU,另一种使用智能卡芯片作CPU.单片机硬件本身容易被破解或复制,

C# Note30: 软件加密机制

待更! 参考文章: C#软件license管理(简单软件注册机制) 软件加密技术和注册机制 .NET中的许可证机制--License

C# 获取CPU序列号、网卡MAC地址、硬盘序列号封装类,用于软件绑定电脑

1 using System.Management; 2 3 namespace GLaLa 4 { 5 /// <summary> 6 /// hardware_mac 的摘要说明. 7 /// </summary> 8 class HardwareInfo 9 { 10 /// <summary> 11 /// 取机器名 12 /// </summary> 13 /// <returns></returns> 14 public

C# 获取本机CPU序列号,MAC地址,硬盘ID,本机IP地址,计算机名,物理内存,PC类型

首先引入服务 然后 调用 本文转载自http://blog.sina.com.cn/s/blog_7eeb43210101hf7f.html public class Computer { public static string CpuID; //1.cpu序列号 public static string MacAddress; //2.mac序列号 public static string DiskID; //3.硬盘id public static string IpAddress; //

更改cpuID(CPU序列号)指南

最近在使用一个软件,购买了许可.该license绑定了机器的cpuID,然该软件并不能正在运行在windows 8 64bit操作系统上,具体表现为运行3-5mins后就崩溃.于是,我计划使用VMware虚拟机虚拟出相应的硬件以及windows xp 32bit操作系统,将该软件运行到虚拟机上.我原以为VMware虚拟机的CPU配置是基于host的机器配置.但是我发现事实并不是如此.在cmd shell下执行wmic cpu get ProcessorId命令,可是查看机器的cpuID.查了资料

java RSA加密生成license,用CPU序列号生成机器码

? license里就是一些注册信息,键值对组成的字符串 ? 对称加密: DES,AES,加密解密都用一个秘钥,速度快 非对称机密 RSA,可以私钥加密公钥解密,也可以公钥机密私钥解密,速度慢 注意:RSA加密明文最大长度117字节,解密要求密文最大长度为128字节,所以在加密和解密的过程中需要分块进行.RSA加密对明文的长度是有限制的,如果加密数据过大会抛出异常: ? 常见加密算法 DES? ??? DES是Data Encryption Standard(数据加密标准)的缩写,DES算法为密