如何获取另一个进程的基地址? (ASLR)
How do I get the base address of another process? (ASLR)
我需要获取 .exe 的基地址,它在每次启动时都有一个随机基地址。我已经试过了,但它似乎不起作用:
int Base = (DWORD)GetModuleHandle("Test.exe");
怎么了?
您似乎正在尝试获取另一个进程的基地址。遗憾的是,GetModuleHandle
仅适用于当前进程中的模块。为了实现你的目标,你需要使用 PSAPIs 或者 CreateToolhelp32Snapshot
来提取另一个进程的模块列表。基地址在列表中。
I need to get the base address/entry point address of a .exe which has a random base address everytime its started. The program uses ASLR.
...
I will use it to edit certain chunks of memory inside the correct process
为了向另一个进程写入数据,你需要使用WriteProcessMemory()
,这需要你打开一个HANDLE
到被写入的进程。
您使用 OpenProcess()
获得 HANDLE
,请求 PROCESS_VM_OPERATION
和 PROCESS_VM_WRITE
权限。 OpenProcess()
将进程 ID 作为输入,您可以从中获取:
CreateToolhelp32Snapshot()
/Process32First()
/Process32Next()
EnumProcesses()
.
WTSEnumerateProcesses()
参见 Process Enumeration and Enumerating All Processes。
您在任何时候都不需要确定正在写入的进程的基地址。让系统为您跟踪该信息。您只需要打开 HANDLE
流程即可。
我需要获取 .exe 的基地址,它在每次启动时都有一个随机基地址。我已经试过了,但它似乎不起作用:
int Base = (DWORD)GetModuleHandle("Test.exe");
怎么了?
您似乎正在尝试获取另一个进程的基地址。遗憾的是,GetModuleHandle
仅适用于当前进程中的模块。为了实现你的目标,你需要使用 PSAPIs 或者 CreateToolhelp32Snapshot
来提取另一个进程的模块列表。基地址在列表中。
I need to get the base address/entry point address of a .exe which has a random base address everytime its started. The program uses ASLR.
...
I will use it to edit certain chunks of memory inside the correct process
为了向另一个进程写入数据,你需要使用WriteProcessMemory()
,这需要你打开一个HANDLE
到被写入的进程。
您使用 OpenProcess()
获得 HANDLE
,请求 PROCESS_VM_OPERATION
和 PROCESS_VM_WRITE
权限。 OpenProcess()
将进程 ID 作为输入,您可以从中获取:
CreateToolhelp32Snapshot()
/Process32First()
/Process32Next()
EnumProcesses()
.WTSEnumerateProcesses()
参见 Process Enumeration and Enumerating All Processes。
您在任何时候都不需要确定正在写入的进程的基地址。让系统为您跟踪该信息。您只需要打开 HANDLE
流程即可。