是否可以将数据与正在运行的进程相关联?

时间:2013-03-05 13:07:05

标签: windows winapi process

正如标题所说,我想将一个随机数据位(ULONG)与本地计算机上正在运行的进程相关联。我希望这些数据与其关联的过程持续存在,而不是读取和处理的过程。写数据。这在Win32中可能吗?

1 个答案:

答案 0 :(得分:0)

是的,但这可能很棘手。您无法访问另一个进程的任意内存地址,也无法依赖共享内存,因为您希望使用任意进程执行此操作。

棘手的方式

您可以做的是在要装饰的流程中创建窗口(带有特殊且已知的名称)。有关没有窗口的替代解决方案,请参阅帖子的结尾。

  • 首先,您必须使用OpenProcess来处理流程。
  • 在另一个进程中使用VirtualAllocEx分配内存以保存一个简短的方法,该方法将创建一个具有特殊已知名称的(隐藏)窗口。
  • 使用WriteProcessMemory从您自己的代码中复制该功能。
  • 使用CreateRemoteThread执行。

现在您需要一种方法来识别和回读除了创建该内存之外的其他进程的内存。为此,您只需找到具有该已知名称的窗口,并获得一小部分数据的 holder

请注意,此技术可用于在另一个进程中注入代码,因此某些防病毒软件可能会对此进行警告。

最后的笔记
如果禁用地址空间随机化,则可能不需要在进程内存中注入代码,可以使用具有相同参数的Windows内核函数的地址调用CreateRemoteThread(例如LoadLibrary)。您无法使用本机应用程序(未链接到kernel32.dll)执行此操作。
除非您具有进程的调试权限(使用AdjustTokenPrivileges),否则无法注入系统进程。

作为假窗口的替代方法,您可以使用本地变量,TLS或用作数据块的堆栈条目创建挂起的线程。要查找此主题,您必须使用例如this为其命名(但它很少适用)。

天真的方式

穷人解决方案(但可能更容易实现,并且在某种程度上更加健壮)可以使用ADS为要监视的每个进程隐藏一个小数据文件(当然是与之关联的ADS)它的图像然后它不适用于服务和rundll'ed过程,除非你把它变得更复杂)。

  • 迭代所有进程,并为每个进程创建一个具有已知名称(和进程ID)的ADS。
  • 在其中,您必须存储系统启动时间和所需的所有数据。

回读这些信息:

  • 迭代所有进程并检查该ADS,读取它并比较系统启动时间(如果它们不匹配则意味着您找到了寡妇 ADS并且应将其删除。

当然你必须照顾这些寡妇,所以你可能需要定期检查它们。当然,您可以避免将所有这些小块数据存储到一个众所周知的位置,您的“读者”可能每次都会检查它们,删除不再与正在运行的进程相关联的文件。