当前位置: 首页 > news >正文

qt 模仿简易的软狗实现

我们在写软件的时候,希望我们的软件只在固定的机器上运行,其他机器上运行不了,那我们应该如何做呢?

1 首先我们需要得到运行机器的mac地址,这样可以简易的判断是否是我们授权的机器。

那我们首先定义一个授权mac机器列表

QStringList listMac;
listMac<<"8C:EC:4B:C9:CE:AC"<<"9C:EC:4B:C9:CE:AC"<<"7C:EC:4B:C9:CE:AC";这部也可以修改为读取远端数据库,其他方法可以自己按照自己情况考虑。

2 读取本机的mac信息,判断本机的mac是否在授权范围内。

3 读取注册表里面软件使用信息,我们可以用时间来判断是否过了有效期,加入第一次使用,注册表里面写入注册时间,下次进来对比当前时间和注册时间之间的差值,是否过了有效期。

4 对注册表的注册信息进行base64编码。

下面上代码:

#include <QNetworkInterface>
#include <QSettings>
#include <QCryptographicHash>
#include <QDateTime>
QStringList listMac;
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);listMac<<"8C:EC:4B:C9:CE:AC";ReadLocalInfo();
}Widget::~Widget()
{delete ui;
}QString Widget::ReadSystemTable()
{QString info;//通过写入注册表来判断QSettings settings("HKEY_CURRENT_USER\\Software\\Code_Encryption\\Settings",QSettings::NativeFormat);info = settings.value("remain_times").toString();return info;}
void Widget::WriteSystemTable()
{}
void Widget::ReadLocalInfo()
{QString macAddress;QList<QNetworkInterface> allInterfaces = QNetworkInterface::allInterfaces();for (auto &interface : allInterfaces) {// 通常, 我们选择第一个非虚拟和非回环接口if (interface.flags().testFlag(QNetworkInterface::IsUp) &&!interface.flags().testFlag(QNetworkInterface::IsLoopBack)) {macAddress = interface.hardwareAddress();m_MacAddress = macAddress;break;}}if(!listMac.contains(macAddress)){qApp->exit();}m_nCount = ReadSystemTable();AnalysisLocalInfo();
}
void Widget::AnalysisLocalInfo()
{if(m_nCount.isEmpty()){QByteArray strInfo;QDateTime currentData = QDateTime::currentDateTime();QString strTemp = m_MacAddress+"|"+currentData.toString("yyyy-MM-dd hh:mm:ss");strInfo = strTemp.toLocal8Bit();strInfo = strInfo.toBase64();QSettings settings("HKEY_CURRENT_USER\\Software\\Code_Encryption\\Settings",QSettings::NativeFormat);settings.setValue("remain_times",strInfo);}else{QByteArray strInfo = QByteArray::fromBase64(m_nCount.toLocal8Bit());QList<QByteArray> listInfo = strInfo.split('|');QDateTime lastData = QDateTime::fromString((QString)listInfo.at(1),"yyyy-MM-dd hh:mm:ss");QDateTime currentData = QDateTime::currentDateTime();if(currentData.secsTo(lastData)>=86400){qApp->exit();}qDebug()<<"lastData"<<lastData.toString("yyyy-MM-dd hh:mm:ss")<<"currentData"<<currentData.toString("yyyy-MM-dd hh:mm:ss");}}

相关文章:

qt 模仿简易的软狗实现

我们在写软件的时候&#xff0c;希望我们的软件只在固定的机器上运行&#xff0c;其他机器上运行不了&#xff0c;那我们应该如何做呢&#xff1f; 1 首先我们需要得到运行机器的mac地址&#xff0c;这样可以简易的判断是否是我们授权的机器。 那我们首先定义一个授权mac机器…...

荣业食品销售费用每年上亿元:主要产品收入大降,电商占比过低

《港湾商业观察》黄懿 今年3月&#xff0c;广东荣业食品有限公司的控股公司Wing Yip Food Holdings Group Limited&#xff08;下称“荣业食品”&#xff09;向美国SEC递交了纳斯达克上市申请。 据悉&#xff0c;2023年11月&#xff0c;商务部宣布移除了一批共计55家因长期经…...

数据结构:并查集

数据结构&#xff1a;并查集 并查集原理实现框架初始化合并查询获取成员路径压缩其它 总代码 并查集 在生活中&#xff0c;经常会出现分组问题。比如一个班级分为多个小组&#xff0c;打篮球分为两方等等。在同一个组中的所有成员&#xff0c;就构成一个集合。对这种一个群体分…...

微信小程序实战教程:轻松实现列表批量选择功能

在许多场景下&#xff0c;用户需要对列表中的多项内容进行操作&#xff0c;如批量删除、批量下载等。为了满足这一需求&#xff0c;我们需要在微信小程序中实现列表批量选择功能。具体要求如下&#xff1a; 用户可以逐个选择列表项&#xff0c;也可通过全选按钮快速选择所有列表…...

企业微信:开启客户联系和配置

前言 客户联系是企业微信的一项非常实用且自定义化配置丰富的功能&#xff0c;使企业内的授权员工可以添加外部客户&#xff08;企业微信联系人和微信联系人&#xff09;进行工作沟通&#xff0c;并且还可以建立客户群&#xff0c;甚至发表内容到客户朋友圈&#xff01; 由于功…...

Python发送邮件教程:如何实现自动化发信?

Python发送邮件有哪些方法&#xff1f;如何利用python发送邮件&#xff1f; 无论是工作汇报、客户通知还是个人提醒&#xff0c;邮件都能快速传递信息。Python发送邮件的自动化功能就显得尤为重要。AokSend将详细介绍如何使用Python发送邮件&#xff0c;实现自动化发信&#x…...

一周热门|苏姿丰:芯片行业不能只盯着 GPU;Gartner:GenAI 即将越过期望膨胀期

大模型周报将从【企业动态】【技术前瞻】【政策法规】【专家观点】四部分&#xff0c;带你快速跟进大模型行业热门动态。 01 企业动态 Open AI 计划从非营利组织向营利组织转型 日前&#xff0c;路透社报道称&#xff0c;OpenAI 正在制定一项计划&#xff0c;将其核心业务重…...

Failed to load WebView provider: No WebView installed

1、问题 使用webview加载网页&#xff0c;在应用运行时&#xff0c;报了如下错误&#xff1a;android.webkit.WebViewFactory$MissingWebViewPackageException: Failed to load WebView provider: No WebView installed2、分析 通过查看项目的修改记录&#xff0c;确实安装了We…...

java日志框架之Log4j

文章目录 一、Log4j简介二、Log4j组件介绍1、Loggers (日志记录器)2、Appenders&#xff08;输出控制器&#xff09;3、Layout&#xff08;日志格式化器&#xff09; 三、Log4j快速入门四、Log4j自定义配置文件输出日志1、输出到控制台2、输出到文件3、输出到数据库 五、Log4j自…...

C++ bitset(位图)的模拟实现

文章目录 一、bitset接口总览二、bitset模拟实现1. 构造函数2. set、reset、flip、test3. size、count4. any、none、all5. 打印函数 三、完整代码 一、bitset接口总览 成员函数功能set设置指定位或所有位为1&#xff08;即设置为“已设置”状态&#xff09;reset清空指定位或…...

Llama 3.2:利用开放、可定制的模型实现边缘人工智能和视觉革命

在我们发布 Llama 3.1 模型群后的两个月内&#xff0c;包括 405B - 第一个开放的前沿级人工智能模型在内&#xff0c;它们所产生的影响令我们兴奋不已。 虽然这些模型非常强大&#xff0c;但我们也认识到&#xff0c;使用它们进行构建需要大量的计算资源和专业知识。 我们也听到…...

解决R语言bug ‘sh‘ is not recognized as an internal or external command

安装源码包‘httr2’ trying URL ‘https://cran.rstudio.com/src/contrib/httr2_1.0.5.tar.gz’ Content type ‘application/x-gzip’ length 230632 bytes (225 KB) downloaded 225 KB installing source package ‘httr2’ … ** package ‘httr2’ successfully unpacked…...

记一次Mac 匪夷所思终端常用网络命令恢复记录

一天莫名奇妙发现ping dig 等基础命令都无法正常使用。还好能浏览器能正常访问&#xff0c;&#xff0c;&#xff0c;&#xff0c; 赶紧拿baidu试试^-^ ; <<>> DiG 9.10.6 <<>> baidu.com ;; global options: cmd ;; connection timed out; no serve…...

2024最新!!Java后端面试题(4)看这一篇就够了!!!!

七、异常 throw 和 throws 的区别&#xff1f; throw用来显式地抛出一个异常&#xff0c;而throws则用于在方法声明中指明该方法可能抛出的异常。简单来说&#xff0c;throw是抛出异常的实际动作&#xff0c;throws是告知调用者这个方法可能会抛出哪些异常的声明。 final、f…...

springboot整合sentinel和对feign熔断降级

一、准备 docker安装好sentinel-dashboard&#xff08;sentinel控制台&#xff09;&#xff0c;参考docker安装好各个组件的命令启动sentinel-dashboard&#xff0c;我的虚拟机ip为192.168.200.131&#xff0c;sentinel-dashboard的端口为8858 二、整合sentinel的主要工作 在…...

遗传算法与深度学习实战——使用进化策略实现EvoLisa

遗传算法与深度学习实战——使用进化策略实现EvoLisa 0. 前言1. 使用进化策略实现 EvoLisa2. 运行结果相关链接 0. 前言 我们已经学习了进化策略 (Evolutionary Strategies, ES) 的基本原理&#xff0c;并且尝试使用 ES 解决了函数逼近问题。函数逼近是一个很好的基准问题&…...

HttpServletRequest简介

HttpServletRequest是什么&#xff1f; HttpServletRequest是一个接口&#xff0c;其父接口是ServletRequest&#xff1b;HttpServletRequest是Tomcat将请求报文转换封装而来的对象&#xff0c;在Tomcat调用service方法时传入&#xff1b;HttpServletRequest代表客户端发来的请…...

c++开发之编译curl(安卓版本)

为了在 Android 上编译支持 OpenSSL 的 libcurl&#xff0c;你需要手动编译 libcurl 和 OpenSSL&#xff0c;并确保它们能够在 Android 的交叉编译环境中正常工作。以下是详细的步骤说明。 1. 安装必要工具 在编译之前&#xff0c;确保你已经安装了以下工具&#xff1a; And…...

QT+ESP8266+STM32项目构建三部曲三--QT从环境配置到源程序的解析

一、阿里云环境配置 大家在编写QT连接阿里云的程序之前&#xff0c;先按照下面这篇文章让消息可以在阿里云上顺利流转 QTESP8266STM32项目构建三部曲二--阿里云云端处理之云产品流转-CSDN博客文章浏览阅读485次&#xff0c;点赞7次&#xff0c;收藏4次。创建两个设备&#xff…...

Web APIs 5:Window对象(BOM)+本地存储

Web APIs 5&#xff08;BOM&#xff1a;Window对象本地存储&#xff09; 1.BOM(浏览器对象模型)&#xff08;后面几个对象都为BOM对象&#xff09; BOM对象包含&#xff1a;navigator、location、document(DOM对象)、history、screenBOM是一个全局对象&#xff0c;即JS中的顶…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...