首页
社区
课程
招聘
[原创]汇编写驱动——光速入门
发表于: 2011-3-18 16:51 20323

[原创]汇编写驱动——光速入门

2011-3-18 16:51
20323
用汇编写windows驱动非常简单,只要有汇编基础和用C写驱动的能力即可。有了这两样基础,我们距离用汇编写驱动,只剩下一层窗户纸,一戳就破。

一、准备软件:Radasm   
    为了快速入门,好的IDE是降低入门难度的有效手段。Radasm是我最为钟爱的一款软件,第一次使用过它,我就果断地将masm32删除了。
   RadASM是一款著名的WIN32汇编编辑器,精通win32汇编的人对它应该不会陌生。支持MASM、TASM等多种汇编编译器,提供优秀的IDE,自带一个资源编辑器和一个调试器(OD)。拥有较强的工程管理功能,加之众多插件的支持,使得它用汇编语言编写Windows软件变得得心应手。

二、认识KmdKit   
   之所以能用Radasm编写驱动,就是因为它整合了KmdKit,它是由俄国人开发的,KmdKit的全称是Kernel Mode Driver development Kit for assembly language programmers,即内核模式驱动程序汇编开发包,KmdKit中包括了用宏汇编编译器开发驱动程序需要用到的所有东西。你也可以从http://www.wasm.ru/或者http://www.freewebs.com/four-f/下载到最新版本的KmdKit。

三、汇编写驱动的基本框架

.386
.model flat, stdcall
option casemap:none

.data

.code
;;;DriverEntry这个入口函数还是老样子
DriverEntry proc pDriverObject:PDRIVER_OBJECT,pusRegistryPath:PUNICODE_STRING

        ret

DriverEntry endp

end DriverEntry  ;;;这里和用户模式有点不同

四、可供使用的系统调用库   
    KmdKit开发包提供的inc和lib库文件都分别保存在“w2k”“wnet”和“wxp”三个的文件夹里,其大部分内容都在w2K里。对应的,Radasm也在masm32文件夹中的Include和Lib文件夹里,也分别保存了这三个文件夹。
   
    另外,有一个特别值得注意的问题,当Radasm引用以上三个文件夹里lib文件时,要使用绝对路径,为什么必须要这样我也不清楚,如果有明白这个问题的朋友,也请你告诉我。
五、示例
.386
.model flat, stdcall
option casemap:none

include w2k\ntddk.inc
include w2k\ntoskrnl.inc
includelib D:\RadASM\masm32\lib\w2k\ntoskrnl.lib ;;请填写自己的绝对路径
.data
Hello_Str db 'Hello,world',0
Unload_Str db "Driver has been unloaded",0
.code

DriverEntry proc pDriverObject:PDRIVER_OBJECT,pusRegistryPath:PUNICODE_STRING
    push offset Hello_Str
    call DbgPrint
    add  esp,4
   
    mov  eax,pDriverObject
    mov [eax+34H],offset DriverUnloadProc ;;xp里pDriverObject.DriverUnload   
    mov eax,STATUS_SUCCESS
    ret

DriverEntry endp

DriverUnloadProc proc  DriverObject:PDRIVER_OBJECT
    push offset Unload_Str
    call DbgPrint
    add  esp,4
    ret
DriverUnloadProc endp
end DriverEntry

[课程]Linux pwn 探索篇!

收藏
免费 7
支持
分享
最新回复 (14)
雪    币: 120
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
跟着你学习。。。谢谢分享。
2011-3-18 16:54
0
雪    币: 777
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
关注。 我还在学8086汇编额 。
2011-3-18 17:23
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
4
pop [eax+34H] ;;xp里pDriverObject.DriverUnload   
+0x034 DriverUnload     : Ptr32     void
pop 这个地址是什么意思,能说下不
分析了下编写的驱动一般正常为mov     dword ptr [eax+34h], offset DriverUnload
2011-3-18 19:42
0
雪    币: 1233
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
有关必须使用绝对地址的问题,应该是没有配置环境变量的缘故。
以下是批处理设置环境变量:
-------------------------------------------------------------------------------------
set include=d:\masm32\include
set lib=d:\masm32\lib
set path=d:\masm32\bin;%path%
-------------------------------------------------------------------------------------
2011-3-18 19:54
0
雪    币: 27
活跃值: (90)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
6
不错,学习 :)
2011-3-18 20:15
0
雪    币: 431
活跃值: (259)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
7
谢谢,你的帮助。
2011-3-18 20:19
0
雪    币: 431
活跃值: (259)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=房有亮;937560]pop [eax+34H] ;;xp里pDriverObject.DriverUnload   
+0x034 DriverUnload     : Ptr32     void
pop 这个地址是什么意思,能说下不
分析了下编写的驱动一般正常为mov     dword ptr [eax+3...[/QUOTE]

惭愧,你说的对,这个确实是我代码书写习惯不好,我已经改正,谢谢
2011-3-18 20:21
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
9
一些收集的汇编驱动文档~希望有用
罗云彬翻译的前7章(貌似从aogo站上收集回来的)
附件中的zip文件。

第8章共享section通讯
bbs.pediy.com/upload/2005/10/files/kmdtut_8.rar

KMDTut第9章共享内存,
bbs.pediy.com/upload/2005/10/files/kmdtut_09.rar

KMDTut第10章注册表:
bbs.pediy.com/upload/2005/10/files/kmdtut_10.rar
上传的附件:
2011-3-18 23:50
0
雪    币: 431
活跃值: (259)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
10
感谢啊,我收着了。哎,现在汇编驱动的资料太少了。
2011-3-19 08:53
0
雪    币: 431
活跃值: (259)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
11
试了一下,貌似不好使
2011-3-22 21:50
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习了……谢谢
2011-3-23 08:13
0
雪    币: 199
活跃值: (17)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
13
用汇编写东西,总有一种不同其它编程语言的成就感
2011-3-23 09:22
0
雪    币: 218
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
没有别的意思,诚心想问一下为什么驱动不用c写, 用汇编搞得这么纠结图啥?
2011-3-25 12:27
0
雪    币: 431
活跃值: (259)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
15
汇编的优势在于,比C语言更适合做一些邪恶的事情,你懂的。
2011-3-25 12:32
0
游客
登录 | 注册 方可回帖
返回
//