freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Windows_xp_win7-驱动编译与双虚拟机调试环境搭建
2024-12-29 12:43:10
所属地 北京

一.简述

  • 因最近需要编写一些xp与win7上的驱动程序,但是网上搜索环境配置要不就很老旧,要不很繁琐,最好还是能双虚拟机调试,在网上没有找到能完全满足需求的,就整合网上的一些资源编写此文档。

  • 主要内容为使用vmware 双win7虚拟机调试、win7安装vs2015、使用驱动模板编译win7与xp驱动

二.环境介绍

应用名称版本备注
windows7 x64 调试机windows7 x64 sp1cn_windows_7_professional_with_sp1_x64_dvd_u_677031.iso
windows7 x64 被调试机windows7 x64 sp1cn_windows_7_professional_with_sp1_x64_dvd_u_677031.iso
WDK 76007600.16385.1https://www.microsoft.com/en-us/download/details.aspx?id=11800
VS 2015Visual Studio 2015Community
ie 11ie 11https://support.microsoft.com/zh-cn/windows/%E4%B8%8B%E8%BD%BD-internet-explorer-11-%E8%84%B1%E6%9C%BA%E5%AE%89%E8%A3%85%E7%A8%8B%E5%BA%8F-99d492a1-3a62-077b-c476-cf028aff9a7f
wingdb6.12调试工具
vmware workstationvmware workstation 17 pro
SRVINSTW.EXESRVINSTW.EXE安装驱动程序
dbgview64.exedbgview64.exe查看驱动打印
vs2013驱动开发模板驱动配置模板https://bbs.kanxue.com/thread-188471.htm
EverythingEverything-1.4.1.935.x86-Setup
64Signer64Signer签名工具
  • win7 虚拟机不能安装vm tools

    • https://catalog.update.microsoft.com/Search.aspx?q=kb4474419

  • vs2015支持模板导出,也可以选择制作自己的模板

三.安装测试wdk7600

3.1.安装wdk7600

  • 下载WDK 7600并解压执行

image

  • 勾选全部选项并点击ok

image

  • 选择路径,我这直接点击ok

image

  • 点击Finish完成安装

image

3.2.使用wdk7600编译驱动程序

3.2.1.驱动代码

  • 创建first目录,在此目录中创建三个文件

  • first.c

#include <ntddk.h>

VOID DriverUnload(PDRIVER_OBJECT driver){
		     DbgPrint("first:Our driver is unloading\r\n");
		 }
		 NTSTATUS DriverEntry(PDRIVER_OBJECT driver,PUNICODE_STRING reg_path){
		
		     DbgPrint("first:Our hello my salary\r\n");
		
		     driver->DriverUnload=DriverUnload;
		     return STATUS_SUCCESS;
}
  • makefile

!IF 0
Module Name:
makefile .
Notes:
DO NOT EDIT THIS FILE!!!
!ENDIF
!INCLUDE $(NTMAKEENV)\makefile.def
  • SOURCES

TARGETNAME=first
TARGETTYPE=DRIVER
SOURCES=first.c
  • TARGETNAME表示名字,编译出来之后模块的名字first.sys

  • SOURCES表示要编译的.c文件

    • 不要加入.h文件,.h是被包含在.c文件中编译的

3.2.2.编译

  • 开始菜单中,选择 所有程序 ,然后选择Windows Driver Kits->WDK版本->Build Environments->Windows 7->x64 Checked Build Environment

image

  • 进入 first 目录执行 build 命令

image

  • 编译结束, first.sys 出现在C:\Users\test\Desktop\first\objchk_win7_amd64\amd64目录下

image

3.3.测试驱动程序

3.3.1.安装驱动程序

  • 在一台新安装的win7 x64 sp1虚拟机上执行,在开机时按下f8,禁用驱动签名,将生成的first.sys拷贝到此虚拟机

image

  • 使用管理员权限打开SRVINSTW.EXE安装服务点击下一步

image

  • 本地机器点击下一步

image

  • 服务名称填写first然后点击下一步

image

  • 根据first.sys所在路径填写,文件位置

image

  • 选择设备驱动,点击下一步

image

  • 默认点击下一步

image

  • 选择手动,点击下一步

image

  • 点击完成,弹出服务成功安装

image

3.3.2.执行驱动程序

  • 管理器权限执行dbgview64.exe,在菜单栏点击capture,然后全部勾选

image

  • 管理员启动cmd,执行net start first,可以看到dbgview64.exe,有打印输出与,上述驱动代码相同

image

net start first \\启动驱动
net stop first	\\停止驱动
sc delete first \\卸载驱动
  • 如上面所示wdk7600安装成功

四.安装vs2015

4.1.安装IE11

  • 因为vs2015要求安装ie 10以上版本,这里安装ie11

image

  • 可能有下列情况,先尝试直接安装,直接安装不成功或者看报错信息在选择执行情况1或情况2

  • 情况1:有可能安装IE11需要补丁,补丁链接如下

32位

http://www.microsoft.com/zh-cn/download/internet-explorer.aspx

64位

http://www.microsoft.com/zh-cn/download/details.aspx?id=45154
  • 情况2安装证书:

  • 在win10系统上Windows键+R 弹出运行对话框,输入certmgr.msc,打开Windows的证书管理器

  • 导出如下证书安装在win7系统上

1.Microsoft Root Certificate Authority 2010;

2.Microsoft Root Certificate Authority 2011;

3.COMODO RSA Certification Authority;

image

  • 将上面三个证书拷贝到win7系统然后安装上去

image

4.2.安装vs2015

  • 运行vs2015安装程序,这里我选择自定义

image

  • 只选择c++然后点击下一步

image

  • 点击安装

image

  • 等待安装成功即可

image

image

五.配置vs2015编译驱动

  • 这里是使用模板的方式进行的配置编译驱动,这里直接使用网上大佬放出来的模板,也可以自己进行配置然后导出是一样的,但是会很耗费时间与精力

5.1.配置环境变量

  • 新建WDKPATH,并添加wdk路径

image

5.2.设置模板

  • 安装Everything,搜索ProjectTemplates目录

image

  • 进入ProjectTemplates,将下载好的模板拷贝过去,然后重启系统

image

5.3.编译驱动程序

  • 打开vs2015创建新项目,点击c++,可以发现出现了Windows Driver1

  • 创建Windows Driver1项目,名称填写first2,将一开始编写的驱动代码拷贝过去

image

  • 如下图所示使用此项目可以编译多种系统的驱动,Checked为调试,free为re版

image

  • 并且可以选择x64x86,需要注意无法编译xp下的x64的驱动程序

  • 需要注意这是使用vs2013的模板,需要将项目属性改为v140

image

  • 生成->重新生成解决方案

image

5.4.更改模板

  • 1.更改上面的平台工具集

  • 2.在属性面板,可以看到全程序优化(无全程序优化)

image

  • 3.更改到re版,可以看到使用链接时间代码生成

image

  • 在属性页,点击链接器->优化->使用快速链接时间代码生成 (/LTCG:incremental),这样编译会报错

image

  • 需要改成使用链接时间代码生成 (/LTCG),即可完成编译

image

  • 自己也可以制作成模板,就不需要每次编写驱动,进行配置vs

六.双虚拟机调试驱动

  • 本文中的调试机与被调试机都为win7 x64 sp1

6.1.配置调试机

  • 该端是服务器 ,另一端是虚拟机

image

  • 打开windbg左上角的 File然后点击Kernel Debug 然后再点击 COM ,设置如下图所示 ,然后点击确定

  • 安装的wdk7600中就带有windbg

image

  • 选择com,然后点击确认,设置如下图所示

image

  • 点击确定后的画面如下图所示,然后重启Win 7 在 Win 7 虚拟机那边选择启用调试程序

image

6.2.配置被调试机

  • 虚拟机的串行端口设置如下(该端是客户端 ,另一端是虚拟机 ),命名管道设置为 \.\pipe\com_1

image

  • 以管理员身份运行cmd执行bcdedit,一般只有一个标识为{current}的启动加载器是当前的启动配置

image

  • 使用如下命令建立一个新的启动项,并且使用bcdedit检查是否copy成功

bcdedit /copy {current} /d "Windwos7"
  • 设置新的启动项

bcdedit /debug ON
bcdedit /bootdebug ON
  • 查看当前的调试配置bcdedit /dbgsettings,一般会显示出使用的第一个串口波特率为115200bps

image

  • 选择菜单的超时,我设置为15秒: bcdedit /timeout 15

  • 重新启动,当需要调试时就用调试模式进入

6.3.驱动调试准备

6.3.1.断点

  • 32位支持内联asm汇编

  • 64位利用在Source文件中直接添加asm文件,直接在asm文件中写汇编代码,然后将asm文件编译为OBJ文件。然后就可以在c++文件中声明asm文件中的函数后直接使用asm文件中用汇编写的函数

  • 64位也可使用 DbgBreakPoint();

#include <ntddk.h>
VOID DriverUnload(PDRIVER_OBJECT driver) {
	DbgPrint("first:Our driver is unloading\r\n");
}
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) {
	DbgBreakPoint();
	DbgPrint("first:Our hello my salary\r\n");

	driver->DriverUnload = DriverUnload;
	return STATUS_SUCCESS;
}
  • 本文使用此方法

6.3.2.签名

  • win7 x64安装驱动需要签名,这里使用64Signer

image

6.3.3.调试符号下载与配置

  • 使用windbg自动下载符号很慢,所以使用windbg目录中存在 symchk.exe 程序,使用如下命令可进行下载

symchk.exe /r c:\windows\system32\ /s SRV*C:\Users\test\Desktop\symblos\*http://msdl.microsoft.com/download/symbols 

- /r c:\windows\system32\ 下载system32下的符号
- SRV*C:\Users\test\Desktop\symblos\ 下载符号的保存路径
- http://msdl.microsoft.com/download/symbols 微软的符号服务器
  • 加载被调试驱动的符号

  • Windbg->file->symbol file path,根据自己的路径填写,本文填写示例如下:

C:\Users\test\Desktop\code\test\first6\x64\Checked_win7;srv*C:\Users\test\Desktop\symblos*http://msdl.microsoft.com/download/symbols
  • 第一个路径为编译驱动的驱动的符号路径,使用分割

6.4.驱动调试

  • 调试机-打开windbg左上角的 File然后点击Kernel Debug 然后再点击 COM ,设置如下图所示 ,然后点击确定

image

  • 被调试机启动选择启用调试程序

image

  • 被调试机启动驱动

image

通过百度网盘分享的文件:windows_xp_win7驱动编译调试环境搭建.zip
链接:https://pan.baidu.com/s/1em90D0FNXebX007hk6pwuQ?pwd=9s2u
提取码:9s2u

七.参考链接

  • https://www.cnblogs.com/revercc/p/14609685.html

  • https://bbs.kanxue.com/thread-188471.htm

  • https://blog.csdn.net/fonx/article/details/79720490?spm=1001.2101.3001.6650.13&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-13-79720490-blog-104530361.235%5Ev43%5Epc_blog_bottom_relevance_base8&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-13-79720490-blog-104530361.235%5Ev43%5Epc_blog_bottom_relevance_base8&utm_relevant_index=20

  • https://blog.csdn.net/jmh1996/article/details/88382133

  • https://cloud.tencent.com/developer/article/1621329?sid_for_share=99125_3

  • https://bbs.kanxue.com/thread-261326.htm

  • https://bbs.kanxue.com/thread-251052.htm

  • https://blog.csdn.net/qq_42931917/article/details/108265848

# 系统安全 # 网络安全技术
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
  • 0 文章数
  • 0 关注者
文章目录