首页
社区
课程
招聘
[原创]asm的魅力(四)
发表于: 2009-11-15 10:49 14089

[原创]asm的魅力(四)

2009-11-15 10:49
14089
;名称:MyKmd.asm

;功能:一个很简单的WDM(KDM)驱动程序,为自己的程序提供Ring0。

;说明:需要由“LoadMyKmd.exe”来安装。


;>>>>>>>>>>>>>>>STRUCT>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CALLGATE	STRUCT
	OFFSETL		DW	0
	SELECTOR	DW	0
	DCOUNT		DB	0
	GTYPE		DB	0
	OFFSETH		DW	0
CALLGATE    ENDS

DESCRIPTOR  STRUCT
	LIMITL		DW	0
	BASEL		DW	0
	BASEM		DB	0
	ATTRIBUTES	DW	0
	BASEH		DB	0
DESCRIPTOR  ENDS
;>>>>>>>>>>>>>>>>>equ>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CODES_SEL  =  3E8H
CODE_TYPE  =  0CF9AH
GATE_TYPE  =  0ECH

;>>>>>>>>>>>>>>>>>Code>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
  DriverEntry:
	pushfd
	pushad

	;取得GDTR内容
	push	edx			;压栈edx,esp-4,构建4字节空间
	sgdt	[esp-2]			;GDTR是48位,这里利用了技巧,在栈中构建了6字节空间,同时读出GDTR内容
					;而且还不破坏堆栈指针,巧巧巧!
	pop	edx			;全局描述符表基地址——这里只关心基址(在高双字,高址),所以出栈即是
	mov	eax,edx			;存放全局描述符开始地址

	;在全句描述符表开始地址存放retn指令机器码, 全句描述符表第一个描述符为空
	;表述符,被保留,没被用书上说这个描述符应该全为0这里看出 可以写东西进去。
	mov	BYTE ptr [edx],0C3H 

	mov	ecx,3E0h		;定位自己的门描述符,
	add	edx,ecx			;

     assume edx:ptr CALLGATE		;让描述符符位置在全局描述符的3E0这个位置
	cmp	[edx].SELECTOR,CODES_SEL
	jz	_ToEnd

	mov	[edx].OFFSETL,ax	;创建门描述符
	mov	[edx].SELECTOR,CODES_SEL
	mov	[edx].DCOUNT,0
	mov	[edx].GTYPE,GATE_TYPE
	shr	eax,16
	mov	[edx].OFFSETH,ax
	;描述符的偏移地址其实就是上面说到的那个retn指令地址,当call 这个门的时候
	;只从堆栈弹出EIP地址,所以CS寄存器没被覆盖,所以还是ring0权限

	add	edx,8
     assume edx:ptr DESCRIPTOR
	mov	[edx].LIMITL,0FFFFH	;创建自己的代码段描述符
	mov	[edx].BASEL,0
	mov	[edx].BASEM,0
	mov	[edx].ATTRIBUTES,CODE_TYPE
	mov	[edx].BASEH,0
  _ToEnd:
	popad
	popfd
	mov	eax,0C0000182h
	ret	8 
end DriverEntry
;名称:LoadMyKmd.asm

;功能:安装驱动程序“MyKmd.sys”使用。

;说明:必须生成“MyKmd.sys”之后才能正确运行。

;编译方式——见程序尾部


.data
	szError		db	'装载驱动失败',0
	szOK1		db	'驱动安装成功',0
	szOK		db	'OH YEAH.~~!',0
	szMyWdm		db	'MyKmd.sys',0
	szMyWdnName	db	'MyKmd',0
	szBuffer	db	MAX_PATH dup (0)

	hSCManager	dd	?
	hService	dd	?

.code
 start:
	invoke	OpenSCManager,NULL,NULL,SC_MANAGER_CREATE_SERVICE
	.if !eax
		invoke	MessageBox,0,addr szError,0,MB_ICONERROR or MB_OK
		jmp _Err
	.endif
	mov hSCManager,eax
	push ecx
	invoke  GetFullPathName,addr szMyWdm,sizeof szBuffer,addr szBuffer,esp
	pop ecx
	invoke  CreateService,hSCManager,addr szMyWdnName,addr szMyWdm, \
			SERVICE_START or DELETE,SERVICE_KERNEL_DRIVER, \
			SERVICE_DEMAND_START,SERVICE_ERROR_IGNORE, \
			addr szBuffer,0,0,0,0,0
	.if !eax
		invoke  MessageBox,0,addr szError,0,MB_ICONERROR
		jmp _Err
	.endif
	mov hService,eax
	invoke  StartService, hService, 0, NULL
	invoke  DeleteService, hService
	invoke  CloseServiceHandle, hService
	invoke  CloseServiceHandle, hSCManager
	invoke  MessageBox,0,addr szOK1,addr szOK,0
 _Err:
	invoke  ExitProcess,0
	end start

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (21)
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
2
支持,呼呼什么时候才出完,整理成电子书?
2009-11-15 10:52
0
雪    币: 112
活跃值: (48)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
3
我都不知道会出到是么时候,呼呼
2009-11-15 10:55
0
雪    币: 232
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
可以整理个专题了..呵呵
2009-11-15 11:12
0
雪    币: 112
活跃值: (48)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
5
这个不是核做专题,,就是想起来 时候瞎写一篇,,呼呼,,也没有多少人爱看这样的东西
2009-11-15 20:53
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哈哈 顶一下
2009-11-15 21:01
0
雪    币: 227
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我倒是不觉得,只是很多人想看但是又找不到。
我就是其中的一个了。
希望能看到更多。
2009-11-15 22:04
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼主又来了,顶~ zapline帮了什么忙?不会是倒忙吧?嘿嘿
2009-11-15 22:21
0
雪    币: 112
活跃值: (48)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
9
那我尽量努力吧
2009-11-16 08:40
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
10
不错 支持下
2009-11-16 12:38
0
雪    币: 1259
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
stu
11
感谢楼主。
6个字。
2009-11-17 11:35
0
雪    币: 270
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
12
charme的asm功力太强了,看了半天,最后还是好读书不求甚解吧
2009-11-17 17:10
0
雪    币: 420
活跃值: (77)
能力值: ( LV13,RANK:500 )
在线值:
发帖
回帖
粉丝
13
小狼。。。
2009-11-17 17:45
0
雪    币: 202
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
MARK .哎。学学。哎。~都是驱动的了。
2009-11-18 21:23
0
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
好文章! 学习  谢谢楼主
2009-11-18 21:55
0
雪    币: 60
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
不错,很有体会,学习...
2009-11-19 12:46
0
雪    币: 166
活跃值: (84)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
17
帮小弟顶一下。
加油!
2009-11-27 13:55
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
18
support
2009-11-27 14:16
0
雪    币: 1753
活跃值: (885)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
19
KMD写的驱动~~~真是高手`~
偶工作还是用C写设备驱动~`
2009-12-5 16:06
0
雪    币: 112
活跃值: (48)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
20
你雷到我了,,呼呼,,你这个职位很特别啊,,密码学 见习 数学 理论  这么多名词,,很特别啊,,呼呼,,有意思
2009-12-5 16:51
0
雪    币: 247
活跃值: (141)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
标记学习了啊!
2010-8-20 23:17
0
雪    币: 991
活跃值: (195)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
http://bbs.pediy.com/showthread.php?t=59005
2010-11-13 12:37
0
游客
登录 | 注册 方可回帖
返回
//