鱼C论坛

 找回密码
 立即注册
查看: 2760|回复: 4

[技术交流] VC++实现读取本地已登录的QQ号及应用代码

[复制链接]
发表于 2013-9-27 12:00:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
不废话了直接上代码
#include <Windows.h>

#include <Tlhelp32.h>

#define TH32CS_SNAPPROCESS 0x00000002



//对比数据,找到相同字节集的偏移  

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;  

}  

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-27 12:33:03 | 显示全部楼层
看起来好高端!看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-27 12:51:13 | 显示全部楼层
支持一下下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-27 13:14:18 | 显示全部楼层
谢谢分享了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-27 16:23:28 | 显示全部楼层
//向前推一定位置,因为路径是 ..\[QQ号]\Msg2.0.db  

这句关键,学习了,,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 18:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表