首页
论坛
课程
招聘
分享一个任意点hook的inlinehook库(同时支持用户和内核)
2018-4-10 22:44 14314

分享一个任意点hook的inlinehook库(同时支持用户和内核)

2018-4-10 22:44
14314

由于本人水平有限,错误之处难免,请大家不吝指正哈!

2018/4/16:更新了在hook时候挂起其他的cpu防止挂钩高频函数蓝屏问题
2018年/4/16:把代码放到github上,在readme上有详细的的使用方式说明:https://github.com/chinatiny/InlineHookLib.git

0x1 HOOK库有很多,这个有什么不同

  1. 可以执行任意点InlineHook
  2. 使用方便,让InlineHook成为享受,特别是从函数中间开始hook
  3. 在hook的过程中可以很方便的做到对每个寄存器进行过滤
  4. 同时支持内核和用户
  5. 标题中说的任意点hook其实有点夸大,其实需要满足一个要求,就是hook点开始往下数6个字节,必须还在一个函数就好了

0x2 为什么要发这篇帖子

  1. 取之看雪还之看雪,之前一直在看雪上索取,感觉应该贡献一点
  2. 方便大家做hook,所以接口参数我尽可能做的精简,让大家做hook感觉很简单

0x3 使用的流程

图片描述

0x4用户层HOOK例子

#include <windows.h>
#include <stdio.h>
#include "InlineHook.h"
#include <tchar.h>



void Func1()
{
    MessageBox(0, _T("原始函数"), _T("提示"), MB_OK);
}

void _stdcall HookedProc(HookContex* hookContex)
{
    TCHAR szHookBuff[MAX_PATH] = { 0 };

    _stprintf_s(szHookBuff, _countof(szHookBuff),
        _T("当执行的hook点的时候各个寄存器的值:\n\
        Eax = 0x%08X\n\
        Ecx = 0x%08X\n\
        Edx = 0x%08X\n\
        Ebx = 0x%08X\n\
        Esi = 0x%08X\n\
        Edi = 0x%08X\n\
        Ebp = 0x%08X\n\
        Esp = 0x%08X\n\
        EFlags = 0x%08X\n,你可以直接在这个函数中修改寄存器并在执行原来的地址的时候,寄存器将会是你修改的值\n"),
        hookContex->uEax,
        hookContex->uEcx,
        hookContex->uEdx,
        hookContex->uEbx,
        hookContex->uEsi,
        hookContex->uEdi,
        hookContex->uEbp,
        hookContex->uEsp,
        hookContex->uEflags
        );

    MessageBox(0, szHookBuff, _T("提示"), MB_OK);
}


int main()
{
    InlineHookSt inlineSt;
    InitInlineHook(&inlineSt, Func1, HookedProc);
    InstallInlineHook(&inlineSt);

    //测试安装hook的效果
    Func1();

    //卸载钩子的执行效果
    UninstallInlineHook(&inlineSt);
    Func1();
    return 0;
}

0x5 用户层的效果演示:

图片描述

0x6 内核层HOOK例子

        void  _stdcall  HookedKeStackAttachProcess(HookContex* hookContex)
        {
        KdPrint(("eax:%08X\n", hookContex->uEax));
        }

        //对KeStackAttachProcess挂钩防止进程挂靠
    UNICODE_STRING funcName;
    RtlInitUnicodeString(&funcName, L"KeStackAttachProcess");
    PVOID pKeStackAttachProcessAddr = MmGetSystemRoutineAddress(&funcName);
    InitInlineHook(&g_InlineKeStackAttachProcess, pKeStackAttachProcessAddr, HookedKeStackAttachProcess);
    InstallInlineHook(&g_InlineKeStackAttachProcess);

0x7 内核层hook效果演示

图片描述

0x8 hook库只提供了对寄存器的过滤,如何对函数参数进行过滤?

  1. 寄存器中有esp和ebp,并且hook的地点由你自己来定,可以直接通过esp或者ebp找到参数修改或者拦截掉

0x9 代码直接在git上下载即可


第五届安全开发者峰会(SDC 2021)10月23日上海召开!限时2.5折门票(含自助午餐1份)

最后于 2018-4-16 19:03 被又出bug了编辑 ,原因:
收藏
点赞0
打赏
分享
最新回复 (52)
雪    币: 1281
活跃值: 活跃值 (119)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
八岛 活跃值 1 2018-4-10 22:56
2
0
感谢分享
雪    币: 195
活跃值: 活跃值 (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shenmumu 活跃值 2018-4-10 22:57
3
0
这个太棒了
雪    币: 14202
活跃值: 活跃值 (1428)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
KevinsBobo 活跃值 8 2018-4-10 23:55
5
0
感谢分享
雪    币: 14812
活跃值: 活跃值 (467)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
atompure 活跃值 2018-4-11 06:11
6
0
谢谢分享!
雪    币: 117
活跃值: 活跃值 (117)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
渗透 活跃值 2018-4-11 07:31
7
0
雪    币: 122
活跃值: 活跃值 (361)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wem 活跃值 2018-4-11 07:33
8
0
谢谢分享
雪    币: 5977
活跃值: 活跃值 (359)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
softCracker 活跃值 2018-4-11 09:36
9
0
感谢分享
雪    币: 6448
活跃值: 活跃值 (788)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xie风腾 活跃值 2018-4-11 10:19
10
0
多谢楼主分享哟
雪    币: 1568
活跃值: 活跃值 (677)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
pxhb 活跃值 2 2018-4-11 13:29
11
0
感谢分享
雪    币: 5901
活跃值: 活跃值 (855)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jgs 活跃值 2018-4-11 14:32
12
0
感谢楼主分享,学习
雪    币: 539
活跃值: 活跃值 (55)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
ggsuper 活跃值 2018-4-11 16:29
13
0
感谢分享
雪    币: 233
活跃值: 活跃值 (581)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kakasasa 活跃值 2018-4-11 16:55
14
0
感谢分享
雪    币: 95
活跃值: 活跃值 (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pccq 活跃值 2018-4-11 17:09
15
0
感谢分享
雪    币: 1166
活跃值: 活跃值 (83)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
Ericky 活跃值 6 2018-4-11 17:32
16
0
感谢分享
雪    币: 5653
活跃值: 活跃值 (374)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
PPTV 活跃值 2018-4-11 23:03
17
0
好吧,和我写的差不多...
最后于 2018-4-11 23:18 被PPTV编辑 ,原因:
雪    币: 6817
活跃值: 活跃值 (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
聖blue 活跃值 2018-4-11 23:44
18
0
雪    币: 287
活跃值: 活跃值 (31)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
sjh_pediy 活跃值 2018-4-12 07:52
19
0
感谢共享
雪    币: 672
活跃值: 活跃值 (101)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
FishSeeWater 活跃值 11 2018-4-12 10:48
20
0
好工具~
雪    币: 269
活跃值: 活跃值 (77)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
WinDos2K 活跃值 2018-4-12 11:43
21
0
我想修改寄存器参数或过滤,有没有好方法。
雪    币: 358
活跃值: 活跃值 (199)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
又出bug了 活跃值 2 2018-4-12 14:36
22
0
WinDos2K 我想修改寄存器参数或过滤,有没有好方法。
抱歉哈,现在才看到,因为一直忙着简历求职的事情,过段时间我发个例子,到时候再通知下
---------------------------------
其实你这个问题,如果想修改寄存器,回调函数中有一个hookcontex,里面有各种寄存器直接直接修改就好了,修改完后再调用原来的函数时候寄存器就是你修改的值,我说了一大堆肯定是一个实例代码最好,你可以先自己研究下,过个两天我把手中的作品开源下,里面有详细的使用例子,抱歉哈!
雪    币: 245
活跃值: 活跃值 (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
airbus 活跃值 2018-4-12 16:30
23
0
下载一份学习下
雪    币: 5901
活跃值: 活跃值 (855)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jgs 活跃值 2018-4-12 20:26
24
0
期待楼主的例子,关注中
雪    币: 2
活跃值: 活跃值 (593)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yaoguen 活跃值 2018-4-12 21:28
25
0
要是能支持x64程序就完美了
游客
登录 | 注册 方可回帖
返回