配置 EasyHook 静态库编译环境 首先去官方下载 EasyHook 源代码到本地,使用 VS2015 打开项目(目前官方是 VS2013 编译的,最低不能低于 VS2010 SP1,因为官方最新代码中引入了 删除如下内容: #ifdef EASYHOOK_EXPORTS #define EASYHOOK_API __declspec(dllexport) #define DRIVER_SHARED_API(type, decl) EXTERN_C type EASYHOOK_API decl #else #define EASYHOOK_API PROC_##decl; EXTERN_C type EASYHOOK_API decl #endif #endif 替换为 #define EASYHOOK_API __stdcall #define DRIVER_SHARED_API(type, decl) typedef type EASYHOOK_API PROC_##decl; EXTERN_C type EASYHOOK_API decl
它使用 EasyHook 将一个 DLL 注入 mstsc.exe,然后它会挂钩 CryptProtectMemory api 调用。 hook 将从传递给 CryptProtectMemory 的地址中获取密码,然后通过 EasyHook 的 IPC 服务器将其发送到主进程。
SharpHook SharpHook的灵感来自SharpRDPThief项目,这两都是C#写的,使用EasyHook将DLL注入到mstsc.exe中,然后该DLL将挂钩CryptProtectMemory API调用,该钩子将从传递给CryptProtectMemory的地址中抓取密码,最后通过EasyHook的IPC服务器将其发送到主进程。
然后篡改地址空间中NtQuerySystemInformation函数的的代码加入跳转语句跳转到我们伪造的NtQuerySystemInformation去,整个DLL注入的过程不需要亲自动手,有现成的EasyHook 库( http://easyhook.github.io)可以实现。 同时,EasyHook还要求我们再dll中定义安装函数,这个不复杂,直接从官方教程粘贴代码简单改改就好: ? 写好了DLL,下一步就是找到目标进程注入进去了。 下图是用来将我们写的DLL注入到scManager.sys的代码,这里代码做的事情是查找名为scManager.sys的进程,读取进程的PID,然后调用EasyHook的API将我们写的DLL注入到对应的进程中
Github地址:https://github.com/nmgwddj/EasyHook 如何使用 下载 VS2010 打开项目编译后,会生成 ExampleDll.dll 和 ExampleDll64
前段时间借助开源项目 EasyHook 制作了一个在应用层下的监控进程创建的工具。