读取其他进程内存数据

2023-11-19

 

1. 读取进程内存数据 

 读取其他进程内存数据,需要用到的windows API函数:

BOOL ReadProcessMemory( 
  HANDLE hProcess, 
  LPCVOID lpBaseAddress, 
  LPVOID lpBuffer, 
  DWORD nSize, 
  LPDWORD lpNumberOfBytesRead 
);

参数比较简单,可以参考MSDN,这里只说一下参数hProcess,可以使用API OpenProcess得到:

2. 获取进程句柄

HANDLE OpenProcess( 
  DWORD fdwAccess, 
  BOOL fInherit, 
  DWORD IDProcess
);

参数比较简单,可以参考MSDN,这里只说一下参数IDProcess,也就是进程的ID。这个ID可以通过遍历系统中的进程来获取。

3.得到进程ID

需要遍历系统进程ID,需要使用到三个API。

1)得到进程等信息的快照:

HANDLE WINAPI CreateToolhelp32Snapshot( 
  DWORD dwFlags, 
  DWORD th32ProcessID 
);

2)打开第一个进程

BOOL WINAPI Process32First( 
  HANDLE hSnapshot, 
  LPPROCESSENTRY32 lppe 
);

3)打开下一个进程

BOOL WINAPI Process32Next( 
  HANDLE hSnapshot, 
  LPPROCESSENTRY32 lppe 
);

至此,获取其他进程内存空间的知识,已经介绍完毕。下面附上一个简单的例子,如果你需要测试,你自己还需要写一个简单的目标程序。
#include "stdafx.h"
#include <Windows.h>
#include <Tlhelp32.h>

wchar_t buff[2048];
HANDLE OpenProcessName(wchar_t * name);
BOOL FindString(wchar_t *addr, wchar_t *str);
BOOL GetMemory(LONG pAddr, HANDLE hProcess, PVOID pBuff, LONG len, DWORD * read);
int _tmain(int argc, _TCHAR* argv[])
{
 //需要被扫描的进程名
 wchar_t * Name = L"ReadOtherProcessData.exe";
 HANDLE hProcess = OpenProcessName(Name);
  
 DWORD read;
 LONG memoryAddr; 
 LONG findCnt = 0;
 LONG j=0;
 if (hProcess != NULL)
 {
  
  for(LONGLONG i = 0; i < 0x80000000; i+= 4096)
  {
   
   memoryAddr = i;
   GetMemory(memoryAddr, hProcess, buff, 4, &read);
   if (read == 4)
   {
    printf("addr = %x, data is %x\n", i, *(PLONG)&buff[0]);
    findCnt++;
   }
   else
   {
    printf("Get data error.\n");
   }
  }
 }
 return 0;
}
BOOL FindString(wchar_t *addr, wchar_t *str)
{
 if (::wcscmp(addr, str) == 0)
  return TRUE;
 else
  return FALSE;
}
BOOL GetMemory(LONG pAddr, HANDLE hProcess, PVOID pBuff, LONG len, DWORD * read)
{
 ReadProcessMemory(hProcess, (LPVOID)pAddr, pBuff, len, read);
 if (*read > 0)
  return TRUE;
 else
  return FALSE;
}
HANDLE OpenProcessName(wchar_t * name)
{

  PROCESSENTRY32 pe32;
        pe32.dwSize=sizeof(pe32);
  wchar_t temp[1000];
        //打开快照
  HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  if (hProcessSnap == NULL)
  {
   return hProcessSnap;
  }
  //打开进程
  HANDLE hProcess;
        BOOL bMore=::Process32First(hProcessSnap,&pe32);//获得第一个进程的信息

  while (bMore)
  {
   ::wsprintf(temp,L"%s",pe32.szExeFile);
   if (::wcscmp(temp, name) == 0)
   {
    hProcess=::OpenProcess(PROCESS_ALL_ACCESS,false,(DWORD)pe32.th32ProcessID);
    return hProcess;
   }
   bMore=::Process32Next(hProcessSnap,&pe32);//获得其他进程信息
  }

  //CloseToolhelp32Snapshot(hProcessSnap);
  return NULL;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读取其他进程内存数据 的相关文章

  • 通过 MailChimp 发送电子邮件

    我认为问题出在附近 api gt listSubscribers include libs mailchimp MCAPI class php options array list id gt list id subject gt Prov
  • 如何检测媒体是否已插入可移动驱动器/读卡器

    我有一个读卡器 未插入记忆棒 当我插入计算机时 它在 我的电脑 中显示一个空驱动器 是否有可能知道驱动器是否有媒体 抱歉我不知道如何称呼它 或没有 我找到的建议MSalters to use IOCTL STORAGE CHECK VERI
  • 如何在 Intellij IDEA 中为 Apache Tomcat 指定自定义 JRE 路径?

    问题是如何指定自定义JRE路径为Apache tomcat in Intellij IDEA 当从以下位置启动应用程序时IDEA 看来 只需配置它的路径 路径jvm dll in Apache Tomcat监视器没有帮助 还有其他想法或方法
  • C++ win32设置光标位置

    我知道要使用哪个功能 但我无法让它正常工作 我用了SetCursorPos 唯一的问题是它将光标设置为屏幕坐标而不是窗口坐标 我也尝试过ScreenToClient 但它并没有起作用 这是我的代码 pt x 113 pt y 280 Scr
  • 无法加载 php_curl

    我已经在WindowsXp上安装了php5 2 13 apache2 2 15 将C php添加到PATH ssystem变量中 我无法启用卷曲扩展 我配置了extension dir并删除了 在 php ini 中形成 php curl
  • Windows Server / Datacenter:设置 CPU 关联性 > 64 个核心

    SetThreadAffinityMask 允许为 64 个逻辑核心 处理器 设置关联掩码 但是 Windows Datacenter 最多可以有 64 个 CPU 每个 CPU 都有多个内核 请参阅here http social tec
  • 使用 Composer 安装 PHPUNIT

    我有一个关于 Symfony 2 的项目 我想在 Windows 7 上使用 PHPUNIT On githut phpunit is Composer Simply add a dependency on phpunit phpunit
  • windows下删除进程权限

    出于安全原因 我正在寻找一种删除进程权限的方法 我想以具有特权的用户身份开始 并以受限用户身份结束 例如 我希望我的 Web 服务器在受限用户下运行 但我仍然想监听端口 80 我怎样才能在Windows下做这样的事情 与 Unix 类似的东
  • 向 Windows 任务栏缩略图添加按钮 JavaFX?

    这个问题已经闲置一年多了 我的问题仍然没有解决方案 我编辑此内容是为了澄清我的问题并引起人们对它的新关注 如果您使用 Windows 您可能知道将程序图标悬停在任务栏上时显示的小预览图像 缩略图 某些程序 例如 Spotify Git 扩展
  • 使用 AVFoundation 快速获取视频帧

    这是我的代码 我想要获取我的视频并将帧数据获取到 SceneKit SCNSphere NSString videoPath NSBundle mainBundle l var videoURL NSBundle mainBundle UR
  • 如何将 YouTube API 集成到我的 iPhone 应用程序中?

    我想将 YouTube API 集成到我的应用程序中 我该怎么做 附注 我正在为 YouTube 频道制作一个应用程序 我尝试以webview 但这让一切变得更糟 因为用户可以看到 YouTube 控件 搜索等 以及有关 YouTube i
  • Windows 10 关闭、最小化和最大化按钮

    要绘制主题按钮 我使用以下代码 var h HTHEME begin if UseThemes then begin SetWindowTheme Handle explorer nil h OpenThemeData Handle WIN
  • 由于 MSVCR110.dll,MS Visual Studio 2012 Ultimate 无法启动

    当我尝试运行 MVS 2012 时 我总是收到错误 在库 DLL MSVCR110 dll 中找不到过程 crtCreateSymbolicLinkW 的入口点 我已经从我的另一台计算机复制了这个 dll 文件 一切正常 但没有帮助0 o
  • 读取进程的进程内存不会返回所有内容

    我正在尝试扫描第三方应用程序的内存 我已经查到地址了 现在是在0x0643FB78 问题是 从那以后我就再也爬不上去LPMODULEENTRY32 gt modBaseAddr is 0x00400000 and LPMODULEENTRY
  • GitHub v3 API - 如何在存储库中创建初始提交?

    我正在使用 v3 API 并设法列出存储库 树 分支 访问文件内容并创建 blob 树 提交 我现在正在尝试创建一个新的存储库 并设法使用 POST user repos 来完成它 但是当我尝试在这个新存储库中创建 blob trees c
  • 如何在 jQuery 中检查 null 对象

    我正在使用 jQuery 我想检查页面中是否存在某个元素 我写了以下代码 但它不起作用 if btext i null alert btext i text btext i text Branch i 如何检查元素是否存在 检查jQuery
  • HWND 创建时间

    我是这个社区的新手 在使用我的自动化脚本 1 时遇到一个问题 我想获取 HWND 的创建时间 我在从 FindWindowEx 检索到的数组中有一组 HWND 我想在数组中找到最后根据系统时间创建的 HWND 我对窗口钩子没有足够的了解 但
  • 如何在无 null 设计中实现 List、Set 和 Map?

    当您在大多数情况下可以返回 null 空对象以避免 null 时 这很好 但是像 Collection 这样的对象呢 在爪哇 Map回报null if key in get key 地图上没有找到 我能想到的最好的避免方法null在这种情况
  • 获取已连接 USB 设备的端口名称

    当USB设备连接到计算机时 如何使用C 代码获取它所连接的端口名称 我找到了很多方法来查找 USB 何时连接 断开 驱动器号 路径 设备 ID 等 但没有找到任何明确的示例来说明如何知道它连接到哪个端口 我看到了一种可能的解释 但这涉及很多
  • winapi 函数的函数指针 (stdcall/cdecl)

    请有人给我一些为 MS winapi 函数创建函数指针的提示吗 我试图为 DefWindowProc DefWindowProcA DefWindowProcW 创建一个指针 但出现此错误 LRESULT dwp HWND UINT WPA

随机推荐

  • 通过点击按钮在页面添加图片

    点击添加按钮 在盒子中加入图片 点击图片实现删除图片效果 代码如下
  • ubuntu18安装好没有gcc的真正解决方法

    之前因为一台上同时装了n个系统 导致ubuntu坏了 重装了一下 结果发现没有gcc 奇怪的是本来是有的 百度找了一下 有说用aptitude解决的 我试了一下 使用了第二个推荐方案 结果ubuntu系统完全坏了 想了一下这次安装不正确的过
  • RocketMQ源码(26)—DefaultMQPushConsumer事务消息源码【一万字】

    事务消息是RocketMQ的一大特性 其被用来实现分布式事务 关于RocketMQ的事务消息的相关原理的介绍见这篇博客 RocketMQ的分布式事务机制 事务消息 关于事务消息的基本案例看这里 消息事务样例 本文主要介绍RocketMQ的事
  • 在外远程登录局域网下的象过河ERP管理系统,无需公网IP

    文章目录 概述 1 查看象过河服务端端口 2 内网穿透 3 异地公网连接 4 固定公网地址 4 1 保留一个固定TCP地址 4 2 配置固定TCP地址 5 使用固定地址连接 转发自CSDN远程穿透的文章 公网远程访问公司内网象过河ERP系统
  • R语言读取Excel文件

    因为一个项目需要 原始数据全部是Excel文件 包括 xls和 xlsx格式 并且很多excel数据的格式并不规范 一个个转为csv格式不太现实 所以把所有能了解到的读取excel的方法都试了一遍 做个简单汇总 相关的包 RODBC xls
  • IGBT工作原理及作用

    一 IGBT是什么 IGBT Insulated Gate Bipolar Transistor 绝缘栅双极型晶体管 是由BJT 双极型三极管 和MOS 绝缘栅型场效应管 组成的复合全控型电压驱动式功率半导体器件 兼有MOSFET的高输入阻
  • condition_variable 锁

    std condition variable提供了两种 wait 函数 当前线程调用 wait 后将被阻塞 此时当前线程应该获得了锁 mutex 不妨设获得锁 lck 直到另外某个线程调用 notify 唤醒了当前线程 在线程被阻塞时 该函
  • QML 相互之间通讯 信号 槽

    QML 之间 信号与槽 方式一 对于 QML 中的属性如果其值发生改变 QML 自动会发生相关信号 on
  • 关于nlp-pyltp的基本介绍和使用

    一 下载 ltp 模型 ltp data v3 4 0 pyltp 1 ltp模型下载地址如下 https download csdn net download TFATS 12758993 2 下载pyltp如下 pip install
  • 编译linux内核成vmlinuz,内核编译之vmlinuz vmlinux system.map initrd

    一 vmlinuz vmlinuz是可引导的 压缩的内核 vm 代表 Virtual Memory Linux 支持虚拟内存 不像老的操作系统比如DOS有640KB内存的限制 Linux能够使用硬盘空间作为虚拟内存 因此得名 vm vmli
  • 使用Minitab解决Excel的限制问题

    前两天 当我在做数据转置以期获得更好分析图形的时候 我碰到了传说中excel的限制 如图 在解决这个问题的过程中 我发现了用来做数据分析 比excel更好的工具Minitab 打开minitab 把纪录数据的Excel表以File gt O
  • pageaudit 属性不正确。_浅析script 标签的 async 和 defer 属性

    每日前端夜话 第420篇 正文共 1500 字 预计阅读时间 7 分钟 前端当然要从 HTML 开始 今天来聊聊在 script 标签中加上 async defer 时的功能及差异 都明白的道理 我们都知道 浏览器解析 HTML 是一行一行
  • 【Xilinx Vivado时序分析/约束系列4】FPGA开发时序分析/约束-实验工程上手实操

    目录 建立工程 添加顶层 模块1 模块2 添加约束文件 编辑时钟约束 打开布线设计 代码代表的含义 时序报告 进行时序分析 Summary 包含了汇总的信息量 Source Clock Path 这部分是表示Tclk1的延时细节 Data
  • 数字后端知识点扫盲——CTS (上)

    后端和前端一样在IC设计中扮演着非常重要的角色 甚至可以说入门的前端设计工程师对timing的理解远不如一个后端设计工程师 因此想要更好的理解电路的timing在后端P R之后或者说在大规模的设计中后端如何实现clock对DFF的驱动 就需
  • VM16 CentOS 快照恢复以及Linux自动修复指令

    目录 快照恢复 自动修复磁盘 快照恢复 点击上图的拍摄快照 即可进行CentOS 6的虚拟机系统备份 需要恢复系统 就点击之前备份过的快照记录 即可恢复系统 自动修复磁盘 当Linux启动时出现 UNEXPECTED INCONSISTEN
  • 【threejs】根据点绘制直线

    实现代码
  • 东京大学最新研究成果!一种可实现陆空两栖的新型四足机器人SPIDAR,具备多模态运动能力

    原创 文 BFT机器人 现实中 蜘蛛可以凭借飘荡的蛛丝在空中漂浮 让它们能够穿越复杂地形 普通蜘蛛长度只有几毫米 重量只有几十克 如何让比蜘蛛重数百倍的机器人实现多模态运动 是众多学者研究的热点 具有多模态运动能力的机器人 几乎都是移动系统
  • ESP32-C2开发板 Homekit烧录教程

    准备 1 1硬件ESP32 C2开发板 如图1 1所示 图1 1 ESP32 C2开发板 1 2软件 CozyLife APP可以在各大应用市场搜索下载 也可以扫描二维码下载如图1 2所示 HomeKit flash download to
  • 【Maven】maven如何配置本地仓库?

    前言 很多小伙伴不清楚怎么配置maven本地仓库 这里给大家分享一下方法 如果觉得有用的话 记得点赞支持哦 1 创建新的路径 maven默认的存放路径是C盘 在你想要的位置创建一个存放maven repository的路径 我是创建在了D盘
  • 读取其他进程内存数据

    1 读取进程内存数据 读取其他进程内存数据 需要用到的windows API函数 BOOL ReadProcessMemory HANDLE hProcess LPCVOID lpBaseAddress LPVOID lpBuffer DW