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

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

2018-4-10 22:44
20953

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

图片描述

图片描述

图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#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;
}
1
2
3
4
5
6
7
8
9
10
11
    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了编辑 ,原因:
收藏
免费 6
支持
分享
赞赏记录
参与人
雪币
留言
时间
心游尘世外
感谢你的贡献,论坛因你而更加精彩!
2025-1-29 04:03
飘零丶
感谢你的贡献,论坛因你而更加精彩!
2024-9-16 01:53
shinratensei
看雪因你而更加精彩!
2024-9-13 03:22
704088
为你点赞~
2023-2-25 16:25
Grav1ty
为你点赞~
2023-2-25 10:36
PLEBFE
为你点赞~
2023-2-6 02:16
最新回复 (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
雪    币: 23352
活跃值: (3472)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2018-4-10 23:55
0
雪    币: 21729
活跃值: (4820)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
谢谢分享!
2018-4-11 06:11
0
雪    币: 119
活跃值: (323)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
2018-4-11 07:31
0
雪    币: 515
活跃值: (3332)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wem
8
谢谢分享
2018-4-11 07:33
0
雪    币: 7549
活跃值: (1749)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢分享
2018-4-11 09:36
0
雪    币: 13161
活跃值: (5863)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
多谢楼主分享哟
2018-4-11 10:19
0
雪    币: 7020
活跃值: (5014)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
11
感谢分享
2018-4-11 13:29
0
雪    币: 9619
活跃值: (5934)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jgs
12
感谢楼主分享,学习
2018-4-11 14:32
0
雪    币: 545
活跃值: (257)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
13
感谢分享
2018-4-11 16:29
0
雪    币: 576
活跃值: (2035)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
感谢分享
2018-4-11 16:55
0
雪    币: 75
活跃值: (758)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
感谢分享
2018-4-11 17:09
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
16
感谢分享
2018-4-11 17:32
0
雪    币: 10036
活跃值: (2897)
能力值: ( 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
活跃值: (319)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
感谢共享
2018-4-12 07:52
0
雪    币: 768
活跃值: (555)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
20
好工具~
2018-4-12 10:48
0
雪    币: 267
活跃值: (864)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
我想修改寄存器参数或过滤,有没有好方法。
2018-4-12 11:43
0
雪    币: 348
活跃值: (471)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
22
WinDos2K 我想修改寄存器参数或过滤,有没有好方法。
抱歉哈,现在才看到,因为一直忙着简历求职的事情,过段时间我发个例子,到时候再通知下
---------------------------------
其实你这个问题,如果想修改寄存器,回调函数中有一个hookcontex,里面有各种寄存器直接直接修改就好了,修改完后再调用原来的函数时候寄存器就是你修改的值,我说了一大堆肯定是一个实例代码最好,你可以先自己研究下,过个两天我把手中的作品开源下,里面有详细的使用例子,抱歉哈!
2018-4-12 14:36
0
雪    币: 244
活跃值: (189)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
下载一份学习下
2018-4-12 16:30
0
雪    币: 9619
活跃值: (5934)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jgs
24
期待楼主的例子,关注中
2018-4-12 20:26
0
雪    币: 4961
活跃值: (5041)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
要是能支持x64程序就完美了
2018-4-12 21:28
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册