您的位置:首页 > 其它

WIN32内核安全 第一章 内核上机指导 笔记

2015-07-31 15:39 267 查看
编写内核程序的人,从某种程度讲是孤独的。——谭文

本书将介绍:防毒软件、虚拟磁盘、硬盘还原、硬盘加密、文件系统保护、文件透明加密、防火墙、密码输入保护等win内核模块具体实现方法。

一、工具及其获取

1.WDK:WINDOWS DRIVER KIT  微软官网有下载 //内含DOCUMENTATION,十分有用,可查各种函数使用方法

2.srvinstw.exe

3.WinDbg

4.DebugView

二、开始HELLO WORLD

1.创建一个后缀名为.c的文件

///
///@file first.c
///@author
///date

#include <ntddk.h>
/*
提供一个unload函数以便程序可以动态卸载,方便调试
*/
VOID DriverUnload(PDRIVER_OBJECT driver)
{
DbgPrint("hey,the driver is unloading");
}

//Driver Entry
NTSTATUS DriverEntry(PDRIVER_OBJECT driver,PUNICODE_STRING reg_path)
{  #if DBG _asm int 3 #endif
DbgPrint("first:hello~my salary ");

//unload
driver->DriverUnload = DriverUnload;
return STATUS_SUCCESS;
}


DriverEntry: 每个内核模块的入口,加载该模块时会被系统进程System调用一次。

DriverUnload:一个函数指针,没有它,一个内核模块一旦被加载,则无法卸载。

2.建立新目录并将源码保存在该目录下。

3.添加两个文件:makefile和SOURCES

makefile:

根据它自己的说明, 这仅仅是个指向被所有winNT共享的那个真正的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
TARGETTYPE=DRIVER
SOURCES=first.c

TARGETNAME:编译后的.sys文件的名字
SOURCES:要编译的.c文件

4.使用Launch Windows XP x86 Checked Build Enviroment编译

① 在该控制台下进入刚才创建的目录。

②输入build指令,生成.sys文件

5.安装与运行

①使用srvinstw.exe装载:安装服务->本地计算机->为服务起名->手工输入.sys文件路径->设备驱动->直接下一步->手动

②运行与查看输出信息:使用DebugView。记得勾选Capture选项下的Capture Kernel

③命令行下使用net start xxx命令和net stop xxx命令即可。xxx即是在①中指定的服务名。

三、调试内核模块

1. 使用WinDbg

双机模式(调试机和被调试机结合)。微软出品。

2.设置被调试机(虚拟机-WINXP)

将系统盘下boot.ini进行修改。

修改前:<span style="white-space:pre"> </span>[boot loader]
<span style="white-space:pre"> </span>timeout=30
<span style="white-space:pre"> </span>default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
<span style="white-space:pre"> </span>[operating systems]
<span style="white-space:pre"> </span>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

修改后:
<span style="white-space:pre"> </span>[boot loader]
<span style="white-space:pre"> </span>timeout=30
<span style="white-space:pre"> </span>default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
<span style="white-space:pre"> </span>[operating systems]
<span style="white-space:pre"> </span>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
<span style="white-space:pre"> </span>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=115200
修改后保存。

3.设置调试机与被调试机的链接部分(VMware的管道虚拟串口)

①编辑虚拟机设置->添加设备向导->串口->下一步->Output to named pipe 使用命名管道下会有三个选项:第一个是\\.\pipe\com_1 第二个是 this end is the server 第三个是
the other end is an application

4.设置调试机上的Windbg

在windbg启动时加入以下参数:windbg.exe -b -k com:port=\\.\pipe\com_1,baud=115200,pipe

一个方便的方法是,设置一个快捷方式,在‘目标’中的应用程序名后添加如上参数。 参数应该放在双引号之外。

5.设置win内核符号表

在windbg的Symbol File Path中增加如下设置:

srv*c:\symbols*http://msdl.microsoft.com/download/symbols

这样windbg会自动用http协议下载符号表。用分号与其他路径隔开。

另外,还需要增加我们正在调试的程序目录下的\objchk_wxp_x86\i386这样一个路径,还要设置源代码路径。

6.开始调试

我们的代码中加入了int 3这样的断点,好让程序可以有些东西来调试。

使用DBG宏,可以让程序只在调试模式下触发断点,避免非调试模式下断点蓝屏。

kd>后输入g 回车,能使中断的程序继续运行。

DEBUG->break可以使当前被调试的系统终端下来。这是设置断点的前提条件。

F10:单步前进(Call时不进入,只是继续函数返回后的执行) F11单步跟进(CALL时会进入函数)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: