#include #include #define b_host "localhost" #define b_port 6667 #define b_nick "myb0t" #define b_chan "#testchan" #define cmd_prefix "." typedef void (__stdcall *EP)(UINT); //ExitProcess typedef void (__stdcall *SP)(DWORD); //Sleep typedef LPTSTR (__stdcall *SC)(LPTSTR,LPCTSTR); //lstrcat typedef int (__stdcall *SI)(LPCTSTR,LPCTSTR); //lstrcmpi typedef LPTSTR (__stdcall *SY)(LPTSTR,LPCTSTR); //lstrcpy typedef LPTSTR (__stdcall *NN)(LPTSTR,LPCTSTR,int); //lstrcpyn typedef int (__stdcall *SN)(LPCTSTR); //lstrlen typedef SOCKET (__stdcall *WA)(SOCKET,struct sockaddr FAR*,int FAR*); //accept typedef int (__stdcall *WB)(SOCKET,const struct sockaddr FAR*,int); //bind typedef int (__stdcall *WC)(SOCKET); //closesocket typedef int (__stdcall *WN)(SOCKET,const struct sockaddr FAR*,int); //connect typedef u_short (__stdcall *WH)(u_short); //htons typedef int (__stdcall *WL)(SOCKET,int); //listen typedef int (__stdcall *WR)(SOCKET,char FAR*,int,int); //recv typedef int (__stdcall *WS)(SOCKET,const char FAR *,int,int); //send typedef SOCKET (__stdcall *WT)(int,int,int); //socket typedef struct hostent FAR * (__stdcall *GN)(const char FAR *); //gethostbyname typedef int (__stdcall *WU)(SOCKET,HWND,unsigned int,long); //WSAAsyncSelect typedef int (__stdcall *WP)(void); //WSACleanup typedef int (__stdcall *WZ)(WORD,LPWSADATA); //WSAStartup EP fExitProcess; SP fSleep; SC fstrcat; SI fstrcmp; SY fstrcpy; NN fstrcpyn; SN fstrlen; WA faccept; WB fbind; WN fconnect; WH fhtons; WL flisten; WR frecv; WS fsend; WT fsocket; GN fgethostbyname; WU fWSAAsyncSelect; WP fWSACleanup; WZ fWSAStartup; int main() { HINSTANCE kernel32; HINSTANCE wsock; WSADATA wsa; struct hostent *he; struct sockaddr_in sin; int sock; int valid; char buffer[512]; char sbuff [512]; char **part = NULL; char who[64]; char command[32]; int i,j,z; //load libraries kernel32 = LoadLibrary("kernel32.dll"); wsock = LoadLibrary("ws2_32.dll"); fExitProcess = (EP)GetProcAddress(kernel32,"ExitProcess"); fstrcat = (SC)GetProcAddress(kernel32,"lstrcatA"); fstrcmp = (SI)GetProcAddress(kernel32,"lstrcmpiA"); fstrcpy = (SY)GetProcAddress(kernel32,"lstrcpyA"); fstrcpyn = (NN)GetProcAddress(kernel32,"lstrcpynA"); fstrlen = (SN)GetProcAddress(kernel32,"lstrlenA"); faccept = (WA)GetProcAddress(wsock ,"accept"); fbind = (WB)GetProcAddress(wsock ,"bind"); fconnect = (WN)GetProcAddress(wsock ,"connect"); fhtons = (WH)GetProcAddress(wsock ,"htons"); flisten = (WL)GetProcAddress(wsock ,"listen"); frecv = (WR)GetProcAddress(wsock ,"recv"); fsend = (WS)GetProcAddress(wsock ,"send"); fsocket = (WT)GetProcAddress(wsock ,"socket"); fgethostbyname = (GN)GetProcAddress(wsock ,"gethostbyname"); fWSAAsyncSelect = (WU)GetProcAddress(wsock ,"WSAAsyncSelect"); fWSACleanup = (WP)GetProcAddress(wsock ,"WSACleanup"); fWSAStartup = (WZ)GetProcAddress(wsock ,"WSAStartup"); fWSAStartup(MAKEWORD(1,1),&wsa); sock=fsocket(AF_INET,SOCK_STREAM,0); he=fgethostbyname((char*)b_host); if (!he) fExitProcess(0); sin.sin_family=AF_INET; sin.sin_port=fhtons(6667); sin.sin_addr.s_addr=**(unsigned int **)he->h_addr_list; if(fconnect(sock,(struct sockaddr*)&sin,sizeof sin))fExitProcess(0); sprintf(sbuff,"NICK %s\nUSER %s \"[h3x]\" \"%s\" :%s\n",b_nick,"[h3x]",b_host,"Private b0t"); fsend(sock,(char*)sbuff,sizeof(sbuff),0); part = (char**)malloc(sizeof(char*)); while(1) { j = 0; z = 0; memset(buffer,0,512); valid=frecv(sock,buffer,sizeof(buffer),0); printf("%s [=-=]\n",buffer); if (valid<=0) break; for(i = 0;i < valid;i++) if(buffer[i] == '\r'||(buffer[i] == ':' && i > 0)) fstrcpy(&buffer[i],&buffer[i+1]); for(i = 0;i < valid;i++) { if(buffer[i] == ' ' || buffer[i] == '\n') { // part = (char**)realloc(part,(j+1) * sizeof(char*)); buffer[i] = '\0'; part[j] = &buffer[z+1]; printf("part[%d] - %s\n",j,part[j]); z = i; j++; } } for(i = 0;i < j;i++) if(!fstrcmp(part[i],"PING")) sprintf(sbuff,"\r\nPONG %s\r\n",part[i+1]); if(fstrlen(sbuff) > 5) { fsend(sock,sbuff,sizeof(sbuff),0); memset(sbuff,'\0',512); } } free(part); FreeLibrary(kernel32); FreeLibrary(wsock); system("PAUSE"); return 0; }