⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qqinfo.h

📁 QQ自动登陆器
💻 H
字号:
#ifndef __QQ_INFO__
#define __QQ_INFO__

#include "stdafx.h"
#include "Base64.h"
#include "ConvertAsciiChrHex.h"
//#include "common.h"
// QQ登陆所需要的信息
class QQInfo
{
public:
	QQInfo(CString QQNumber, CString QQName, CString QQPWDMD5Hex,
		CString QQStatus = "在线", CString QQUsOrNot = "挂")
	{
		this->QQNumber = QQNumber;
		this->QQName = QQName;
		this->QQPWDMD5Hex = QQPWDMD5Hex;
		this->QQStatus = QQStatus;
		this->QQUsOrNot = QQUsOrNot;

		QQNameHex = AsciiStrToHexStr(QQName);
		EnCodeQQPWDStr();
		HashQQPWD();
		SetQQStatusNbr(QQStatus);
		EnCodeConfStr();
	}

	QQInfo(CString QQConfStr)
	{
		this->QQConfStr = QQConfStr;
		DecodeConfStr();

		QQName = HexStrToAsciiStr(QQNameHex);
		DeCodeQQPWDStr();
		HashQQPWD();
		SetQQStatusNbr(QQStatus);
	}

	QQInfo(const QQInfo& oldQQ)
	{
		QQNumber = oldQQ.QQNumber;
		QQName = oldQQ.QQName;
		QQNameHex = oldQQ.QQNameHex;
		QQPWDMD5Hex = oldQQ.QQPWDMD5Hex;
		QQPWDMD5HexCP = oldQQ.QQPWDMD5HexCP;
		QQPWDHASH = oldQQ.QQPWDHASH;
		QQStatus = oldQQ.QQStatus;
		QQStatusNbr = oldQQ.QQStatusNbr;
		QQUsOrNot = oldQQ.QQUsOrNot;
		QQConfStr = oldQQ.QQConfStr;
	}
	
	const QQInfo& QQInfo::operator=(const QQInfo& oldQQ)
	{
		if (&oldQQ == this)
		{
			return *this;
		}
		
		QQNumber = oldQQ.QQNumber;
		QQName = oldQQ.QQName;
		QQNameHex = oldQQ.QQNameHex;
		QQPWDMD5Hex = oldQQ.QQPWDMD5Hex;
		QQPWDMD5HexCP = oldQQ.QQPWDMD5HexCP;
		QQPWDHASH = oldQQ.QQPWDHASH;
		QQStatus = oldQQ.QQStatus;
		QQStatusNbr = oldQQ.QQStatusNbr;
		QQUsOrNot = oldQQ.QQUsOrNot;
		QQConfStr = oldQQ.QQConfStr;
		
		return *this;
	}

	void SetQQUsOrNot(CString QQUsOrNot)
	{
		if (QQUsOrNot == "挂" || QQUsOrNot == "停")
		{
			this->QQUsOrNot = QQUsOrNot;
			EnCodeConfStr();
		}
	}

	CString GetQQNbr()
	{
		return QQNumber;
	}

	CString GetQQName()
	{
		return QQName;
	}

	CString GetQQStat()
	{
		return QQStatus;
	}

	BOOL IsUsing()
	{
		if (QQUsOrNot == "挂")
		{
			return TRUE;
		} 
		else if (QQUsOrNot == "停")
		{
			return FALSE;
		} 
		else
		{
			// 错误: 未知使用状态类型
		}
		return TRUE;
	}

	// 是否相同QQ号
	BOOL IsDup(CString QQNumber)
	{
		if (this->QQNumber == QQNumber)
		{
			return TRUE;
		}
		else
		{
			return FALSE;
		}
	}

	void GetQQInfo(CString& QQNumber, CString& QQName, CString& QQPWD, BOOL& LogonStatus)
	{
		QQNumber = this->QQNumber;
		QQName = this->QQName;
		QQPWD = _T("");
		LogonStatus = (QQStatus=="在线")?FALSE:TRUE;
	}

	CString GetQQStatusNbr(CString QQStatus = "")
	{
		if (QQStatus != "")
		{
			SetQQStatusNbr(QQStatus);
		}
		return QQStatusNbr;
	}

	CString GetQQLogonStr()
	{
		CString QQLogonStr = CString("/START QQUIN:") + QQNumber 
			+ CString(" PWDHASH:") + QQPWDHASH
			+ CString(" /STAT:") + QQStatusNbr; // 40为隐身
		return QQLogonStr;
	}

	CString GetConfStr()
	{
		return QQConfStr;
	}

	~QQInfo()
	{
	}
private:
	void SetQQStatusNbr(CString QQStatus)
	{
		if (QQStatus == "在线")
		{
			QQStatusNbr = "41";
		}
		else if (QQStatus == "隐身")
		{
			QQStatusNbr = "40";
		}
		else
		{
			// 错误: 未知登录状态类型
		}
	}

	void HashQQPWD()
	{
		unsigned char PWDMD5MEM[16];
		char PWDHASH[25] = {0};
		HexStrToMem(QQPWDMD5Hex, PWDMD5MEM);
		CBase64::EncodeBase64(PWDMD5MEM, PWDHASH, 16, 25);
		QQPWDHASH = CString(PWDHASH);
	}

	// 对QQ密码MD5HEX再处理
	void EnCodeQQPWDStr()
	{
		// 交换字母
		QQPWDMD5HexCP = QQPWDMD5Hex;
		QQPWDMD5HexCP.Replace('A', '+');
		QQPWDMD5HexCP.Replace('B', 'A');
		QQPWDMD5HexCP.Replace('+', 'B');
	}

	void DeCodeQQPWDStr()
	{
		QQPWDMD5Hex = QQPWDMD5HexCP;
		QQPWDMD5Hex.Replace('A', '+');
		QQPWDMD5Hex.Replace('B', 'A');
		QQPWDMD5Hex.Replace('+', 'B');
	}

	// QQUsing|QQNumber|QQNameHex|QQPWDMD5HexCP|QQStatus
	void EnCodeConfStr()
	{
		QQConfStr = QQUsOrNot + CString("|")
			+ QQNumber + CString("|")
			+ QQNameHex + CString("|")
			+ QQPWDMD5HexCP + CString("|")
			+ QQStatus;
	}

	void DecodeConfStr()
	{
		int QUseIdx = QQConfStr.Find('|');
		int QNbrIdx = QQConfStr.Find('|',QUseIdx+1);
		int QNameIdx = QQConfStr.Find('|',QNbrIdx+1);
		int QPWDIdx = QQConfStr.Find('|',QNameIdx+1);
		
		QQUsOrNot = QQConfStr.Left(QUseIdx);
		QQNumber = QQConfStr.Mid(QUseIdx+1, QNbrIdx-QUseIdx-1);
		QQNameHex = QQConfStr.Mid(QNbrIdx+1, QNameIdx-QNbrIdx-1);
		QQPWDMD5HexCP = QQConfStr.Mid(QNameIdx+1, QPWDIdx-QNameIdx-1);
		QQStatus = QQConfStr.Right(QQConfStr.GetLength()-QPWDIdx-1);
	}

private:
	CString QQNumber;
	CString QQName;
	CString QQNameHex;
	CString QQPWDMD5Hex;
	CString QQPWDMD5HexCP;
	CString QQPWDHASH;
	CString QQStatus;
	CString QQStatusNbr;
	CString QQUsOrNot;
	CString QQConfStr;
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -