【问题标题】:Inter-process Hooking进程间挂钩
【发布时间】:2012-05-26 17:03:17
【问题描述】:

是否可以使用钩子跳转到另一个进程的运行内存,然后再跳转回来,而不需要像 DLL 注入那样的任何东西?

例如,如果进程A 有一个过程foo 并且进程B 有一个过程bar 具有与foo 相同的原型(用于挂钩),是否可以挂钩@987654327 @ 到 jmp 到 bar,假设两个进程都在运行?

编辑:这需要在 Windows 上完成。

【问题讨论】:

  • 您可能对this question and my answer to it感兴趣。
  • 顺便说一句,我们说的是 Windows,对吧?
  • @Alex - 是的,Windows。我会在那里添加。我现在正在访问该链接。
  • @Alex - 好的,请阅读。说得通。但是,EXE 将在自己的进程中加载​​;这就是问题所在。
  • 这正是我程序中的场景,有两个进程。

标签: c++ hook ipc


【解决方案1】:

根据定义,进程是一个沙盒。如果您甚至错误地超出了您的地址空间,它也会被引发并作为 SIG_USR 信号捕获并报告为分段错误

话虽如此,还有共享内存-shmem、管道和套接字等进程间通信机制,您可以使用这些机制进行跨进程通信。

编辑: 还有可用的 RPC(远程过程调用)机制,例如提供远程方法调用的 CORBA。

【讨论】:

  • 共享内存可以执行吗?
  • @Dani :我不确定您如何将共享内存标记为可执行文件。通常你的可执行文件的.txt 被加载到内存中,并且只有那个可以被执行。可以做的是,我们可以从操作系统中获取一些剪切内存并在那里编写一些指令,然后从您的代码中跳转到该地址以执行它。但它仍然只对您的进程和任何也在访问此共享内存的进程可见。
【解决方案2】:

Windows(以及 Unix 和可能绝大多数其他现代操作系统)中的每个进程都有自己的虚拟内存空间,通常映射到不同的物理地址。因此,将 DLL 注入另一个进程的地址空间是挂钩该进程中任何内容的唯一方法。另一方面,一旦您在该进程中有一个 DLL,您可以在那里做很多事情,例如。生成自己的线程并使用 Windows 消息与父进程通信(作为 Windows 中最简单的通信方法之一)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    相关资源
    最近更新 更多