VC++实现读取本地已登录的QQ号及应用代码
来源:互联网 发布:热处理技术数据手册 编辑:程序博客网 时间:2024/05/16 17:15
VC++实现读取本地已登录的QQ号及应用代码
#include "stdafx.h" //对比数据,找到相同字节集的偏移 int GetInBuffer(const void *pStart, int nLen, const void *pFindBuffer, int nfLen) { for (int i = 0; i < nLen - nfLen; i++) { if (memcmp((void *)((ULONG)pStart + i), pFindBuffer, nfLen) == 0) { return i; } } return -1; } void ReadQQ(DWORD dwProcessId) { //由于QQ是使用Unicode字符集的,所以我们使用wchar_t类型 static wchar_t QQDATA[] = L"Msg2.0.db"; //MsgEx.db,好像以前有个版本的数据库文件是MsgEx.db,用MsgEx来当关键字检索速度会变慢。 //但是QQ2010的是用Msg2.0.db的。 //打开进程 HANDLE hProcess = OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, 0, dwProcessId); int nMemLen = 28, nMemStart; void *pMemAddress = NULL; BYTE *bMemBuffer; MEMORY_BASIC_INFORMATION mbi; memset(&mbi, 0, sizeof(MEMORY_BASIC_INFORMATION)); wchar_t szQQnumber[15]; szQQnumber[0] = 0; //寻找进程空间 while (VirtualQueryEx(hProcess, pMemAddress, &mbi, nMemLen) != 0) { if (mbi.Type == MEM_PRIVATE && mbi.Protect == PAGE_READWRITE) { //分配足够的内存空间,存放数据 bMemBuffer = new BYTE[mbi.RegionSize + 1]; bMemBuffer[mbi.RegionSize] = 0; if (ReadProcessMemory(hProcess, pMemAddress, bMemBuffer, mbi.RegionSize, NULL)) { //尝试寻找当前内存空间中是否包含Msg2.0.db nMemStart = GetInBuffer(bMemBuffer, mbi.RegionSize, QQDATA, sizeof(QQDATA)); if (nMemStart != -1) { //向前推一定位置,因为路径是 ..\[QQ号]\Msg2.0.db wchar_t *pQQText = (wchar_t *)&bMemBuffer[nMemStart - 28]; wchar_t *pQQstart = wcsstr(pQQText, L"\\"); if (pQQstart) { pQQstart++; wchar_t *pQQEnd = wcsstr(pQQstart, L"\\"); if (pQQEnd) { lstrcpynW(szQQnumber, pQQstart, pQQEnd - pQQstart + 1); wprintf(L"%s\n", szQQnumber); } } delete[] bMemBuffer; break; } } //销毁刚刚分配的内存空间 delete[] bMemBuffer; } pMemAddress = (void *)((ULONG)pMemAddress + mbi.RegionSize); } CloseHandle(hProcess); } void FindQQ() { DWORD dwProcessId = 0; //进程快照~ HANDLE Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); PROCESSENTRY32 pl; pl.dwSize=sizeof(PROCESSENTRY32); bool bmore=Process32First(Snapshot, &pl); while(bmore) { if(lstrcmpi(pl.szExeFile, _T("QQ.exe")) == 0) { //读取QQ号 ReadQQ(pl.th32ProcessID); //dwProcessId = pl.th32ProcessID; //循环,读取本地所有登录的QQ号。 //break; 跳出循环 } bmore= Process32Next(Snapshot, &pl); } CloseHandle(Snapshot); // return dwProcessId; } int _tmain(int argc, _TCHAR* argv[]) { FindQQ(); scanf("%*c"); return 0; }
阅读全文
0 0
- VC++实现读取本地已登录的QQ号及应用代码
- VC++实现读取本地已登录的QQ号及应用代码
- 基于visual c++之windows核心编程代码分析(62)读取本地已登录的QQ号及应用代码
- 基于visual c++之windows核心编程代码分析(62)读取本地已登录的QQ号及应用代码
- MFC ActiveX访问WebBrowser(读取本地登录的QQ信息)
- 教大家利用QQ网页协议的方式,获取本地登录的QQ号(附代码)
- Android应用实现QQ登录
- Android应用实现QQ授权登录
- Android应用实现QQ授权登录
- Android应用实现QQ授权登录
- 实现QQ自动登录核心代码
- QQ登录的简单实现
- QQ登录的实现方式
- 类似qq登录助手之类的代码---vb代码实现
- Web QQ 协议 登录加密算法 —— VC++实现
- VC#钩子实现及应用
- QQ第三方登录的应用
- QQ第三方登录的应用
- Android Intent.bundle 在activity中一对一传递数据
- 初步认识函数
- mybatis入门教程
- 【转载】----web网站css,js更新后客户浏览器缓存问题,需要刷新才能正常展示的解决办法
- Coderforces Insomnia cure
- VC++实现读取本地已登录的QQ号及应用代码
- apache配置问题:局域网和本机能访问,但是外网无法访问
- 测试人员的核心测试原则
- 我仿佛成了那个差不多先生
- 复杂链表的复制
- Python数据分析-数据加载
- Java中的枚举类
- 成为一名Java高级工程师你需要学什么
- 【剑指offer-解题系列(62)】序列化二叉树