Qt用CPU序列号来实现对软件简单的加密授权

   最近公司做了一个电子元器件计数器,主要为了小批量的卖一些设备,为防止算法软件在其他设备上运行,需要将软件加密,起初打算用加密狗,后来想了一下由于软件和硬件都是自己设计的,所以可以把硬件CPU或者网卡,主板等硬件信息写进程序,来实现对软件简单的加密。
   下面记录一下绑定CPU序列号方法:主要参考:https://blog.csdn.net/zkz10086/article/details/81505254
   后面如果有需要,还可以绑定网卡,主板,硬盘,内存等。

代码

   因为项目是用Qt编写的,代码也是Qt main.cpp代码:
   在搜索框内输入cmd,然后输入命令 wmic cpu get ProcessorID 可以查看主机CPU序列号

#include "mainwindow.h"
#include 
#include 
#include 
#include 

#if _MSC_VER >= 1600   //判断编译器版本(MSVC)
#pragma execution_character_set("utf-8") //强制转换为UTF-8
#endif

//授权的主机CPU的ID表
QStringList _CPU_ID_LIST
{
   "BFEBFBFF000306D4" //我本机CPU的ID
};

//获取当前主机CPU的ID
QString GetCurrentCpuId()
{
    QString _currrent_cpu_id;
    unsigned long s1, s2;
    char buf[32] = { 0 };
    __asm{
        mov eax, 01h   //eax=1:取CPU序列号
            xor edx, edx
            cpuid
            mov s1, edx
            mov s2, eax
    }
    if (s1) {
        memset(buf, 0, 32);
        sprintf_s(buf, 32, "%08X", s1);
        _currrent_cpu_id += buf;
    }
    if (s2) {
        memset(buf, 0, 32);
        sprintf_s(buf, 32, "%08X", s2);
        _currrent_cpu_id += buf;
    }
    __asm{
        mov eax, 03h
            xor ecx, ecx
            xor edx, edx
            cpuid
            mov s1, edx
            mov s2, ecx
    }
    if (s1) {
        memset(buf, 0, 32);
        sprintf_s(buf, 32, "%08X", s1);
        _currrent_cpu_id += buf;
    }
    if (s2) {
        memset(buf, 0, 32);
        sprintf_s(buf, 32, "%08X", s2);
        _currrent_cpu_id += buf;
    }
    return  _currrent_cpu_id;
}

bool JudgeCpuIdLegal(QString cpuId)
{
    for(QString id : _CPU_ID_LIST)
    {
        if(id == cpuId)//CPU序列号是否被授权
            return  true;
    }
    return false;
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QString _currrent_cpu_id = GetCurrentCpuId();
    if(!JudgeCpuIdLegal(_currrent_cpu_id))//当前主机CPU序列号未授权则程序退出
    {
        QMessageBox::warning(nullptr,"程序错误","非法硬件!");
        return -1;
    }
    MainWindow w;
    w.show();
    return a.exec();
}

你可能感兴趣的:(Qt用CPU序列号来实现对软件简单的加密授权)