我正在使用 Windows 8 64 位。我知道 C++ 和汇编的基础知识。如果我要写一个杀毒程序,它应该可以访问任何进程的内存,对吧?我已经设法使用 VirtualQueryEx 和 ReadProcessMemory 编写了一个能够读取大多数进程内存的程序。但是,我遇到了一个不允许我使用 VirtualQueryEx 的应用程序。即使具有调试权限,它也会因访问被拒绝错误而失败。
我可以做些什么来使自己能够使用 VirtualQueryEx 访问进程的内存?或者我应该采取其他方法来访问这些难以访问的进程吗?
我已经做了一些研究,想知道我应该遵循哪种方法:
我遇到了一个信息,可以在内核模式下读取任何内存而没有任何限制。真的吗?但在内核模式下,没有诸如 VirtualQueryEx 或 ReadProcessMemory 之类的函数。我想我需要自己实现它们?但是我看到有人认为这样的功能非常不稳定,将来我可能会得到一个 BSOD 或……有人说我什至不应该使用内核模式来读取内存。有人可以回答我这个内核模式的实际情况吗?
我听说应用程序可能会挂钩某些 API,以防止其他应用程序使用这些功能。VirtualQueryEx 可能会在那个过程中被钩住吗?这就是我一直被拒绝访问的原因?如果是这种情况,我怎么能解开这个?
防病毒软件可能不太可能这样做,但简单的 DLL 注入会起作用吗?我的意思是,如果我能够将 dll 注入该进程,那么在我的 dll 中,我已经使用了该进程的虚拟地址空间,那么读取它的内存应该不是问题吗?
另一种方法?
对于此事的任何提示和帮助,我将不胜感激!