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