Commit 5109f462 by 李定达

1.添加冲正策略 完成 10%

parent a96ba83d
LIBS += -L"C:/openssl/openssl-1.0.1s/out32dll" -llibeay32 LIBS += -L"C:/openssl/openssl-1.0.1s/out32dll" -llibeay32
LIBS += -L"C:/openssl/openssl-1.0.1s/out32dll" -lssleay32 LIBS += -L"C:/openssl/openssl-1.0.1s/out32dll" -lssleay32
LIBS += -lIPHLPAPI
INCLUDEPATH += $$quote(C:/openssl/openssl-1.0.1s/inc32/) INCLUDEPATH += $$quote(C:/openssl/openssl-1.0.1s/inc32/)
HEADERS += \ HEADERS += \
$$PWD/dataprocess.h \ $$PWD/dataprocess.h \
$$PWD/fmglobal.h \ $$PWD/fmglobal.h \
$$PWD/cretopt.h $$PWD/cretopt.h \
$$PWD/fmp_database.h \
$$PWD/tools.h \
$$PWD/rollback.h \
$$PWD/fmnetwork.h
SOURCES += \
$$PWD/fmp_database.cpp \
$$PWD/rollback.cpp \
$$PWD/fmnetwork.cpp
...@@ -3,35 +3,65 @@ ...@@ -3,35 +3,65 @@
#include "dataprocess.h" #include "dataprocess.h"
#include <string>
#include <QFile> #include <QFile>
#include <QString> #include <QString>
#include <QJsonObject> #include <QJsonObject>
#include <QJsonDocument> #include <QJsonDocument>
#include <Windows.h>
#include "QsLog.h" #include "QsLog.h"
#include "DataProcess/tools.h"
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
class CretOperate class CretOperate
{ {
public: public:
static void GetProcPath(char * pathBuf) static bool GetDES3MAC(QJsonObject &json, QString &mac = QString())
{ {
int curPos; std::string tmpmac;
GetModuleFileNameA((HMODULE)&__ImageBase, pathBuf, MAX_PATH); if(ToolS::GetMacByGetAdaptersAddresses(tmpmac) == 0)
{
QLOG_ERROR() << "get MAC failed";
return false;
}
char outmsg[4096] = {0};
if(DataProcess::DES3Encode((const unsigned char *)DES3_KEY, tmpmac.data(), strlen(tmpmac.data()), (unsigned char *)outmsg, 4096) == 0)
{
QLOG_ERROR() << "DES3 MAC failed";
return false;
}
mac = QString(outmsg);
json.insert(JSON_KEY_MAC, mac);
QLOG_INFO() << mac;
return true;
}
curPos = strlen(pathBuf) - 1; static bool GetMAC(QJsonObject &json, QString &mac = QString())
{
std::string tmpmac;
while('\\' != pathBuf[curPos]) if(ToolS::GetMacByGetAdaptersAddresses(tmpmac) == 0)
{ {
curPos--; QLOG_ERROR() << "get MAC failed";
return false;
} }
curPos++; mac = QString::fromStdString(tmpmac);
json.insert(JSON_KEY_MAC, mac);
pathBuf[curPos] = '\0'; QLOG_INFO() << mac;
return true;
}
static bool RSASign(QJsonObject &json, QString &sign)
{
return true;
} }
static bool GetSign(QJsonObject &json, QString &sign = QString()) static bool GetSign(QJsonObject &json, QString &sign = QString())
...@@ -68,7 +98,56 @@ public: ...@@ -68,7 +98,56 @@ public:
static bool SetRSACret(QString &des3text) static bool SetRSACret(QString &des3text)
{ {
QByteArray array = des3text.toUtf8();
char rps[MAX_BUF_LEN] = {0};
char *buf = (char *)calloc(array.size() + 100, sizeof(char));
if(DataProcess::DES3Decode((const unsigned char *)DES3_KEY, buf, strlen(buf), (unsigned char *)rps, MAX_BUF_LEN) == 0)
{
QLOG_ERROR() << "DES3Decode des3text Failed";
return false;
}
QJsonDocument jsonDocument = QJsonDocument::fromJson(QByteArray(rps));
if( jsonDocument.isNull() )
{
QLOG_ERROR() << "DES3Decode not json:" << rps;
return false;
}
QJsonObject json = jsonDocument.object();
if(!json.contains(JSON_KEY_STATUS) || json[JSON_KEY_STATUS].toInt() != 100)
{
QLOG_ERROR() << "error des3text file:" << json;
return false;
}
char path[MAX_PATH] = { 0 };
ToolS::GetProcPath(path);
QString p12path(path);
p12path.append(CRET_FILE_NAME);
QFile file(p12path);
if(!file.open(QFile::WriteOnly))
{
QLOG_ERROR() << QString("open %1 failed").arg(p12path);
return false;
}
file.write(array);
file.flush();
file.close();
QLOG_INFO() << "write client.p12 success";
return true;
} }
private: private:
...@@ -76,7 +155,7 @@ private: ...@@ -76,7 +155,7 @@ private:
{ {
char path[MAX_PATH] = { 0 }; char path[MAX_PATH] = { 0 };
GetProcPath(path); ToolS::GetProcPath(path);
QString p12path(path); QString p12path(path);
......
#include "fmnetwork.h"
FMNetWork::FMNetWork(QObject *parent) : QObject(parent)
{
}
#ifndef FMNETWORK_H
#define FMNETWORK_H
#include <QObject>
class FMNetWork : public QObject
{
Q_OBJECT
public:
explicit FMNetWork(QObject *parent = 0);
void HttpPost(QString url, QStringList &headlist);
};
#endif // FMNETWORK_H
#include "fmp_database.h"
#include <QDebug>
#include <QSqlError>
#include <QSqlQuery>
#include <QVariantHash>
#include <QSqlQueryModel>
#include "QsLog.h"
FMPDataBase::FMPDataBase(QString dbname, QString connectname, QObject *parent) : QObject(parent)
{
_db = QSqlDatabase::addDatabase("QSQLITE", connectname);
_db.setDatabaseName(dbname);
_isopen = _db.open();
}
FMPDataBase::~FMPDataBase()
{
if(_isopen)
_db.close();
}
bool FMPDataBase::creat(QString sql)
{
if(!_isopen)
return false;
QSqlQuery query(_db);
bool flag = query.exec(sql);
if(!flag)
QLOG_WARN() << query.lastError();
return flag;
}
bool FMPDataBase::dlt(QString table, QString condition)
{
if(!_isopen)
return false;
QString sql = QString("delete from %1 where %2").arg(table, condition);
QSqlQuery query(_db);
bool flag = query.exec(sql);
if(!flag)
QLOG_WARN() << query.lastError();
return flag;
}
bool FMPDataBase::insert(QString table, QVariantHash data)
{
if(!_isopen)
return false;
QString sql;
QStringList columnnamelist;
QStringList columnvaluelist;
if(!getSql(table, data, columnnamelist, columnvaluelist))
{
_db.close();
return false;
}
QSqlQuery query(_db);
sql = QString("insert into %1 (").arg(table) + columnnamelist.join(", ") + ") values (" + columnvaluelist.join(", ") + ")";
QLOG_WARN() << "inset sql : " << sql;
qDebug() << "inset sql : " << sql;
bool flag = query.exec(sql);
if(!flag)
QLOG_WARN() << query.lastError();
return flag;
}
bool FMPDataBase::update(QString table, QVariantHash data, QString condition)
{
if(!_isopen)
return false;
QString sql;
if(!getSql(table, data, sql))
{
_db.close();
return false;
}
QSqlQuery query(_db);
sql = QString("update %1 set ").arg(table) + sql + " where " + condition;
QLOG_INFO() << "update sql : " << sql;
bool flag = query.exec(sql);
if(!flag)
QLOG_WARN() << query.lastError();
return flag;
}
bool FMPDataBase::find(QString table, QSqlQuery &query, QStringList keylist, QString condition)
{
if(!_isopen)
return false;
QSqlQuery tmpquery(_db);
QString sql = "select ";
if(keylist.size() != 0)
sql += keylist.join(", ");
else
sql += "*";
if(condition == "")
condition = "1=1";
sql += QString(" from %1 where ").arg(table) + condition;
QLOG_INFO() << "find sql : " << sql;
bool flag = tmpquery.exec(sql);
if(!flag)
QLOG_WARN() << tmpquery.lastError();
query = tmpquery;
return flag;
}
bool FMPDataBase::getSql(QString table, QVariantHash data, QStringList& columnnamelist, QStringList& columnvaluelist)
{
QSqlQuery query(_db);
QString tmpsql = QString("PRAGMA table_info(%1)").arg(table);
query.exec(tmpsql);
while(query.next())
{
QString columnname = query.value(1).toString();
if(data.contains(columnname))
{
/**
*add support type;
* */
// switch (data.value(columnname).type()) {
// case QVariant::Int:
// columnnamelist.append(columnname);
// columnvaluelist.append(QString("'") + QString::number(data.value(columnname).toInt()) + "'");
// break;
// case QVariant::String:
// columnnamelist.append(columnname);
// columnvaluelist.append(QString("'") + data.value(columnname).toString() + "'");
// break;
// case QVariant::Bool:
// columnnamelist.append(columnname);
// columnvaluelist.append(QString("'") + QString::number(data.value(columnname).toBool()? 1 : 0) + "'");
// break;
// default:
// break;
// }
columnnamelist.append(columnname);
columnvaluelist.append(QString("'") + data.value(columnname).toString() + "'");
}
continue ;
}
if(columnnamelist.size() == 0)
return false;
return true;
}
QSqlDatabase FMPDataBase::getDb() const
{
return _db;
}
bool FMPDataBase::getSql(QString table, QVariantHash data, QString& sql)
{
QSqlQuery query(_db);
QString tmpsql = QString("PRAGMA table_info(%1)").arg(table);
query.exec(tmpsql);
QStringList list;
while(query.next())
{
QString columnname = query.value(1).toString();
if(data.contains(columnname))
{
/**
*add support type(mysql/sqlserver/...);
* */
// switch (data.value(columnname).type()) {
// case QVariant::Int:
// list.append(columnname + " = '" + QString::number(data.value(columnname).toInt()) + "'");
// break;
// case QVariant::String:
// list.append(columnname + " = '" + data.value(columnname).toString() + "'");
// break;
// case QVariant::Bool:
// list.append(columnname + " = '" + QString::number(data.value(columnname).toBool()? 1 : 0) + "'");
// break;
// default:
// break;
// }
/**
* sqlite
* */
list.append(columnname + " = '" + data.value(columnname).toString() + "'");
}
continue ;
}
if(list.size() == 0)
return false;
sql = list.join(", ");
return true;
}
#ifndef FMP_DATABASE_H
#define FMP_DATABASE_H
#include <QObject>
#include <QSqlDatabase>
class FMPLoggerInterface;
class QSqlQuery;
class QSqlDatabase;
class FMPDataBase : public QObject
{
Q_OBJECT
public:
FMPDataBase(QString dbname, QString connectname = QString("ROOLBACK"), QObject *parent = 0);
~FMPDataBase();
bool insert(QString table, QVariantHash data);
bool update(QString table, QVariantHash data, QString condition);
bool find(QString table, QSqlQuery &query, QStringList keylist = QStringList(), QString condition = QString(""));
bool creat(QString sql);
bool dlt(QString table, QString condition);
QSqlDatabase getDb() const;
private:
bool exist(QString table);
bool getSql(QString table, QVariantHash data, QString &sql);
bool getSql(QString table, QVariantHash data, QStringList &columnnamelist, QStringList &columnvaluelist);
private:
QSqlDatabase _db;
bool _isopen;
};
#endif // FMP_DATABASE_H
#include "rollback.h"
#include "fmglobal.h"
#include <QSqlQuery>
RollBack::RollBack(QObject *parent) : QThread(parent)
{
_db = new FMPDataBase(DB_ORDER, QString("rollback"));
}
RollBack::~RollBack()
{
requestInterruption();
wait();
if(_db != NULL)
{
delete _db;
_db = NULL;
}
}
void RollBack::run()
{
while(isInterruptionRequested())
{
}
}
#ifndef ROLLBACK_H
#define ROLLBACK_H
#include <QThread>
#include <QPointer>
#include "fmp_database.h"
class RollBack : public QThread
{
Q_OBJECT
public:
RollBack(QObject *parent = 0);
~RollBack();
void run();
private:
FMPDataBase *_db;
};
#endif // ROLLBACK_H
#ifndef TOOLS
#define TOOLS
#include <winsock2.h>
#include <iphlpapi.h>
#include <Windows.h>
#include <string>
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
class ToolS
{
public:
static void GetProcPath(char * pathBuf)
{
int curPos;
GetModuleFileNameA((HMODULE)&__ImageBase, pathBuf, MAX_PATH);
curPos = strlen(pathBuf) - 1;
while('\\' != pathBuf[curPos])
{
curPos--;
}
curPos++;
pathBuf[curPos] = '\0';
}
static int GetMacByGetAdaptersAddresses(std::string& macOUT)
{
bool ret = 0;
ULONG outBufLen = sizeof(IP_ADAPTER_ADDRESSES);
PIP_ADAPTER_ADDRESSES pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(outBufLen);
if (pAddresses == NULL)
return 0;
// Make an initial call to GetAdaptersAddresses to get the necessary size into the ulOutBufLen variable
if(GetAdaptersAddresses(AF_UNSPEC, 0, NULL, pAddresses, &outBufLen) == ERROR_BUFFER_OVERFLOW)
{
free(pAddresses);
pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(outBufLen);
if (pAddresses == NULL)
return 0;
}
if(GetAdaptersAddresses(AF_UNSPEC, 0, NULL, pAddresses, &outBufLen) == NO_ERROR)
{
for(PIP_ADAPTER_ADDRESSES pCurrAddresses = pAddresses; pCurrAddresses != NULL; pCurrAddresses = pCurrAddresses->Next)
{
if(pCurrAddresses->PhysicalAddressLength != 6)
continue;
char acMAC[32];
sprintf(acMAC, "%02X-%02X-%02X-%02X-%02X-%02X",
int (pCurrAddresses->PhysicalAddress[0]),
int (pCurrAddresses->PhysicalAddress[1]),
int (pCurrAddresses->PhysicalAddress[2]),
int (pCurrAddresses->PhysicalAddress[3]),
int (pCurrAddresses->PhysicalAddress[4]),
int (pCurrAddresses->PhysicalAddress[5]));
macOUT = acMAC;
ret = 1;
break;
}
}
free(pAddresses);
return ret;
}
};
#endif // TOOLS
...@@ -15,29 +15,30 @@ ...@@ -15,29 +15,30 @@
#include <QApplication> #include <QApplication>
#include <QJsonDocument> #include <QJsonDocument>
#include <Windows.h> #include <Windows.h>
#include "DataProcess/tools.h"
EXTERN_C IMAGE_DOS_HEADER __ImageBase; //EXTERN_C IMAGE_DOS_HEADER __ImageBase;
typedef int (__stdcall *GetValue) (char *, char *); typedef int (__stdcall *GetValue) (char *, char *);
typedef int (__stdcall *GetRSACret)(int ,const char *,const char *); typedef int (__stdcall *GetRSACret)(int ,const char *,const char *);
void Control::GetProcPath(char * pathBuf) //void Control::GetProcPath(char * pathBuf)
{ //{
int curPos; // int curPos;
GetModuleFileNameA((HMODULE)&__ImageBase, pathBuf, MAX_PATH); // GetModuleFileNameA((HMODULE)&__ImageBase, pathBuf, MAX_PATH);
curPos = strlen(pathBuf) - 1; // curPos = strlen(pathBuf) - 1;
while('\\' != pathBuf[curPos]) // while('\\' != pathBuf[curPos])
{ // {
curPos--; // curPos--;
} // }
curPos++; // curPos++;
pathBuf[curPos] = '\0'; // pathBuf[curPos] = '\0';
} //}
Control::Control(QObject *parent) : QObject(parent), _widget(NULL) Control::Control(QObject *parent) : QObject(parent), _widget(NULL)
{ {
...@@ -51,7 +52,7 @@ void Control::Start(const char *indata, char *outdata) ...@@ -51,7 +52,7 @@ void Control::Start(const char *indata, char *outdata)
QString appPath; QString appPath;
char pathStr[MAX_PATH] = { 0 }; char pathStr[MAX_PATH] = { 0 };
GetProcPath(pathStr); ToolS::GetProcPath(pathStr);
appPath = QString::fromLocal8Bit(pathStr); appPath = QString::fromLocal8Bit(pathStr);
QFontDatabase::addApplicationFont(appPath + "\\msyh.ttf"); QFontDatabase::addApplicationFont(appPath + "\\msyh.ttf");
QFont ft("Microsoft YaHei UI Light"); QFont ft("Microsoft YaHei UI Light");
...@@ -124,7 +125,7 @@ bool Control::SendMessageToPayMent(const QJsonObject &json, QByteArray &outdata, ...@@ -124,7 +125,7 @@ bool Control::SendMessageToPayMent(const QJsonObject &json, QByteArray &outdata,
char mod[MAX_PATH] = { 0 }; char mod[MAX_PATH] = { 0 };
GetProcPath(mod); ToolS::GetProcPath(mod);
QLibrary lib(QString(mod) + "\\" + "FreemudWrapper.dll"); QLibrary lib(QString(mod) + "\\" + "FreemudWrapper.dll");
...@@ -137,6 +138,9 @@ bool Control::SendMessageToPayMent(const QJsonObject &json, QByteArray &outdata, ...@@ -137,6 +138,9 @@ bool Control::SendMessageToPayMent(const QJsonObject &json, QByteArray &outdata,
if(getvalue != NULL) if(getvalue != NULL)
{ {
QEventLoop loop; QEventLoop loop;
connect(_widget, &HostWidget::Interrupt, &loop, &QEventLoop::quit);
QFuture<QByteArray> future = QtConcurrent::run( [ this, &loop, json, getvalue]() ->QByteArray QFuture<QByteArray> future = QtConcurrent::run( [ this, &loop, json, getvalue]() ->QByteArray
{ {
char in[MAX_BUF_LEN] = {0}; char in[MAX_BUF_LEN] = {0};
...@@ -179,7 +183,7 @@ bool Control::GetRSA(QString &error) ...@@ -179,7 +183,7 @@ bool Control::GetRSA(QString &error)
{ {
char mod[MAX_PATH] = { 0 }; char mod[MAX_PATH] = { 0 };
GetProcPath(mod); ToolS::GetProcPath(mod);
QLibrary lib(QString(mod) + "\\" + "FreemudWrapper.dll"); QLibrary lib(QString(mod) + "\\" + "FreemudWrapper.dll");
int rlt = 0; int rlt = 0;
......
...@@ -18,7 +18,7 @@ public: ...@@ -18,7 +18,7 @@ public:
void Start(const char *indata, char *outdata); void Start(const char *indata, char *outdata);
static void GetProcPath(char *pathBuf); //static void GetProcPath(char *pathBuf);
signals: signals:
void Exits(); void Exits();
......
...@@ -39,6 +39,8 @@ signals: ...@@ -39,6 +39,8 @@ signals:
void Exits(); void Exits();
void Interrupt();
protected: protected:
void keyPressEvent(QKeyEvent *ke); void keyPressEvent(QKeyEvent *ke);
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.5.1, 2017-08-25T00:09:40. --> <!-- Written by QtCreator 3.5.1, 2017-08-25T11:52:01. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment