吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2835|回复: 9
上一主题 下一主题
收起左侧

[C&C++ 转载] 内存读取本机已登录QQ,剔除离线

[复制链接]
跳转到指定楼层
楼主
超级大碰碰 发表于 2021-8-23 15:58 回帖奖励
[C++] 纯文本查看 复制代码
#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;
}

免费评分

参与人数 1吾爱币 +5 热心值 +1 收起 理由
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

来自 8#
 楼主| 超级大碰碰 发表于 2021-8-28 14:09 |楼主
经测试,当前(8月28号)更新的最新版本  QQ 9.5.0(27852) ,同样适用本代码。
推荐
 楼主| 超级大碰碰 发表于 2021-8-23 17:34 |楼主
涛之雨 发表于 2021-8-23 17:20
感觉这个过程可以稍微在脱破区讲解一下,
或者也可以在动画区发一下操作的视频,

查找方法:
CE附加QQ。代码用的最新版的QQ,QQ 9.4.9(27849)。
直接搜索4字节QQ号,搜到的数据,拉到最下方,有绿色的,选一个来读取。

关于剔除离线的。首先在QQ在线(含隐身忙碌离开等)的时候,搜索4字节1,然后离线后搜0,同样有个绿色的。

数据找出来了,就剩下读取内存了。

免费评分

参与人数 1吾爱币 +4 热心值 +1 收起 理由
涛之雨 + 4 + 1 啊这,本来准备等到分析然后加分鼓励的。。。

查看全部评分

沙发
等到烟火也清凉 发表于 2021-8-23 17:09
3#
 楼主| 超级大碰碰 发表于 2021-8-23 17:14 |楼主

用CE找的。我测试过win10 win11 win8,只要是最新版的QQ,都能读到QQ号,而且剔除了离线的QQ。

点评

感觉这个过程可以稍微在脱破区讲解一下, 或者也可以在动画区发一下操作的视频, 感觉这个分析的过程挺麻烦的,也更方便大家学习  详情 回复 发表于 2021-8-23 17:20
4#
涛之雨 发表于 2021-8-23 17:20
超级大碰碰 发表于 2021-8-23 17:14
用CE找的。我测试过win10 win11 win8,只要是最新版的QQ,都能读到QQ号,而且剔除了离线的QQ。

感觉这个过程可以稍微在脱破区讲解一下,
或者也可以在动画区发一下操作的视频,

感觉这个分析的过程挺麻烦的,也更方便大家学习
6#
IBinary 发表于 2021-8-23 18:07
Thank you. QQ内部kernelutil中可以调用他的函数来返回自己的QQ号. 好像叫做 Getxxx
7#
要塞暗哨 发表于 2021-8-24 21:53
刚入坑编程。,来学学新技术
9#
wtuqi 发表于 2022-6-12 12:07

建议网友还是扎实编程方面基本工,不要把精力花费在易语言上,更不要一味的停留在下载工具,使用工具的层面很难对自身有所促进,数10年也不过是原地踏步,也难对论坛环境也难有促进.感觉这章还是不错的,确实达到了抛砖的作用.
10#
ryu5973 发表于 2022-7-7 20:40
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 03:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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