博文

目前显示的是标签为“学习”的博文

VC开发 Visual C++编程窃取QQ密码

图片
  近日无所事事,看到现在的QQ防盗技术越来越好,一般的钩子已经无法获取用户输入 的密码了,我也试图用发送WM_GETTEXT消息以及GetWindowText来获取密码文本框的数据,发现是不可行的。左思右想,既然程序本身的防范很 严密。那么我们就从用户这边来下手吧。毕竟很多用户对电脑不是很了解的,各位看官可不能扔丑鸡蛋啊。   网吧里一般用户点击QQ快捷方式后就输入号码和密码,然后再登陆,这样我们就可以进行欺骗了。我们的程序运行在后台不停的检测当前激活的窗口是不是QQ登录的窗口,如果是的话就先取得QQ登录窗口中的号码、密码文本框和登陆按钮的窗口位置。这样是为了在我们伪造的窗口上创建这些窗口时不被察觉,获得这些信息后,我们先截取整个屏幕,然后把真正的QQ登录窗口隐藏起来,最后创建我们自己的窗口,设置为最前占满整个桌面,然后再背景上贴上刚才抓取的图片。最后在图片QQ登陆的地方创建好QQ号码和密码输入窗口,在检测到用户单击在QQ登陆按钮时获取用户输入的字符,把这些字符发送到真正的QQ窗口里,最后模拟单击QQ登陆按钮完成QQ的正常登陆。   然而家庭用户一般是选了自动登陆的方式,所以没有QQ登录的窗口,那我们就要动一些手脚了。了解QQ的地球人都知道,QQ文件夹下有这两个文件:AutoLogin.dat和LoginUinList.dat,它们的功能:这两个文件是QQ的号码登录数据文件,AutoLogin.dat 保存的是自动登录号码的数据文件,LoginUinList.dat则保存的是QQ登录窗口中的“QQ号码”下拉框中显示的所有号码记录。所以我们要删除QQ登录数据,直接删除AutoLogin.dat和LoginUinList.dat两个文件就行了。主要代码分析如下: //根据进程ID得到进程名称 BOOL processIdToName(LPTSTR lpszProcessName, DWORD PID) { HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 pe; pe.dwSize = sizeof(PROCESSENTRY32); if (!Process32First(hSnapshot, &pe)) { retu

Visual C++中实现双缓冲的基本原理

  双缓冲的原理可以这样形象的理解:把电脑屏幕看作一块黑板。首先我们在内存环境中建立一个“虚拟“的黑板,然后在这块黑板上绘制复杂的图形,等图形全部绘制完毕的时候,再一次性的把内存中绘制好的图形“拷贝”到另一块黑板(屏幕)上。采取这种方法可以提高绘图速度,极大的改善绘图效果。   例如在OnDraw()函数中可以如下所述实现双缓冲,其主要步骤分为四步: CPen Pen; Pen.CreatePen(PS_INSIDEFRAME,1,RGB(225,225,0)); CBrush Brush; Brush.CreateSolidBrush(RGB(225,225,0)); CDC dcMem; CBitmap bm; CRect rc; GetClientRect(&rc); // Step 1:为屏幕DC创建兼容的内存DC :CreateCompatibleDC() dcMem.CreateCompatibleDC(pDC); // Step 2:创建位图:CreateCompatibleBitmap() bm.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height()); // Step 3:把位图选入设备环境:SelectObject(),可以理解为选择画布 dcMem.SelectObject(&bm); dcMem.SelectObject(Pen); dcMem.SelectObject(Brush); dcMem.Ellipse(0,0,50,50);//画椭圆 // Step 4:把绘制好的图形“拷贝“到屏幕上:BitBlt() pDC->BitBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,SRCCOPY); dcMem.DeleteDC(); bm.DeleteObject();   这样便实现了双缓冲,通过这个方法可以防止在VC中画图时出现屏幕闪烁的情况。