Main.cpp from project SimpleBot by Skywing

This is Main.cpp from project SimpleBot. SimpleBot is a complete binary bot with a simple UI window + console, which you can talk to. It also supports basic remote access. SimpleBot is a quick demonstration of the capabilities of class BinaryBot, which allows rapid development and deployment of Battle.net binary bots.


#include "SimpleBot.h"

void __cdecl uithread(void *param) {
HWND mainwnd, hEditWindow;
HANDLE hTmp;
Event quitevent;
hTmp = quitevent;
char titlebuf[255];
GetConsoleTitle(titlebuf, sizeof(titlebuf));
SetConsoleTitle("finder");
while(!(mainwnd = FindWindow(0, "finder"))) ;
SetConsoleTitle(titlebuf);
hEditWindow = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "Send message",
ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SIZEBOX | WS_VISIBLE | WS_OVERLAPPED,
10, 10, 200, 50, mainwnd, 0, GetModuleHandle(0), 0);
// 10, 10, 200, 50, 0, 0, GetModuleHandle(0), 0);
MSG msg;
ShowWindow(hEditWindow, SW_SHOW);
UpdateWindow(hEditWindow);
while(true) {
if(MsgWaitForMultipleObjects(1, &hTmp, 0, INFINITE, QS_ALLINPUT) != WAIT_OBJECT_0 + 1)
break;
while(PeekMessage(&msg, hEditWindow, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
if(msg.message == WM_CHAR) {
if(msg.wParam == 13) {
bool wascmd = true;
char buf[512];
char msgbuf[512];
GetWindowText(hEditWindow, buf, 510);
SetWindowText(hEditWindow, "");
strtok(buf, "\r\n");
strcpy(msgbuf, buf);
if(psbBot->IsLoggedOn()) {
psbBot->SendText(msgbuf);
}
} else {
DispatchMessage(&msg);
}
} else {
DispatchMessage(&msg);
}
}
}
DestroyWindow(hEditWindow);
}

unsigned long ResolveHost(const char *hostname) {
ENCRYPT_START;
unsigned long result;
const char *checkhost = hostname;
while(*checkhost && (isdigit(*checkhost) || (*checkhost == '.')))
checkhost++;
if(*checkhost) {
hostent *resolve = 0;
resolve = gethostbyname(hostname);
if(resolve == 0) {
result = 0;
} else {
memcpy(&result, resolve->h_addr, resolve->h_length);
}
} else {
result = inet_addr(hostname);
}
ENCRYPT_END;
return result;
}

int main(int argc, char *argv[], char *envp[]) {
INITENCRYPT;
InitializeCRC32Table();
Event hEvent;
// hEvent.Wait();
// printf("%u\n", GetLastError());
SOCKET sSocket;
WinsockInstance winsock;
unsigned long Server = 0, SocksServer = 0;
char CDkey[32], username[16] = "Noname", password[255] = "Nopass", master[255] = "Skywing[vL]", channel[255] = "Clan Simple Bot";
unsigned long ret;
bool stop = false;
{
ENCRYPT_START_NAMED(block1);
FILE *config = fopen("SimpleBot.cfg", "rt");
if(config) {
char readstr[1024];
while(fgets(readstr, 1024, config)) {
strtok(readstr, "\r\n");
if(!strnicmp(readstr, "socks=", 6)) {
SocksServer = ResolveHost(readstr + 6);
if(!SocksServer)
printf("Warning: Bad SOCKS server!\n");
} else if(!strnicmp(readstr, "cdkey=", 6)) {
strcpy(CDkey, readstr + 6);
} else if(!strnicmp(readstr, "server=", 7)) {
Server = ResolveHost(readstr + 7);
if(!Server)
printf("Fatal error: Bad Battle.net server!\n");
} else if(!strnicmp(readstr, "username=", 9)) {
strcpy(username, readstr + 9);
} else if(!strnicmp(readstr, "password=", 9)) {
strcpy(password, readstr + 9);
} else if(!strnicmp(readstr, "master=", 7)) {
strcpy(master, readstr + 7);
} else if(!strnicmp(readstr, "homechannel=", 12)) {
strcpy(channel, readstr + 12);
}
}
fclose(config);
}
ENCRYPT_END;
}
_beginthread(uithread, 0, 0);
if(!Server)
return 0;
{
ENCRYPT_START_NAMED(block2);
psbBot = new SimpleBot(&sSocket, hEvent.GetHandle(), username, password, CDkey, Server, SocksServer);
psbBot->SetHomeChannel(channel);
psbBot->SetMaster(master);
psbBot->Connect(SocksServer ? BinaryBot::SOCKS5 : BinaryBot::PLAIN);
ENCRYPT_END;
}
while(stop == false) {
ENCRYPT_START_NAMED(block3);
switch(ret=hEvent.Wait()) {
case WAIT_TIMEOUT:
psbBot->Connect(SocksServer ? BinaryBot::SOCKS5 : BinaryBot::PLAIN);
case WAIT_FAILED:
stop = true;
break;
case WAIT_OBJECT_0:
switch(psbBot->DispatchEvent()) {
case BinaryBot::DISCONNECTED:
psbBot->Output->WriteEx(ConsoleOutput::RED, "Disconnected!\n");
psbBot->Connect(SocksServer ? BinaryBot::SOCKS5 : BinaryBot::PLAIN);
break;
case BinaryBot::CONNECTED:
psbBot->Output->WriteEx(ConsoleOutput::GREEN, "Connected!\n");
if(!psbBot->SendStartup()) {
psbBot->Output->WriteEx(ConsoleOutput::RED, "Disconnected while sending startup!\n");
psbBot->Connect(SocksServer ? BinaryBot::SOCKS5 : BinaryBot::PLAIN);
}
break;
case BinaryBot::SENDVERSIONCHECK:
psbBot->Output->WriteEx(ConsoleOutput::GRAY, "Checking versions...\n");
if(!psbBot->SendVersionCheck()) {
psbBot->Output->WriteEx(ConsoleOutput::RED, "Error executing version check!\n");
psbBot->Connect(SocksServer ? BinaryBot::SOCKS5 : BinaryBot::PLAIN);
}
break;
case BinaryBot::SENDCDKEY:
psbBot->Output->WriteEx(ConsoleOutput::GRAY, "Sending CD-key...\n");
if(!psbBot->SendCDkey()) {
psbBot->Output->WriteEx(ConsoleOutput::RED, "Error sending CD-key!\n");
psbBot->Connect(SocksServer ? BinaryBot::SOCKS5 : BinaryBot::PLAIN);
}
break;
case BinaryBot::LOGON:
psbBot->Output->WriteEx(ConsoleOutput::GRAY, "Logging on...\n");
if(!psbBot->SendLogon()) {
psbBot->Output->WriteEx(ConsoleOutput::RED, "Error sending logon!\n");
psbBot->Connect(SocksServer ? BinaryBot::SOCKS5 : BinaryBot::PLAIN);
}
break;
case BinaryBot::CREATEACCOUNT:
psbBot->Output->WriteEx(ConsoleOutput::GRAY, "Creating account...\n");
if(!psbBot->CreateAccount()) {
psbBot->Output->WriteEx(ConsoleOutput::RED, "Error sending account create!\n");
psbBot->Connect(SocksServer ? BinaryBot::SOCKS5 : BinaryBot::PLAIN);
}
break;
case BinaryBot::SENDSTATS:
psbBot->Output->WriteEx(ConsoleOutput::GREEN, "Logged on!\n");
if(!psbBot->SendStats()) {
psbBot->Output->WriteEx(ConsoleOutput::RED, "Error sending statstring!\n");
psbBot->Connect(SocksServer ? BinaryBot::SOCKS5 : BinaryBot::PLAIN);
break;
}
psbBot->JoinHomeChannel();
break;
case BinaryBot::WAIT:
break;
default:
break;
}
break;
}
ENCRYPT_END;
}
return 0;
}



Skywing[vL] of Valhalla Legends
Battle.net: Clan [vL] - USE-BNCS02.Battle.net
Programmer of ZeroBot, BinaryBotPlugin, SCEnhancements, and BinaryChat.