访问被拒绝到模块的内存

时间:2015-08-09 03:14:55

标签: memory assembly readprocessmemory

作为一种爱好,我一直在花时间学习二进制文件。我正在创建一个主要执行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头?

1 个答案:

答案 0 :(得分:0)

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