EasyHook库的使用

导语###

EasyHook的官网,最近在做的项目中,因为要去过滤掉cmd的弹框,所以用到了这个库,
在使用的过程中,遇到了一些坑,然后也解决了一些问题,特再次记录下来,方便自己以后查阅

1.了解####

首先我查找了网上的相关资料,都查的有点晕了,但有用的就那么几个,其它的就是引用这个几个例子,这样感觉效率不高,后面我还是先参照了官网的例子,才觉得真正对easyhook有了一个全面的了解。这个经验告诉我,在资料不够详尽的前提下,官网的例子才是更加靠谱的。easyhook提供了2种方式,一种是直接调用的方式,还有一种就是远程注入(也就是常说的dll注入),

2. 实践####

按照官网给的说明,完全copy里面的例子,实现了教材里的说明,对这个的作用有了一个很直观的感受,然后参照实际的使用需求,在例子的基础上做了修改,测试了自己要做的修改,确实可行。

3. 与项目结合####

  1. 项目需求点:公司产品前端使用的是NW框架,里面用的是chrome的内核,现在要做一个功能,需要升级,但是升级后不再支持 NPAPI 类型的插件,但支持PPAPI,但是这个时候出现一个问题,加载含有flash插件页面时,CMD命令行窗口会闪一下,要做到能加载flash插件,但是CMD命令行窗口不能闪。
  2. 解决:发现是命令行参数是not sandboxed时,通过hook截掉。
  3. 集成:按照例子中的代码,进行测试,发现既然不能拦截,郁闷啊,刚开始以为是注入失败,后面加了log,才发现,注入是成功的,失败的原因是因为NW刚起来的固定有几个进程,当弹CMD框的时候,会额外起进程,而我写的注入程序只注入了NW刚起来的程序,没有抓额外的进程,所以失败了,现在问题来了,怎么获取这个会弹cmd框的子进程呢?想了好久,没有找到合适的方法,后面想着只能去改NW的源码了,唉~~~
  4. 新的希望:后面我的同事有空,他就帮我看起来了,他比较厉害,他想到可以先hook起子进程的命令,然后在给这个子进程注入,去屏蔽掉
    not sandboxed,我就没有想到。然后安装这个思路,就往下做,这里都是hook了kernel32的CreateProcess方法,因为程序区分了宽字节和窄字节,所以要hook CreateProcessA和CreateProcessW这个二个,要确认你注入的程序是64位还是32位,然后注入相应版本的dll

问题点记录:

  1. LhSetExclusiveACL和LhSetInclusiveACL的区别
    LhInstallHook与LhSetExclusiveACL/LhSetInclusiveACL必须配对出现,否则hook不会生效,我在做测试的时候,发现我配对
    使用了,但是尽然还是没效果,找了好久,后面才发现,是因为我没有搞清楚LhSetExclusiveACL和LhSetInclusiveACL,LhSetExclusiveACL是hook除了当前线程外的所有线程,而LhSetInclusiveACL是可以针对当前线程,所以如果单独起了线程去执行hook的操作,那这样必须使用LhSetExclusiveACL,如果没有起线程,直接执行hook,那必须使用LhSetInclusiveACL。
  1. EasyHook可以支持远程注入
  2. 在查看新东西的时候,官方文档很重要,先参照官方文档的例子,可以节约很多时间
  3. hook的时候要确定你注入的是64位还是32位



 

猜你喜欢

转载自blog.csdn.net/bruce135lee/article/details/81392420