首页
社区
课程
招聘
分享一个任意点hook的inlinehook库(同时支持用户和内核)
发表于: 2018-4-10 22:44 20684

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

2018-4-10 22:44
20684

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

图片描述

图片描述

图片描述

#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;
}
        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);
  1. 可以执行任意点InlineHook
  2. 使用方便,让InlineHook成为享受,特别是从函数中间开始hook
  3. 在hook的过程中可以很方便的做到对每个寄存器进行过滤
  4. 同时支持内核和用户
  5. 标题中说的任意点hook其实有点夸大,其实需要满足一个要求,就是hook点开始往下数6个字节,必须还在一个函数就好了
  1. 取之看雪还之看雪,之前一直在看雪上索取,感觉应该贡献一点
  2. 方便大家做hook,所以接口参数我尽可能做的精简,让大家做hook感觉很简单
  1. 寄存器中有esp和ebp,并且hook的地点由你自己来定,可以直接通过esp或者ebp找到参数修改或者拦截掉

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-4-16 19:03 被又出bug了编辑 ,原因:
收藏
免费 5
支持
分享
最新回复 (53)
雪    币: 861
活跃值: (683)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2018-4-10 22:56
0
雪    币: 195
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个太棒了
2018-4-10 22:57
0
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2018-4-10 23:55
0
雪    币: 20907
活跃值: (4100)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
谢谢分享!
2018-4-11 06:11
0
雪    币: 119
活跃值: (313)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
2018-4-11 07:31
0
雪    币: 515
活跃值: (3272)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wem
8
谢谢分享
2018-4-11 07:33
0
雪    币: 7415
活跃值: (1524)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢分享
2018-4-11 09:36
0
雪    币: 12348
活跃值: (5118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
多谢楼主分享哟
2018-4-11 10:19
0
雪    币: 6584
活跃值: (4541)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
11
感谢分享
2018-4-11 13:29
0
雪    币: 8924
活跃值: (5147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jgs
12
感谢楼主分享,学习
2018-4-11 14:32
0
雪    币: 545
活跃值: (247)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
13
感谢分享
2018-4-11 16:29
0
雪    币: 576
活跃值: (2035)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
感谢分享
2018-4-11 16:55
0
雪    币: 75
活跃值: (718)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
感谢分享
2018-4-11 17:09
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
16
感谢分享
2018-4-11 17:32
0
雪    币: 9698
活跃值: (2506)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
好吧,和我写的差不多...
最后于 2018-4-11 23:18 被PPTV编辑 ,原因:
2018-4-11 23:03
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
2018-4-11 23:44
0
雪    币: 288
活跃值: (269)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
感谢共享
2018-4-12 07:52
0
雪    币: 768
活跃值: (530)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
20
好工具~
2018-4-12 10:48
0
雪    币: 267
活跃值: (794)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
我想修改寄存器参数或过滤,有没有好方法。
2018-4-12 11:43
0
雪    币: 368
活跃值: (431)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
22
WinDos2K 我想修改寄存器参数或过滤,有没有好方法。
抱歉哈,现在才看到,因为一直忙着简历求职的事情,过段时间我发个例子,到时候再通知下
---------------------------------
其实你这个问题,如果想修改寄存器,回调函数中有一个hookcontex,里面有各种寄存器直接直接修改就好了,修改完后再调用原来的函数时候寄存器就是你修改的值,我说了一大堆肯定是一个实例代码最好,你可以先自己研究下,过个两天我把手中的作品开源下,里面有详细的使用例子,抱歉哈!
2018-4-12 14:36
0
雪    币: 244
活跃值: (174)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
下载一份学习下
2018-4-12 16:30
0
雪    币: 8924
活跃值: (5147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jgs
24
期待楼主的例子,关注中
2018-4-12 20:26
0
雪    币: 4614
活跃值: (4532)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
要是能支持x64程序就完美了
2018-4-12 21:28
0
游客
登录 | 注册 方可回帖
返回
//