0

作为一种爱好,我一直在花时间学习二进制文件。我正在创建一个程序,它主要完成 Ollydbg 的工作。我认为承担如此大的项目将教会我所有我想知道的关于 PE 的知识。现在我正在处理一个类似于 Ollydbg 的内存映射的对话框,并列出了与每个模块相关的堆和部分,但在访问系统模块的权限方面遇到了一些问题。我首先打开一个文件并将其作为调试对象运行。我那时

invoke OpenProcess,PROCESS_VM_READ,FALSE,AttachedPID

invoke ReadProcessMemory,eax,MemMapBaseAddress,offset MemMapMappingBuffer,1024h,offset MemMapNumberOfBytesWritten
invoke GetLastError

这适用于我尝试读取的大约 30% 的模块。其余的给我一个 12B 错误,只有部分 ReadProcessMemory 或 WriteProcessMemory 请求完成。给我这个错误的一个模块是 ntdll。所以我做了一些研究,发现我可能没有权限访问我试图访问的内存部分。所以我尝试用

invoke OpenProcess,PROCESS_VM_READ,FALSE,AttachedPID
push eax

invoke VirtualProtectEx,eax,offset MemMapBaseAddress,1024h,PAGE_READWRITE,offset OldProtect
invoke GetLastError

pop eax
invoke ReadProcessMemory,eax,MemMapBaseAddress,offset MemMapMappingBuffer,1024h,offset MemMapNumberOfBytesWritten
invoke GetLastError

对于 VirtualProtectEx,我收到错误 5,访问被拒绝。我也尝试以管理员身份运行该程序并得到相同的结果。关于什么让我无法读取作为调试对象加载的模块的 PE 标头的任何想法?

4

1 回答 1

0

您必须以管理员身份运行可执行文件,如果您想完全访问外部进程的内存,您可能还需要将令牌特权调整为SeDebugPrivelage 。

于 2020-03-29T22:11:28.317 回答