2024年5月27日发(作者:)
#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"";
//,好像以前有个版本的数据库文件是,用MsgEx
来当关键字检索速度会变慢。
//但是QQ2010的是用的。
//打开进程
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 ( == MEM_PRIVATE && t ==
PAGE_READWRITE)
{
//分配足够的内存空间,存放数据
bMemBuffer = new BYTE[Size + 1];
bMemBuffer[Size] = 0;
if (ReadProcessMemory(hProcess, pMemAddress,
bMemBuffer, Size, NULL))
{
//尝试寻找当前内存空间中是否包含
nMemStart = GetInBuffer(bMemBuffer,
Size, QQDATA, sizeof(QQDATA));
if (nMemStart != -1)
{
//向前推一定位置,因为路径是 ..[QQ
号]
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"%sn", szQQnumber);
}
}
发布评论