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 <QApplication>
#include <QMessageBox>
#include <windows.h>
#include <QDebug>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值