内存读取本机已登录QQ,剔除离线
#include <iostream>#include <windows.h>
#include <TlHelp32.h>
using namespace std;
DWORD GetModuleInfo(DWORD pid,const wchar_t*name)
{
MODULEENTRY32 module;
module.dwSize = sizeof(module);
HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);
if (handle == INVALID_HANDLE_VALUE)
{
return 0;
}
BOOL ret = Module32First(handle, &module);
while (ret)
{
if (!wcscmp(name, module.szModule))
{
CloseHandle(handle);
return (DWORD)module.modBaseAddr;
}
ret = Module32Next(handle, &module);
}
CloseHandle(handle);
return 0;
}
DWORD 取QQ号(DWORD pid)
{
HANDLE hprocess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if (!hprocess)
{
cout << "打开进程失败,错误码:" << GetLastError() << endl;
return 0;
}
DWORD addr = GetModuleInfo(pid, L"AudioVideo.dll") + 0x8015FC;//QQ号码
DWORD num = 0;
BOOL ret = ReadProcessMemory(hprocess, (LPCVOID)addr, &num, 4, NULL);
if (!ret)
{
cout << "读取内存失败,错误码:" << GetLastError() << endl;
CloseHandle(hprocess);
return 0;
}
else
{
DWORD addr1 = GetModuleInfo(pid, L"PreloginLogic.dll") + 0x1165B0;//该QQ在线为1,不在线为0
DWORD isonline = 666;
if (ReadProcessMemory(hprocess, (LPCVOID)addr1, &isonline, 4, NULL) && isonline == 1)
{
CloseHandle(hprocess);
return num;
}
}
CloseHandle(hprocess);
return 0;
}
BOOL 该QQ是否在线(DWORD Q号)
{
PROCESSENTRY32 pe;
pe.dwSize = sizeof(pe);
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
BOOL ret = Process32First(hSnapshot, &pe);
while (ret)
{
if (!wcscmp(L"QQ.exe", pe.szExeFile))
{
if (取QQ号(pe.th32ProcessID) == Q号)
{
CloseHandle(hSnapshot);
return TRUE;
}
}
ret = Process32Next(hSnapshot, &pe);
}
CloseHandle(hSnapshot);
return FALSE;
}
int main()//适用于当前最新版本:QQ 9.4.9(27849),其它版本未测试
{
DWORD QQnum = 0;
while (TRUE)
{
cout << "请输入要检测是否在线的QQ号:" << endl;
cin >> QQnum;
if (QQnum)
{
cout << "你输入的QQ号为: " << QQnum << endl;
break;
}
}
clock_t start = clock();
BOOL ret = 该QQ是否在线(QQnum);
clock_t end = clock();
cout <<"该QQ号:"<< QQnum << " 在线状态为: " << ret <<"耗时: " <<end-start<<"ms" << endl;
system("pause");
return 0;
} 经测试,当前(8月28号)更新的最新版本QQ 9.5.0(27852) ,同样适用本代码。 涛之雨 发表于 2021-8-23 17:20
感觉这个过程可以稍微在脱破区讲解一下,
或者也可以在动画区发一下操作的视频,
查找方法:
CE附加QQ。代码用的最新版的QQ,QQ 9.4.9(27849)。
直接搜索4字节QQ号,搜到的数据,拉到最下方,有绿色的,选一个来读取。
关于剔除离线的。首先在QQ在线(含隐身忙碌离开等)的时候,搜索4字节1,然后离线后搜0,同样有个绿色的。
数据找出来了,就剩下读取内存了。 咋找到这些值 的 等到烟火也清凉 发表于 2021-8-23 17:09
咋找到这些值 的
用CE找的。我测试过win10 win11 win8,只要是最新版的QQ,都能读到QQ号,而且剔除了离线的QQ。 超级大碰碰 发表于 2021-8-23 17:14
用CE找的。我测试过win10 win11 win8,只要是最新版的QQ,都能读到QQ号,而且剔除了离线的QQ。
感觉这个过程可以稍微在脱破区讲解一下,
或者也可以在动画区发一下操作的视频,
感觉这个分析的过程挺麻烦的,也更方便大家学习 Thank you. QQ内部kernelutil中可以调用他的函数来返回自己的QQ号. 好像叫做 Getxxx 刚入坑编程。,来学学新技术 等到烟火也清凉 发表于 2021-8-23 17:09
咋找到这些值 的
建议网友还是扎实编程方面基本工,不要把精力花费在易语言上,更不要一味的停留在下载工具,使用工具的层面很难对自身有所促进,数10年也不过是原地踏步,也难对论坛环境也难有促进.感觉这章还是不错的,确实达到了抛砖的作用. 感谢分享
页:
[1]