您的位置:首页 > 编程语言

windows内核安全编程——内核上机指导

2012-12-20 01:22 393 查看
1、WDK下载地址:windows driver kit
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的操作
由于此部分书中仅仅简单的介绍,所以这个部分在后期会填补链接。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: