首页
社区
课程
招聘
[原创]KeUserModeCallback用法详解
发表于: 2010-1-10 19:29 49999

[原创]KeUserModeCallback用法详解

2010-1-10 19:29
49999

ring0调用ring3早已不是什么新鲜事,除了APC,我们知道还有KeUserModeCallback.其原型如下:

NTSTATUS
KeUserModeCallback (
    IN ULONG ApiNumber,
    IN PVOID InputBuffer,
    IN ULONG InputLength,
    OUT PVOID *OutputBuffer,
    IN PULONG OutputLength
    );
//开始填充缓冲区
*(ULONG*)pBuf=(ULONG)pBuf+sizeof(ULONG);//这里放的是一个shellcode的指针,shellcode将会被放在pBuf+4的位置
RtlCopyMemory(pBuf+4,(char*)CallBackStub,CALLSTUBLEN);//pBuf+4的位置开始是shellcode
RtlCopyMemory(pBuf+32,szText,strlen(szText));//从bufer+32开始拷贝字符参数
RtlCopyMemory(pBuf+32+strlen(szText)+1,szCaption,strlen(szCaption));//注意加1以便留出一个0x00作为sxText的结束符
缓冲区的填充并没有什么特别的要求。这里我排列好的样子是:
kd> db 0x00370000
00370000  04 00 37 00 8b 44 24 04-ff 70 10 ff 70 0c ff 70  ..7..D$..p..p..p
00370010  08 ff 70 04 ff 10 c2 08-00 00 00 00 00 00 00 00  ..p.............
00370020  4b 65 55 73 65 72 4d 6f-64 65 43 61 6c 6c 62 61  KeUserModeCallba
00370030  63 6b 3a 20 48 65 6c 6c-6f 20 66 72 6f 6d 20 72  ck: Hello from r
00370040  69 6e 67 30 20 21 21 21-00 52 69 6e 67 30 00 00  ing0 !!!.Ring0..
00370050  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
00370060  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
00370070  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
ApiIndex=((ULONG)pBuf - KernelCallbackTable)/4;
Arguments[0]=addrMessageBoxA;
Arguments[1]=0;//hWnd=NULL
Arguments[2]=(ULONG)pBuf+32;//szText
Arguments[3]=(ULONG)pBuf+32+strlen(szText)+1;//szCaption
Arguments[4]=0;//MB_OK

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

上传的附件:
收藏
免费 8
支持
分享
最新回复 (28)
雪    币: 8196
活跃值: (2791)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
这贴不沙发、

要后悔。。呵呵。

谢谢分享
2010-1-10 19:47
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
3
教主很细心。
2010-1-10 19:57
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
细致一点,把原理搞清楚,感觉才算真正明白~~
2010-1-10 20:04
0
雪    币: 320
活跃值: (278)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
achillis的贴要顶
2010-1-10 20:29
0
雪    币: 695
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
向教主学习
2010-1-10 20:36
0
雪    币: 708
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
学习了
2010-1-10 20:42
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
顶教主跟教主学习科学知识
2010-1-11 09:36
0
雪    币: 442
活跃值: (107)
能力值: ( LV9,RANK:350 )
在线值:
发帖
回帖
粉丝
9
tks!!!
2010-1-11 11:22
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
有详细的apiindex表就好了
2010-1-11 18:12
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
11


只能根据回调函数的名字猜了~
2010-1-11 18:17
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
12
随便找个GUI进程ATTACH过去

输入
dds poi(peb地址+2c) l50

API INDEX-函数对应表就出来了
2010-1-11 19:04
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
13
有的只看名字还是不知道什么意思啊,比如前面几个
2010-1-11 22:09
0
雪    币: 492
活跃值: (53)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
14
进来学习一下
2010-1-11 22:09
0
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习了过年了看代码更精一步了
2010-1-14 04:41
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
细节决定成败...
2010-1-14 15:14
0
雪    币: 130
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
好贴,收藏!!
2010-1-15 09:31
0
雪    币: 107
活跃值: (404)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
确实分析嘚很详细.....
2010-1-15 11:57
0
雪    币: 130
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
顶,虽然看不太懂,但占个座以后再细细看
2010-1-16 20:07
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
UP  
2010-1-17 20:27
0
雪    币: 257
活跃值: (28)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
21
学习了,谢谢楼主的好文章
2010-1-18 00:36
0
雪    币: 52
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
受益了。Thank u~~~~~
2010-1-18 02:25
0
雪    币: 155
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
23
顶啊顶啊顶啊顶
2010-1-18 09:24
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
从内核启动个进程可以用这个玩玩试
2010-2-26 16:32
0
游客
登录 | 注册 方可回帖
返回
//