如何获取另一个进程的基址?(美国法律评论)

How do I get the base address of another process? (ASLR)

本文关键字:评论 美国法 进程 何获取 获取 另一个      更新时间:2023-10-16

我需要获取每次启动时都有一个随机基址的.exe的基址地址。我已经试过了,但它似乎不起作用:

int Base = (DWORD)GetModuleHandle("Test.exe");

怎么了?

您似乎正在尝试获取另一个进程的基址。可悲的是,GetModuleHandle仅适用于当前进程中的模块。为了实现您的目标,您需要使用 PSAPI 或 CreateToolhelp32Snapshot 来提取另一个进程的模块列表。基址在列表中。

我需要获取每次启动时具有随机基址的.exe的基址/入口点地址。该程序使用 ASLR。

我将使用它在正确的进程中编辑某些内存块

为了将数据写入另一个进程,您需要使用 WriteProcessMemory() ,这要求您打开要写入的进程的HANDLE

您可以使用OpenProcess()获得该HANDLE,请求PROCESS_VM_OPERATIONPROCESS_VM_WRITE权限。 OpenProcess()将进程 ID 作为输入,您可以从以下位置获取:

  • CreateToolhelp32Snapshot()/Process32First()/Process32Next()
  • EnumProcesses() .
  • WTSEnumerateProcesses()

请参阅进程枚举和枚举所有进程。

任何时候都不需要确定要写入的进程的基址。 让系统为您跟踪该信息。 您所需要的只是对该过程的开放HANDLE