DLL注入和API 拦截

一.注册表注入

AppInit_DLLs值在以下注册表项中找到:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows

在此值中指定的所有 Dll 都被加载的每个基于 Windows 的应用程序中。当User32.dll被影射到一个新的进程的时候,会收到DLL_PROCESS_ATTACH通知。User32.dl会取得上述注册表键的值,并调用LOadlibrary 来载入这个字符串中制定的所有DLL。只有加载User32.dll的应用程序才会使用到上述的注册表来注入DLL 。U

我们的DLL只会被影射到那些使用了User32.dll的进程中,所有基于GUI的应用程序都使用了User32.dll,但大多数CUI应用程序没有使用User32.dll。

二.使用windows挂钩(hook)注入

调用SetWindowsHookEx函数来安装挂钩:

ex: HHOOK hHook = SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,hInstDll,0);

第一个参数表示安装挂钩类型:可以参考: 

Hook Scope
WH_CALLWNDPROC Thread or global
WH_CALLWNDPROCRET Thread or global
WH_CBT Thread or global
WH_DEBUG Thread or global
WH_FOREGROUNDIDLE Thread or global
WH_GETMESSAGE Thread or global
WH_JOURNALPLAYBACK Global only
WH_JOURNALRECORD Global only
WH_KEYBOARD Thread or global
WH_KEYBOARD_LL Global only
WH_MOUSE Thread or global
WH_MOUSE_LL Global only
WH_MSGFILTER Thread or global
WH_SHELL Thread or global
WH_SYSMSGFILTER Global only

 第二个参数是一个函数的地址,第三个参数标示一个DLL,这个DLL包含这第二个参数指定的函数,第四个参数为线程ID。

例:进程Pa安装了挂钩,当第一个参数为WH_GETMESSAGE,当进程pb中的一个线程准备向一个窗口发送消息会:

  1. 系统检测该进程是否安装了WH_GETMESSAGE挂钩
  2. 系统检测GetMsgProc所在的DLL是否被影射到该进程(pb)的地址空间中
  3. 如果尚未被影射,那么系统会强制将该DLL影射到该进程(pb)中并将该进程中该DLL的锁计数器递增



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值