代码实现如下
#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, &mb