为了识别内存代码注入(inject)(在windows系统上),我想对系统上所有进程的内存进行hash,比如calc.exe的内存一直是x,现在是y,我知道有人注入(inject)了calc.exe代码。
1:这个思路对吗?进程内存的哪一部分始终保持不变,哪一部分在变化?
2:dll是在单独的内存中,还是在exe的内存中?换句话说,我可以为 dll 的内存生成哈希吗?
3:如何在 C++ 中转储进程或 dll 的内存?
最佳答案
在运行 windows 时,代码不断地被注入(inject)到进程中。
一个例子是延迟加载的 DLL。当进程启动时,只加载核心 DLLS。当执行某些功能时,代码首先从磁盘加载新的 DLL(代码),然后执行它。
另一个例子是 .NET 托管应用程序。大多数代码作为未编译的代码保存在磁盘上。当应用程序的新部分需要运行时,.NET 运行时会加载未编译的代码,对其进行编译(也称为 JIT),然后执行它。
您试图解决的问题是值得的,但非常困难。操作系统本身会尝试解决此问题以保护您的进程。
如果你想做一些比 Windows 在幕后为你做的更高级的事情,首先要做的是了解 Windows 为保护进程和验证注入(inject)其中的代码而采取的所有步骤,同时仍然使进程能够动态加载代码(这是必要的)。
祝你好运。
或者您有更具体的问题要解决?
关于c++ - 通过进程或 dll 的内存转储识别内存代码注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24441593/