Qt探讨.exe程序加密

1、前言

程序员随着代码写的多,难免会接到一些私活。但是又怕对方白嫖,困难总比办法多,哦不,错了,办法总比困难多。为了避免被别人白嫖,我们可以给自己的程序留后手,网上查阅资料,大概有以下两种:

1、采用远程控制:UDP指令远程锁死程序;

2、采用本地加密:提取CPU和硬盘序列号,加密生成注册码;

以上两种方法各有利弊,方法1可以本人自由控制,但是一旦设备没网,就GG了;方法2则不依赖网络,且每台设备的注册码唯一,但是本人无法直接控制。个人认为还是方法2简单有效,所以下面就方法2进行具体分析。

2、分析

采用注册码机制,我们首先要生成注册码,Qt下获取CPU和硬盘等系统信息(针对windows系统)的方法如下:

windows下执行命令除了用​​cmd​​​之外,还有个东西叫​​WMIC​​,非常强大,可以通过他获取很多信息,包括硬件信息。

QString Widget::getWMIC(const QString &cmd)
{
    //获取cpu名称:wmic cpu get Name
    //获取cpu核心数:wmic cpu get NumberOfCores
    //获取cpu线程数:wmic cpu get NumberOfLogicalProcessors
    //查询cpu序列号:wmic cpu get processorid
    //查询主板序列号:wmic baseboard get serialnumber
    //查询BIOS序列号:wmic bios get serialnumber
    //查看硬盘:wmic diskdrive get serialnumber
    QProcess p;
    p.start(cmd);
    p.waitForFinished();
    QString result = QString::fromLocal8Bit(p.readAllStandardOutput());
    QStringList list = cmd.split(" ");
    result = result.remove(list.last(), Qt::CaseInsensitive);
    result = result.replace("\r", "");
    result = result.replace("\n", "");
    result = result.simplified();
    return result;
}
 
QString Widget::getCpuName()
{
    return getWMIC("wmic cpu get name");
}
 
QString Widget::getCpuId()
{
    return getWMIC("wmic cpu get processorid");
}
 
QString Widget::getDiskNum()
{
    return getWMIC("wmic diskdrive where index=0 get serialnumber");
}

获取注册码之后,就可以着手程序的加密了,我的策略是这样的:

如果程序没有注册,默认可以使用3次;

如果程序注册了,使用次数无限制;

那怎么限制程序的使用次数呢?我的策略是这样的:

生成一个System.ini配置文件,里面存放程序的剩余运行次数​​RemainTime:3​​;

但是​​RemainTime:3​​当然不能直接存在System.ini中,不然一眼看出来就可以自己修改次数了;

所以在对System.ini写之前,进行加密;对System.ini读之后,进行解密;

加/解密算法可以自行选取,但是要采用可逆算法;

然后判断剩余运行次数,如果小于等于0,则程序提示需注册后使用,并退出;

否则,剩余运行次数减1,程序正常运行;

3、实现(核心代码)

QString Widget::getWMIC(const QString &cmd)
{
    //获取cpu名称:wmic cpu get Name
    //获取cpu核心数:wmic cpu get NumberOfCores
    //获取cpu线程数:wmic cpu get NumberOfLogicalProcessors
    //查询cpu序列号:wmic cpu get processorid
    //查询主板序列号:wmic baseboard get serialnumber
    //查询BIOS序列号:wmic bios get serialnumber
    //查看硬盘:wmic diskdrive get serialnumber
    QProcess p;
    p.start(cmd);
    p.waitForFinished();
    QString result = QString::fromLocal8Bit(p.readAllStandardOutput());
    QStringList list = cmd.split(" ");
    result = result.remove(list.last(), Qt::CaseInsensitive);
    result = result.replace("\r", "");
    result = result.replace("\n", "");
    result = result.simplified();
    return result;
}

QString Widget::getCpuId() //获取CPU序列号
{
    return getWMIC("wmic cpu get processorid");
}

QString Widget::getDiskNum() //获取硬盘序列号
{
    return getWMIC("wmic diskdrive where index=0 get serialnumber");
}

QString Widget::Encode(QString row) //加密,由于加/解密不是本文重点,故简单处理一下
{
    QByteArray byteArray = row.toUtf8();
    byteArray = byteArray.toBase64();
    return  byteArray;
}
QString Widget::Decode(QString passwd) //解密
{
    QByteArray byteArray = passwd.toUtf8();
    byteArray = QByteArray::fromBase64(byteArray);
    return byteArray;
}

void Widget::Judge_Valid() //判断程序合法性
{
    QString filePath = "System.ini";
    QFile file(filePath);

    if(!file.exists()) { //如果文件不存在
        file.open(QIODevice::ReadWrite | QIODevice::Text); //新建文件
        QString info = "RemainTime:"+time; //time是全局变量,QString time = "3";
        file.write(Encode(info).toUtf8()); //写入信息
        file.close();
         goto Here;
    }else {   //如果文件存在
        Here:if(file.open(QFile::ReadWrite | QFile::Text)) { //打开文件
            QString info = file.readAll(); //读取信息
            if(info.isEmpty()) { //如果文件为空
                QString time_temp = "1";
                QString info = "RemainTime:"+time_temp;
                file.write(Encode(info).toUtf8()); //写入信息
                info = file.readAll();
            }
            info = Decode(info); //解码
            if(info.contains(':')) {   //信息正确
                QStringList list = info.split(':');
                if(list.length()>=1) {
                    if(list[1].toInt() <= 0) {   //程序剩余使用次数不足
                        QMessageBox::about(this,"提示","请注册后再使用!");
                        exit(0); //程序退出
                    }else {   //程序还有剩余使用次数
                        file.close();
                        file.open(QFile::ReadWrite | QFile::Text | QFile::Truncate); //清空文件内容
                        QString time_remain = QString::number(list[1].toInt()-1); //程序剩余使用次数减1
                        QString info = "RemainTime:"+time_remain;
                        file.write(Encode(info).toUtf8()); //更新程序剩余使用次数
                        QMessageBox::about(this,"提示","程序剩余使用次数:"+time_remain+"次");
                    }
                }
            }
      }//Here
      file.close();

   }//如果文件存在
}

4、效果

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓ 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: texstudio-4.1.2-win-qt5.exe 是一个用于Windows操作系统的Tex编辑器,它的名字是Tex Studio。它的版本号是4.1.2,这个版本是基于Qt5框架开发的。它可以帮助用户创建、编辑和编译Tex文档。 Tex Studio提供了丰富的功能和工具,使得Tex文档的编写变得更加简单和高效。它具有智能补全功能,可以自动补全Tex命令和关键词,节省了用户的时间和精力。此外,它还具有语法高亮显示功能,可以帮助用户更好地阅读和理解Tex代码。 另外,Tex Studio还集成了对BibTeX的支持,可以轻松管理文献引用。它还提供了强大的多文件支持,用户可以在一个项目中编写多个Tex文件,方便管理和组织文档。此外,它还提供了实时预览功能,用户可以随时查看文档的最新效果。 Tex Studio还支持用户自定义设置和宏定义,用户可以根据自己的需求进行个性化设置,提高编写效率。它还支持众多Tex发行版,包括MiKTeX和TeX Live等。 总的来说,texstudio-4.1.2-win-qt5.exe 是一个强大而易于使用的Tex编辑器,适用于Windows操作系统。它提供了丰富的功能和工具,使得Tex文档的编写变得更加轻松和高效。无论是学术界的研究人员还是学生,都可以从中受益。 ### 回答2: texstudio-4.1.2-win-qt5.exe是一个TeX编辑器软件的安装文件。TeX是一种用于排版科技文档的语言和程序系统。TeX Studio是一个基于TeX的集成开发环境,提供了方便的编写、编辑和查看TeX文档的功能。 texstudio-4.1.2-win-qt5.exe的含义是指该软件的版本为4.1.2,针对Windows操作系统,并采用了Qt5作为界面开发工具包。 TeX Studio具有丰富的功能,例如语法高亮显示、智能代码补全、自动补全引用和标签等等。它还支持多文件编辑、语法检查、编译和预览等功能。用户可以方便地编写、编辑和排版各种类型的科技文档,如论文、报告、书籍等。 通过texstudio-4.1.2-win-qt5.exe安装文件可以将TeX Studio软件安装到Windows操作系统中。用户只需双击该文件,按照安装向导的步骤进行安装即可。安装完成后,用户可以在开始菜单中找到TeX Studio的快捷方式,并通过它启动软件。 总之,texstudio-4.1.2-win-qt5.exe是TeX Studio软件的安装文件,通过它可以在Windows操作系统中安装和使用该软件,方便进行TeX文档的编写和排版。 ### 回答3: texstudio-4.1.2-win-qt5.exe是TexStudio软件的安装文件。TexStudio是一款功能强大的LaTeX编辑器,适用于Windows操作系统。该软件具有直观的用户界面和丰富的编辑功能,可以用于创建、编辑和编译LaTeX文档。 通过安装texstudio-4.1.2-win-qt5.exe,用户可以在Windows系统上使用TexStudio软件。安装过程非常简单,只需点击exe文件并按照安装向导的指示进行操作即可。安装完成后,用户可以启动TexStudio并开始使用。 TexStudio软件提供了很多实用的功能,如语法高亮、智能代码补全、拼写检查等,这些功能可以帮助用户提高工作效率和文档质量。此外,TexStudio还支持实时预览、一键编译、快捷键定义等功能,使用户能够更加方便地编辑和编译LaTeX文档。 texstudio-4.1.2-win-qt5.exe是TexStudio软件的升级版本,包含了新的功能和改进。用户通过安装这个文件,可以获得更好的使用体验和更高的工作效率。 总之,texstudio-4.1.2-win-qt5.exe是TexStudio软件的安装文件,通过安装这个文件,用户可以在Windows系统上获得TeXStudio软件的最新版本,享受到丰富的编辑和编译LaTeX文档的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值