API拦截——实现Ring3全局HOOK.docVIP

  • 7
  • 0
  • 约8.76千字
  • 约 20页
  • 2015-07-23 发布于河南
  • 举报
API拦截——实现Ring3全局HOOK 首先来解释一下这次的目标。由于windows的copy-on-write机制(Ring0下可以用CR0寄存器关掉它),Ring3下的HOOK只对当前进程有效,其他进程的API还是正常的。这就是说我们必须枚举进程,然后对每个Ring3进程执行一遍HOOK操作。 但是,系统中总有新进程产生,对于这些新进程我们怎么处理呢?最容易想到的就是设置一个TIMER,每隔一段时间就枚举一遍进程然后把新的挂钩。但仔细一想就知道不行,TEMER过快严重影响系统效率,慢了又起不到作用,况且windows不是一个实时操作系统,没人能保证到时间TEMER就被激活。如果我们能监控进程创建,并在他们真正运行之前就执行挂钩操作,就可以完美的解决问题。 但是如何做到这一点呢?我们知道Ring3的进程都有一个“父进程”也就是说新进程都是由老进程创建的(驱动很少创建进程)。知道这一点就好办了,我们要做的只是截获进程创建。你肯定会说“这么简单,HOOK NtCreateProcess就可以了!”但是这不是最简单的做法。为什么这么说呢,首先在NtCreateProcess函数被调用时进程并没有真正被创建,我们无法执行HOOK操作,而当NtCreateProcess返回时,进程又已经开始运行,HOOK时存在线程同步的问题(我用OD在NtCreateProcess设下INT3断点,却

文档评论(0)

1亿VIP精品文档

相关文档