Files
2023-03-31 14:09:24 +08:00

253 lines
7.6 KiB
C++

#include "widget.h"
#include "ui_widget.h"
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
setWindowTitle("Clear加密授权工具V2.0");
QDir dir(QApplication::applicationDirPath() + "/fix");
if(!dir.exists()) dir.mkpath(QApplication::applicationDirPath() + "/fix");
deleteDir(QApplication::applicationDirPath() + "/fix",false);
}
Widget::~Widget()
{
delete ui;
}
bool Widget::deleteDir(const QString &path,bool DeleteDir)
{
if (path.isEmpty())
{
return false;
}
QDir dir(path);
if(!dir.exists())
{
return true;
}
dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot); //设置过滤
QFileInfoList fileList = dir.entryInfoList(); // 获取所有的文件信息
foreach (QFileInfo file, fileList)
{ //遍历文件信息
if (file.isFile())
{ // 是文件,删除
file.dir().remove(file.fileName());
}else
{ // 递归调用函数,删除子文件夹
deleteDir(file.absoluteFilePath(),true);
}
}
if(DeleteDir)
{
return dir.rmpath(dir.absolutePath()); // 这时候文件夹已经空了,再删除文件夹本身
}
else
{
return true;
}
}
void Widget::on_pushButton_clicked()
{
ui->lineEdit_2->setText( get_ClearMD532(ui->lineEdit->text()) );
QByteArray base =ui->lineEdit_3->text().toLatin1();
ui->lineEdit_4->setText( QString(base.toBase64().toBase64()) );
QFile file(QApplication::applicationDirPath() + "/fix/Qt5Server.txt");
if(file.open(QIODevice::ReadWrite|QIODevice::Text))
{
QString temp1 ="[All]";
// 将内容写入文件
QTextStream out(&file);
out << "[config]";
out << "\n";
out << "ClearPM=";
out << ui->lineEdit_2->text();
out << "\n";
out << "ClearPM2=";
out << ui->lineEdit_4->text();
out << "\n";
file.close();
QFile file2(QApplication::applicationDirPath() + "/fix/Qt5Server.txt");
bool ok = file2.rename(QApplication::applicationDirPath() + "/fix/Qt5Server.dll");
//重命名成功返回true,失败返回false
//也可以直接调用
}
else
{
qDebug()<<"failed to create a new file!";
}
}
//pro文件加上network #include <QCryptographicHash>
//void getcpuidex(unsigned int CPUInfo[4], unsigned int InfoType, unsigned int ECXValue)
//{
//#if defined(_MSC_VER) // MSVC
//#if defined(_WIN64) // 64位下不支持内联汇编. 1600: VS2010, 据说VC2008 SP1之后才支持__cpuidex.
// __cpuidex((int*)(void*)CPUInfo, (int)InfoType, (int)ECXValue);
//#else
// if (NULL==CPUInfo) return;
// _asm{
// // load. 读取参数到寄存器.
// mov edi, CPUInfo;
// mov eax, InfoType;
// mov ecx, ECXValue;
// // CPUID
// cpuid;
// // save. 将寄存器保存到CPUInfo
// mov [edi], eax;
// mov [edi+4], ebx;
// mov [edi+8], ecx;
// mov [edi+12], edx;
// }
//#endif
//#endif
//}
//void getcpuid(unsigned int CPUInfo[4], unsigned int InfoType)
//{
//#if defined(__GNUC__)// GCC
// __cpuid(InfoType, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]);
//#elif defined(_MSC_VER)// MSVC
//#if _MSC_VER >= 1400 //VC2005才支持__cpuid
// __cpuid((int*)(void*)CPUInfo, (int)(InfoType));
//#else //其他使用getcpuidex
// getcpuidex(CPUInfo, InfoType, 0);
//#endif
//#endif
//}
//QString get_cpuId()
//{
// QString cpu_id = "";
// unsigned int dwBuf[4]={0};
// unsigned long long ret = 0;
// getcpuid(dwBuf, 1);
// ret = dwBuf[3];
// ret = ret << 32;
// QString str0 = QString::number(dwBuf[3], 16).toUpper();
// QString str0_1 = str0.rightJustified(8,'0');//这一句的意思是前面补0,但是我遇到的情况是这里都填满了
// QString str1 = QString::number(dwBuf[0], 16).toUpper();
// QString str1_1 = str1.rightJustified(8,'0');//这里必须在前面补0,否则不会填满数据
// //cpu_id = cpu_id + QString::number(dwBuf[0], 16).toUpper();
// cpu_id = str0_1 + str1_1;
// return cpu_id;
//}
QString Widget::get_ClearMD532(QString in)
{
in="Clear"+in;
QByteArray bytePwd = in.toLatin1();
QByteArray bytePwdMd5 = QCryptographicHash::hash(bytePwd, QCryptographicHash::Md5);
QString strPwdMd5 = bytePwdMd5.toHex();
return strPwdMd5;
}
//qint32 getWebTime()//获取网络时间
//{
// QUdpSocket udpSocket;
// udpSocket.connectToHost("time.windows.com", 123);
// if(udpSocket.waitForConnected(3000))
// {
// qint8 LI=0;
// qint8 VN=3;
// qint8 MODE=3;
// qint8 STRATUM=0;
// qint8 POLL=4;
// qint8 PREC=-6;
// QDateTime epoch(QDate(1900,1,1));
// qint32 second=quint32(epoch.secsTo(QDateTime::currentDateTime()));
// qint32 temp=0;
// QByteArray timeRequest(48, 0);
// timeRequest[0]=(LI <<6) | (VN <<3) | (MODE);
// timeRequest[1]=STRATUM;
// timeRequest[2]=POLL;
// timeRequest[3]=PREC & 0xff;
// timeRequest[5]=1;
// timeRequest[9]=1;
// timeRequest[40]=(temp=(second&0xff000000)>>24);
// temp=0;
// timeRequest[41]=(temp=(second&0x00ff0000)>>16);
// temp=0;
// timeRequest[42]=(temp=(second&0x0000ff00)>>8);
// temp=0;
// timeRequest[43]=((second&0x000000ff));
// udpSocket.flush();
// udpSocket.write(timeRequest);
// udpSocket.flush();
// if(udpSocket.waitForReadyRead(3000))
// {
// QByteArray newTime;
// QDateTime epoch(QDate(1900, 1, 1));
// QDateTime unixStart(QDate(1970, 1, 1));
// do
// {
// newTime.resize(udpSocket.pendingDatagramSize());
// udpSocket.read(newTime.data(), newTime.size());
// }while(udpSocket.hasPendingDatagrams());
// QByteArray TransmitTimeStamp ;
// TransmitTimeStamp=newTime.right(8);
// quint32 seconds=TransmitTimeStamp[0];
// quint8 temp=0;
// for(int j=1;j<=3;j++)
// {
// seconds=seconds<<8;
// temp=TransmitTimeStamp[j];
// seconds=seconds+temp;
// }
// quint32 t = seconds-epoch.secsTo(unixStart);
// return t;
//// time.setTime_t(seconds-epoch.secsTo(unixStart));
// }
// }
// return -1;
//}
//bool IsTimeOk(QString ClearPM2)
//{
// QByteArray PM2_1 = ClearPM2.toLatin1();//1.把String转为QByteArray
// QByteArray PM2_2 = QByteArray::fromBase64(PM2_1);//2.base64解密第一次
// QString PM2_3=QString(QByteArray::fromBase64(PM2_2));//3.Base64解密第二次 并转换为String
// QDateTime PM2_4=QDateTime::fromString(PM2_3,"yyyyMMddhhmm");//4.将解密出来的字符串转换为时间格式
// if(!(PM2_4.isValid())) //5.如果解密出来的字符串不符合日期格式 直接认为失败
// return false;
// qint32 LocalTime = getWebTime();//获取网络时间戳
// if(LocalTime==-1)//如果失败 尝试本地时间
// {
// qDebug()<<"webError";
// QDateTime current_date_time =QDateTime::currentDateTime();//获取本地时间
// LocalTime=current_date_time.toTime_t();
// }
// if(PM2_4.toTime_t()>LocalTime)//判断授权结束日期是否晚于当前时间
// {
// return true;
// }
// else
// {
// return false;
// }
//}
void Widget::on_pushButton_2_clicked()
{
QDesktopServices::openUrl(QUrl(QApplication::applicationDirPath() + "/fix",QUrl::TolerantMode));
}