【问题标题】:identify memory code injection by memory dumping of process or dll通过进程或 dll 的内存转储识别内存代码注入
【发布时间】:2014-06-26 23:06:13
【问题描述】:

为了识别内存代码注入(在windows系统上),我想对系统上所有进程的内存进行hash,例如,如果calc.exe的内存总是x,现在是y,我知道有人注入了 calc.exe 代码。

1:这个想法正确吗?进程内存的哪一部分始终保持不变,哪一部分在变化?

2:dose dll有单独的内存,还是在exe的内存中?换句话说,我可以为 dll 的内存生成哈希吗?

3:如何在 c++ 中转储进程或 dll 的内存?

【问题讨论】:

    标签: c++ code-injection memory-dump


    【解决方案1】:

    在运行 windows 时,代码不断被注入到进程中。

    一个例子是延迟加载的 DLL。当一个进程启动时,只加载核心 DLLS。当某些功能得到执行时,代码首先从磁盘加载新的 DLL(代码),然后执行它。

    另一个例子是 .NET 托管应用程序。大多数代码作为未编译的代码存在于磁盘上。当需要运行应用程序的新部分时,.NET 运行时会加载未编译的代码,对其进行编译(也称为 JIT),然后执行它。

    您尝试解决的问题是值得的,但非常困难。操作系统本身试图解决这个问题以保护您的进程。

    如果您尝试做一些比 windows 在幕后为您做的更高级的事情,首先要做的是了解 windows 为保护进程和验证注入其中的代码而采取的所有步骤,同时仍然使进程能够动态加载代码(这是必要的)。

    祝你好运。

    或者你有一个更具体的问题要解决?

    【讨论】:

      【解决方案2】:

      1) 这个想法很好。但是只要进程运行,他们就会改变他们的记忆(或者他们什么都不做),所以它不会工作。您可以做的是对内存的代码部分进行哈希处理。

      2) 不,DLL 是链接到您的代码的库,而不是单独的进程。它们只是动态加载而不是静态加载(http://msdn.microsoft.com/en-us/library/windows/desktop/ms681914%28v=vs.85%29.aspx

      3) 通常您的操作系统会禁止您访问相邻进程的内存。如果它允许您的进程使用它,那么恶意软件很容易传播,并且您的系统将非常不稳定,因为一个崩溃的进程可能会导致所有其他进程崩溃。所以做这种转储会非常非常棘手!但是,如果您的流程具有正确的权限,您可以查看ReadProcessMemory()

      【讨论】:

        【解决方案3】:

        我刚刚做了类似的事情,我基本上是c#的这些脚本:

        http://www.exploit-monday.com/2012/03/powershell-live-memory-analysis-tools.html

        【讨论】:

          猜你喜欢
          • 2012-08-20
          • 2011-03-21
          • 1970-01-01
          • 2014-05-27
          • 1970-01-01
          • 2023-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多