windows内核安全编程——内核上机指导
2012-12-20 01:22
393 查看
1、WDK下载地址:windows driver kit
https://connect.microsoft.com/default.aspx
2、第一个列子:first.c
3、编译工程:
不只需要first.c这样的源码文件,还需要makefile和sources两个文件。
makefile 此文件不需要改变,内容:
sources文件,关联要编译的文件:
然后打开编译环境,需要编译哪个系统的驱动,就选择哪个系统进行编译
在打开的控制台中,进入代码所在的目录,输入build命令。如果有错误会提示,如果没有问题,就编译完成。
文件下会生成\objchk_wxp_x86\i386\first.sys的文件。
4、安装驱动:(卸载也用此软件)
建议,不要在本机进行安装调试,应该放置到虚拟机上。
下载并安装srvinstw.exe,
在srvinstw.exe中,安装驱动步骤:
选择“安装服务”选项->本地计算机->输入服务名称(随意起,可以不与sys相同,但不能与现有服务冲突)->选择SYS文件->选择“设备驱动”选项->选择“手工”选项。
5、启动/停止驱动:
控制台中命令
启动服务:net start 服务名
停止服务:net stop 服务名
6、查看驱动输出信息:
程序中可以使用DbgPrint来打印信息,不可以采用对话框的方式,因为系统底层是无法弹出的。
使用软件DebugView来查看内核程序的输出情况,软件一定要勾选 Capture Kernal 才能看见内核的输出。
7、调试内核模块
下载并安装WinDbg,支持双机调试,即将驱动安装到另一个机器上,在本机进行调试。
主要推荐在虚拟机中运行内核程序,在本机进行调试,这样可以避免本机的蓝屏等问题。
8、设置被调试的机器
XP:
在boot.ini中添加最后一行,内容如下:
其中debugport是关键,一定要和虚拟机上的串口名称设置一致。
重启XP时,就会有debug模式的XP,进入被调试的环境。
vista、win7:
控制台中,
9、虚拟机设置:
新建一个命名串口:Serial Port->Output to named pipe
注意,名称要与boot.ini中的一致。
启动虚拟机,启动程序即可。
10、启动WinDbg
启动时要设置参数:
windbg.exe -b -k com:port=\\.\pipe\com_1,baud=115200,pipe
注意参数值和上面设置的一致。
11、设置WinDbg
启动windbg时,会使虚拟机中断,在符号"kd>"后输入“g”继续。
在WinDbg中设置内核符号表来翻译函数名:
在 菜单 symbol File Path 中 设置 :
12、设置INT中断。
由于驱动加载时,设置断点不方便,所以可以在程序中设置INT 3断点,来帮助产生中断,这样在调试的时候,就会自动中断了。
但是INT中断如果不是在调试状态下,会直接导致蓝屏,所以通常加载宏条件。
13、windbg的操作
由于此部分书中仅仅简单的介绍,所以这个部分在后期会填补链接。
https://connect.microsoft.com/default.aspx
2、第一个列子:first.c
#include <ntddk.h> //卸载函数 VOID DriverUnload(PDRIVER_OBJECT driver) { DbgPrint("first: Our driver is unloading...\r\n"); } //DriverEntry是入口函数 NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) { #if DBG _asm int 3 #endif DbgPrint("first: Hello World!\r\n"); //设置卸载函数 driver->DriverUnload = DriverUnload; return STATUS_SUCCESS; }
3、编译工程:
不只需要first.c这样的源码文件,还需要makefile和sources两个文件。
makefile 此文件不需要改变,内容:
!IF 0 Copyright (C) Microsoft Corporation, 1999 - 2002 Module Name: makefile. Notes: DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source file to this component. This file merely indirects to the real make file that is shared by all the components of Windows NT (DDK) !ENDIF ! INCLUDE $(NTMAKEENV)\makefile.def
sources文件,关联要编译的文件:
TARGETNAME=first //生成模块的名称,此文件为first.sys TARGETTYPE=DRIVER //生成的文件类型,比如DRIVER生成.sys,DYNLINK生成.dll TARGETPATH=obj //生成bin文件的目录 SOURCES= first.c //文件列表,多个用空格分隔,推荐用\换行,此处不写头文件,只有.c
然后打开编译环境,需要编译哪个系统的驱动,就选择哪个系统进行编译
在打开的控制台中,进入代码所在的目录,输入build命令。如果有错误会提示,如果没有问题,就编译完成。
文件下会生成\objchk_wxp_x86\i386\first.sys的文件。
4、安装驱动:(卸载也用此软件)
建议,不要在本机进行安装调试,应该放置到虚拟机上。
下载并安装srvinstw.exe,
在srvinstw.exe中,安装驱动步骤:
选择“安装服务”选项->本地计算机->输入服务名称(随意起,可以不与sys相同,但不能与现有服务冲突)->选择SYS文件->选择“设备驱动”选项->选择“手工”选项。
5、启动/停止驱动:
控制台中命令
启动服务:net start 服务名
停止服务:net stop 服务名
6、查看驱动输出信息:
程序中可以使用DbgPrint来打印信息,不可以采用对话框的方式,因为系统底层是无法弹出的。
使用软件DebugView来查看内核程序的输出情况,软件一定要勾选 Capture Kernal 才能看见内核的输出。
7、调试内核模块
下载并安装WinDbg,支持双机调试,即将驱动安装到另一个机器上,在本机进行调试。
主要推荐在虚拟机中运行内核程序,在本机进行调试,这样可以避免本机的蓝屏等问题。
8、设置被调试的机器
XP:
在boot.ini中添加最后一行,内容如下:
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /debug /debugport=com_1 /baudrate=115200
其中debugport是关键,一定要和虚拟机上的串口名称设置一致。
重启XP时,就会有debug模式的XP,进入被调试的环境。
vista、win7:
控制台中,
bcdedit /enum OSLOADER bcdedit /copy {current} /d "Windows 7 Copy" bcdedit /debug on bcdedit /bootdebug on bcdedit /timeout 7
9、虚拟机设置:
新建一个命名串口:Serial Port->Output to named pipe
注意,名称要与boot.ini中的一致。
启动虚拟机,启动程序即可。
10、启动WinDbg
启动时要设置参数:
windbg.exe -b -k com:port=\\.\pipe\com_1,baud=115200,pipe
注意参数值和上面设置的一致。
11、设置WinDbg
启动windbg时,会使虚拟机中断,在符号"kd>"后输入“g”继续。
在WinDbg中设置内核符号表来翻译函数名:
在 菜单 symbol File Path 中 设置 :
srv*d:\symbols*http://msdl.microsoft.com/download/symbols;如果有原文件,可以在后面添加源文件路径,这样在调试时,就可以看见源文件了。
D:\MyProc\WDK\firstTest\objchk_wxp_x86\i386
12、设置INT中断。
由于驱动加载时,设置断点不方便,所以可以在程序中设置INT 3断点,来帮助产生中断,这样在调试的时候,就会自动中断了。
但是INT中断如果不是在调试状态下,会直接导致蓝屏,所以通常加载宏条件。
#if DBG _asm int 3 #endif
13、windbg的操作
由于此部分书中仅仅简单的介绍,所以这个部分在后期会填补链接。
相关文章推荐
- Windows内核安全编程基础知识(一)
- <寒江独钓>Windows内核安全编程__键盘过滤之内核级Hook(二)
- Windows内核安全编程:传统键盘过滤程序
- Windows内核安全编程__键盘过滤之内核级Hook(一)
- 寒江独钓-Windows内核安全编程总结
- 寒江独钓-Windows内核安全编程笔记-第4章代码
- 发生系统错误 1275.此驱动程序被阻止加载 寒江孤钓<<windows 内核安全编程>> 学习笔记
- <寒江独钓>Windows内核安全编程__具有还原功能的磁盘卷过滤驱动
- 删除自定义服务 寒江孤钓<<windows 内核安全编程>> 学习笔记
- WIN32内核安全 第一章 内核上机指导 笔记
- <寒江独钓>Windows内核安全编程__一个简单的Windows串口过滤驱动程序的开发
- 无法编译出.sys文件 寒江孤钓<<windows 内核安全编程>> 学习笔记
- Debuggee not connected 寒江孤钓<<windows 内核安全编程>> 学习笔记
- ERROR: Symbol file could not be found 寒江孤钓<<windows 内核安全编程>> 学习笔记
- 寒江独钓——Windows内核安全编程
- <寒江独钓>Windows内核安全编程__键盘过滤之内核级Hook(一)
- <寒江独钓>Windows内核安全编程__Ramdisk源码解读
- 寒江独钓-Windows内核安全编程笔记-第3章代码和笔记
- 指定的服务已标记为删除 寒江孤钓<<windows 内核安全编程>> 学习笔记