源码出于看雪论坛。源址已佚。先谢过

看结果
  
    

耗时47微秒

#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>
#include <stdlib.h>
#include <stdio.h>int SearchStr(PTSTR pszString, int iStrLen, PTSTR pszSearchStr)
{int i = 0;int iSearchStrlen = _tcslen(pszSearchStr);while ((i + iSearchStrlen) <= iStrLen ){int n = 0;//先匹配两个字串的第一个字符if (pszSearchStr[0] == pszString[i]){//若相等,则开始逐字符匹配for (int j = 0; j <iSearchStrlen; j++){//相同位置字符匹配if (pszSearchStr[j] == pszString[i + j]){//若相同位置字符匹配成功,则计数器加1n++;}else  //相同位置字符匹配失败{//源字符串位置跳过匹配相同的n个字符i = i + n;//跳出当前匹配循环,开始新位置的匹配break;}}//若匹配成功,计数和目标字符串长度相等,则找到目标if (iSearchStrlen == n){//i为找到的目标字符串在源字符串中的起点位置,//此处return,即找到的目标字符串首次出现位置return i;//找到一个目标,后移一位继续找,//如要继续找,请注意最后的return,代码需做点小修改//i++;}}else  //若两字符串的第一个字符不同{//开始反向找源字符串相对目标字符串的后一个字符是否在目标字符串内for (int j = iSearchStrlen - 1; j >= 0; j--){//找到存在紧跟其后的那个字符if (pszSearchStr[j] == pszString[i + iSearchStrlen]){//该字符出现在目标字符串中的位置n = j;//只需知道排在倒数第一那个位置,跳出循环开始移动位置break;}}//移动到位置为(一个目标串长度减去出现目标串中匹配字符出现的位置),//即如果出现该字符,则使相同的两个字符对齐,若未出现,直接移动一个目标串长度i = i + iSearchStrlen - n;}}return 0;
}int ReadMem(DWORD dwPid)
{//要搜索的特征码TCHAR szSub[] = TEXT("index?uin=");//特征码出现的位置int iPos = 0;HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, dwPid);if (hProcess == NULL){return 0;}SYSTEM_INFO siSysInfo;GetSystemInfo(&siSysInfo);MEMORY_BASIC_INFORMATION mbi;DWORD pAddress = (DWORD)siSysInfo.lpMinimumApplicationAddress;int Count = GetTickCount();while (pAddress < (DWORD)siSysInfo.lpMaximumApplicationAddress){if (VirtualQueryEx(hProcess, (LPVOID)pAddress, &mbi, sizeof(mbi)) != sizeof(mbi)){return 0;}if ((mbi.State == MEM_COMMIT) && (mbi.Protect == PAGE_READWRITE)){DWORD Base = pAddress;int ReadSize = mbi.RegionSize;if (ReadSize >= 1024){DWORD dwBytes = 0;TCHAR *MemBuf = (TCHAR *)malloc(ReadSize * sizeof(TCHAR));if (ReadProcessMemory(hProcess, (LPCVOID)Base, MemBuf, ReadSize, &dwBytes)){//开始搜索特征码iPos = SearchStr(MemBuf, dwBytes, szSub);if (iPos){_tprintf(TEXT(">>>   Address: 0x%.8X\n"), Base + iPos * sizeof(TCHAR));//指向QQ号码的第一个字符TCHAR *ptsQQ = &MemBuf[iPos + _tcslen(szSub)];_tprintf(TEXT(">>>        QQ: "));//利用指针来打印出当前QQ进程的QQ号码,//QQ号码之后的字符是'&'for (;*ptsQQ != '&';*ptsQQ++){//注意这里是循环打印出QQ号码的每个字符,而不是整个字符串_tprintf(TEXT("%c"), *ptsQQ);}_tprintf(TEXT("\n"));//找到1个就OK了,去除break可继续找break;}}free(MemBuf);}}//从下一块内存块继续找pAddress = (DWORD)mbi.BaseAddress + mbi.RegionSize;}//计算一下查找QQ号码的用时Count = GetTickCount() - Count;_tprintf(TEXT(">>>      Time: %d ms\n"), Count);return iPos;
}DWORD FindByPID(PTSTR pszProcessName)
{DWORD dwProcessID = 0;HANDLE hProcessSnap;PROCESSENTRY32 pe32;hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (hProcessSnap == INVALID_HANDLE_VALUE){return 0;}pe32.dwSize = sizeof(PROCESSENTRY32);if(!Process32First(hProcessSnap, &pe32)){CloseHandle(hProcessSnap);return 0;}do{//找到QQ进程if (wcscmp(pszProcessName, pe32.szExeFile) == 0){dwProcessID = pe32.th32ProcessID;wprintf(TEXT(">>> ------ PID = %d ------\n"), dwProcessID);//开始内存搜索ReadMem(dwProcessID);wprintf(TEXT(">>> ------------------------\n\n"), dwProcessID);}}//继续找下一个进程while(Process32Next(hProcessSnap, &pe32));CloseHandle(hProcessSnap);//如果存在QQ进程,此处return的是最后一个QQ进程的ID,//如果不在QQ进程,此处return的是dwProcessID的初始值0return dwProcessID;
}int main()
{TCHAR pszP[] = TEXT("QQ.exe");DWORD dwPID = FindByPID(pszP);if (!dwPID){wprintf(TEXT(">>> Do not found the QQ.exe\n"));}return 0;
}

分享一个在内存里搜索QQ号码的源码,源自看雪论坛相关推荐

  1. 分享一个很酷很炫的html5特效网站源码

    原创整理不易,转载请注明出处:分享一个很酷很炫的html5特效网站源码 代码下载地址:http://www.zuidaima.com/share/1784027301841920.htm 在线演示:h ...

  2. qq号码交易源码 php,QQjiaoyiyuanma QQ号码交易站源码备份 ASP的 ,也是不错的 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...

    文件名称: QQjiaoyiyuanma下载 收藏√  [ 5  4  3  2  1 ] 开发工具: ASP 文件大小: 1127 KB 上传时间: 2013-01-09 下载次数: 2 详细说明: ...

  3. 哔哩哔哩网站前端源码_分享一个仿制哔哩哔哩镜子网站源码

    我老婆非常喜欢看哔哩哔哩,前些天她兴奋地和我说哔哩哔哩网站有个隐藏的彩蛋,传送门http://www.ilidilid.com/,我看了下,相当于把镜子中的网站样子弄出来了. 于是,我寻思着,把自己的 ...

  4. 分享一个Auto.js写的自动挂机聊天源码(保护生态)

    这个软件是Auto.js写的,可以实现自动打招呼和聊天的功能-保护生态,下面分享软件部分核心源码,希望对auto.js技术爱好者有所启示. "ui"; var Base64 = a ...

  5. “深绿” 及 AlphaGo 对QQ分分彩源码出租指挥与控制智能化的启示

    摘 要 随着未来QQ分分彩源码出租  dsluntan.com Q:3393756370 VX:17061863513战争日趋复杂.人工智能突飞猛进, 指挥与控制向智能化发展成为大势所趋. 美军的 & ...

  6. seo必备网站分析工具,关键词百度搜索结果查询导出源码

    seo必备网站分析工具,关键词百度搜索结果查询导出源码 两个简单的版本,关于百度搜索结果的采集抓取,可以获取到竞争对手的网站,加以分析和研究,只需输入关键词和搜索页码,即可完成对于竞争对手的获取和研究 ...

  7. 分享个老司机网站报错404页面模板源码

    版权声明:转载请注明原创地址 https://blog.csdn.net/u013032788/article/details/80623193 来,来,来,要不要学习下怎么做前端页面,分享个老司机网 ...

  8. java me手机版,一个经典的 JAVA ME 手机程序入门级源码

    一个经典的 JAVA ME 手机程序入门级源码 一个由 Carol Hamer 写的比较有代表性的源码,作者全力推荐,尤其是对于没有 J2ME 开发经验的朋友.自己动手敲出以下贴出的 Hello.ja ...

  9. “限时分享“ 本地80个小游戏 HTML+CSS+JS源码分享

    开源项目集合 1. "限时分享" 本地80个小游戏 HTML+CSS+JS源码分享 2. "限时分享" 别错过了,最全的微信小程序源码收集分享 里面有80款小游 ...

最新文章

  1. 在Uubuntu 14.04 64bit上搭建NumPy函数库环境
  2. 不怕面试被问了!二叉树算法大盘点
  3. 生产管理车间提高劳动利用率
  4. 云计算服务需求促进边缘计算的应用与发展
  5. 一个小菜程序员的经历
  6. com.android.providers.telephony.MmsSmsDatabaseHelper
  7. 老外听到哪些中式英文是崩溃的?(转自外贸Jackson)
  8. 关于FactoryBean 和BeanFactory
  9. 【C语言进阶深度学习记录】三十三 C语言中动态内存分配
  10. 【英语学习】【Daily English】U03 Leisure Time L02 I'm more of an indoorsy person anyway
  11. Webpack入门教程二
  12. 考试系统(用xml文件模拟数据库)
  13. exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
  14. pcsx2 模拟器 玩 psp 游戏 龙珠z:传奇
  15. Variation calling and annotation
  16. Java亿级流量架构之网关设计思路
  17. LLM系列 | 01: 亲测ChatGPT最强竞品Claude,且无需翻墙、注册简单、免手机号
  18. 编译原理笔记 导言和目录
  19. 接口测试中的接口到底是什么?
  20. matlab的死区环节,基于SIMULINK对非线性系统死区环节进行仿真.doc

热门文章

  1. .net 反射简单介绍
  2. django注册发送邮箱激活账号
  3. 一个可以重复遍历的RowSet
  4. android核心架构Framework组件介绍
  5. 大学生择业必须考虑的最关键问题
  6. Linux 下截屏工具
  7. 使用坐便器坐着拉屎--一种无奈的悲哀
  8. 山泽Typec扩展坞M.2移动固态硬盘盒拓展 - 我的硬件配置
  9. C++ RTTI使用
  10. windows10更新卡住强制重启后陷入自动修复重启死循环