FileMonitorHook例子(translate)

EasyHook-FileMonitorHook

创建远程文件监视器

在本教程中,我们将使用EasyHook创建一个远程文件监视器。
我们将介绍如何:
根据进程ID将托管程序集注入现有目标进程,使用可执行文件路径将托管程序集注入新创建(并暂停)的进程
在远程进程中创建本地挂钩以监视3个文件操作(CreateFile,ReadFile和WriteFile),使用.NET进程间通信(IPC)将报告文件访问回主控制台应用程序.

在本教程中,我们将创建一个包含两个项目的解决方案:
FileMonitor:一个C#控制台应用程序;
FileMonitorHook:包含钩子逻辑和IPC接口的C#类库。该组件是我们的注入payload。

Remote hooking 概述

远程hook通常先用“injector”向目标进程注入一个payload,利用这个payload再安装我们的钩子。
由此,EasyHook库提供了“EasyHook.RemoteHooking”静态类和“EasyHook.IEntryPoint”接口。

  1. EasyHook.RemoteHooking.Inject:
    向指定的进程注入特定的32位/64位payload指令集,提供的参数将被传递给被注入的库。
  2. EasyHook.RemoteHooking.CreateAndInject:
    从提供的可执行路径和命令行以挂起状态创建一个新进程,然后以“Inject”方式注入一个特定的32位/64位payload。
  3. EasyHook.RemoteHooking.WakeUpProcess:
    与payload/注入库中的CreateAndInject结合使用,以在准备就绪时唤醒进程。
  4. EasyHook.RemoteHooking.IpcCreateServer:
    一个用来初始化injector和host的IPC通道的辅助方法。
  5. EasyHook.RemoteHooking.IpcConnectClient:
    一个用来在注入完成后将客户端连接至IPC通道的辅助方法。(被运行在目标进程中的注入的dll所调用)
  6. EasyHook.IEntryPoint:
    payload指令集必须包含一个public类来实现此接口。

待完成注入后payload将使用EasyHook.LocalHook来创建钩子。

EasyHook.RemoteHooking.Inject

  • 1. EasyHook.RemoteHooking.Inject 序列化配置,包括payload集合的路径和参数。
  • 2. 向指定的目标进程中注入原生EasyHook32.dll或EasyHook64.dll依赖于它本身是32位或64位。如果有必要的话,EasyHook将自动使用EasyHookSvc32/64.exe来帮助程序将32位注入到64位中或反过来。

    EasyHook.RemoteHooking.Inject 将会等待,直到它超时或者它已经发出注入已完成/失败的信号。

– 此时已运行在目标进程中 –

  • 3. EasyHook32/64.dll通过加载EasyLoad32/64.dll来完成“managed injection”
    (EasyLoad尝试创建一个新的AppDomain,以便可以卸载注入库)
    (EasyHook32/64.dll发出EasyHook.RemoteHooking.Inject注入完成的信号)

  • 4. EasyLoad将托管程序集EasyHook.dll加载到目标进程并调用EasyHook.InjectionLoader.Main方法。

  • 5. EasyHook.InjectionLoader反序列化配置,加载有效负载程序集并查找与提供给EasyHook.RemoteHooking.Inject调用的参数相匹配的EasyHook.IEntryPoint。
  • 6. 如果找到,就会实例化payload集合中相匹配的EasyHook.IEntryPoint并最终调用对应的Run方法。
  • 7. Payload的Run方法安装若干钩子。

    最后当Run方法退出后,EasyLoad将会尝试卸载AppDomain

EasyHook.RemoteHooking.CreateAndInject

  1. 从提供的可执行路径和命令行以挂起状态创建一个新进程。
  2. 按照EasyHook.RemoteHooking.Inject的运行逻辑。
  3. 被创建的进程会保持被挂起的状态直到payload调用RemoteHooking.WakeUpProcess。