首页
社区
课程
招聘
[原创]ring0注入ring3的一种新方法
发表于: 2009-12-29 17:26 33511

[原创]ring0注入ring3的一种新方法

2009-12-29 17:26
33511

插APC越来越不好使了,想到了一种新的方法,实践了一下,发出来与大家分享。

其实要注入ring3的进程,本质上只是想要借用该进程中的某一个线程来执行一段其它代码而已,再透彻一点讲只是要借用一下某个线程的eip来暂时指向我们想让它执行的代码。当然,用完过后要想办法让eip能回到原位,这样就不会对该ring3线程本身的工作产生干扰。

具体来讲可以这样做:

1、先在要注入的进程中找到一个没有退出的,并且没有被挂起的用户线程。(其实如果找被挂起的还省事一点,就是等的时间长了点,要等它resume过后,注入的代码才会被执行。这里以挂起的为例)

2、挂起该线程。这是为了防止它被调度,因为我们要修改它的EIP。但是KeSuspendThread是没有导出的,需要自己实现。(附件的示例代码中是通过查找特征码来做的)

3、我们先来看一看准备注入到Ring3的代码。在本示例中,我准备注入的代码如下:

////////////////////////////////////////////////
//
//  被注入到ring3进程的代码
//
////////////////////////////////////////////////
_declspec (naked) void ShellCode() {
	_asm {
		push eax
		// 弹个MessageBox为例
		push 0
		push 0
		push 0
		push 0
		mov eax, 0x77D66484		// MessageBoxW 的地址,XP SP2
		call eax
		pop eax
		// jmp ds:12345678H, 绝对地址跳转
		_emit 0xEA
		_emit 0x78
		_emit 0x56
		_emit 0x34
		_emit 0x12
		_emit 0x1B
		_emit 0x00
	}
}

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

上传的附件:
收藏
免费 8
支持
分享
最新回复 (32)
雪    币: 1024
活跃值: (240)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
2
顶一个
2009-12-29 17:30
0
雪    币: 1361
活跃值: (1121)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
占位  坐板凳 学习了
2009-12-29 17:32
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
4
都RING0了,还注个什么劲。
2009-12-29 17:36
0
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
5
我想在ring0中调用ring3的函数……
2009-12-29 17:41
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
6
代码很暴力。。。
2009-12-29 17:55
0
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
去年写过,你这个代码,微点会报毒. attach过去别分配内存,直接写PE即可.
上传的附件:
  • 1.jpg (45.50kb,1895次下载)
2009-12-29 17:56
0
雪    币: 564
活跃值: (42)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
8
不错,,下载看看学习。。。
2009-12-29 18:10
0
雪    币: 1407
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
暑假里在某博客看到过类似方法
2009-12-29 18:24
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
10
都进RING0了,还执行个什么劲RING3代码
2009-12-29 18:51
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不错,好东西。学习学习
2009-12-29 21:13
0
雪    币: 225
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
2009-12-29 21:25
0
雪    币: 227
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
2009-12-29 21:30
0
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
14
这个方法和SetThreadContext法差不多
2009-12-30 08:55
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
15
进不去RING0,千方百计要进RING0,进了RING0,又想跑出来执行RING3,一个字,*
2009-12-30 10:09
0
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
16
……

Ring3进Ring0,Ring0 Call Ring3,两者各有用处嘛,又没什么冲突……
2009-12-30 10:27
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
17
[QUOTE=菊冬;735480]去年写过,你这个代码,微点会报毒. attach过去别分配内存,直接写PE即可.
[/QUOTE]

一看注释说明,肯定是sudami的  
2009-12-30 11:17
0
雪    币: 4824
活跃值: (3827)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
18
你可以关掉KUSER_SHARED_DATA所在PTE的NX位啊,然后就不存在你说的这个问题了。

顺便就你的原始需求,可以看看MS09-050的remote kernel shellcode,那是一个精彩的演示。
2009-12-30 13:20
0
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
19
谢谢指点!学习了!
2009-12-30 13:45
0
雪    币: 33
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
您回了 3 贴 , 终于把这个贱字加进来, 看来实在是憋不住了?

RING0 执行 ring3 不是有很多人都发出来过 ,

技术分析而已,为什么一定说贱呢?

不知道这个算不算 "语言挑衅"?
2009-12-30 13:56
0
雪    币: 445
活跃值: (52)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
太好了,~好事!
2009-12-30 14:09
0
雪    币: 445
活跃值: (52)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
唉~没办法呀~牛人嘛!
2009-12-30 14:11
0
雪    币: 45
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
剑圣 剑魔 剑魂
2009-12-30 15:10
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
狂战士来了。膜拜fypher大牛
2010-2-5 17:49
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
为了显示一个GUI。。。。。。。
2010-2-7 22:46
0
游客
登录 | 注册 方可回帖
返回
//