1- 环境配置

打开隐藏文件

打开XP虚拟机的隐藏文件可以看到boot.ini文件
image.png

image.png

配置系统引导

Windows7_x86
以管理员身份运行cmd 去配置msconfig
由于GUI界面工具的限制,所以我们使用控制台命令去操作
image.png
bcdedit 在NT60系列操作系统(Windows 8/7/Vista/2008)中的一个命令行工具
使用bcdedit修改windows7_32系统的启动菜单
使用注册表工具是修改不了该配置的。

操作步骤

我们需要做的就是系统配置里,去创建引导,具体步骤如下:
image.png
使用bcdedit /? 查看相关命令操作
image.png
使用该命令bcdedit /copy {current} /d DebugEntry,将当前的引导复制粘贴一份
image.png
随即生成id a3565eff-40d7-11ed-a882-ce94402d623c
image.png
并且在GUI界面多出一份拷贝出来的引导
image.png
使用bcdedit /displayorder {a3565eff-40d7-11ed-a882-ce94402d623c} /addlast
将该引导添加到列表尾部
image.png

使用该命令配置虚拟机与物理交互的频率(波特率)bcdedit /dbgsettings SERIAL DEBUGPORT:1 BAUDRATE:115200
image.png
使用该命令设置boot断点,当boot加载的时候,就断下来bcdedit /bootdebug {a3565eff-40d7-11ed-a882-ce94402d623c} ON
image.png
使用该命令配置操作系统断点bcdedit /debug {a3565eff-40d7-11ed-a882-ce94402d623c} ON
image.png
使用该命令配置选择引导超时时间为30秒
image.png

配置完后在电脑中重启电脑
image.png

虚拟机串行端口配置

然后关机配置虚拟机的相关操作
image.png
选择添加串行端口
image.png
相关配置如图所示:
image.png

windbg的配置

前提是已经安装了WDK

配置windbgx86.exe
image.png
image.png
"C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\windbg.exe" -y SRV*E:\symbol*[http://msdl.microsoft.com/download/symbols](http://msdl.microsoft.com/download/symbols) -b -k com:port=//./pipe/com_1,baud=115200,pipe
软件启动路径:"C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\windbg.exe"
符号加载路径:-y SRV*E:\symbol*[http://msdl.microsoft.com/download/symbols](http://msdl.microsoft.com/download/symbols)
配置串行端口:-b -k com:port=//./pipe/com_1,baud=115200,pipe
根据自己的情况去修改。

使用lm查看加载符号路径或者加载情况
使用.reload根据当前需要去加载符号

操作系统下载网址:msdn,我告诉你
环境准备:
在Windows7X86虚拟机里下载VS2008
image.png
VS2008 下载网址:
image.png

WDK的安装

VS2019下载SDK和WDK
image.png
查看本机系统版本号
image.png
下载WDK的对应版本
image.png
WDK与SDK的版本要一致
image.png

简单例子验证驱动是否正确安装

测试代码:

//相当于普通程序的 windows.h
#include <ntddk.h>

//卸载函数
void DriverUnload(PDRIVER_OBJECT object) {
	//打印一句话,方便观察
	DbgPrint("hello world: driver is unloading...");
}

//主函数,相当于main
//driver里有些信息,就是关于本驱动的
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) {
	//驱动使用DbgPrint(),普通程序用printf(),你懂我意思
	DbgPrint("hello world");
	//你可以认为我们赋值给了一个回调函数指针
	//恰当的时机(在卸载这个驱动的时候),就会调用这个函数指针
	driver->DriverUnload = DriverUnload;
	//就是return 0而已,只是好看点
	return STATUS_SUCCESS;
}

错误1297设备驱动程序不安装在任何设备上,如果需要,请使用基本驱动程序。
image.png
把该文件删掉,因为我们没有做硬件驱动的处理。
image.png

警告处理

方法一:

重新编译会发现 错误,因为警告等级太强了。
image.png

使用宏方法告诉编译器未引用的形参
UNREFERENCED_PARAMETER

//相当于普通程序的 windows.h
#include <ntddk.h>

//卸载函数
void DriverUnload(PDRIVER_OBJECT object) {

	UNREFERENCED_PARAMETER(object);
	//打印一句话,方便观察
	DbgPrint("hello world: driver is unloading...");
}

//主函数,相当于main
//driver 里有些信息,就是关于本驱动的
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) {
	
	UNREFERENCED_PARAMETER(driver);
	UNREFERENCED_PARAMETER(reg_path);
	//驱动使用DbgPrint(),普通程序用printf(),你懂我意思
	DbgPrint("hello world");
	//你可以认为我们赋值给了一个回调函数指针
	//恰当的时机(在卸载这个驱动的时候),就会调用这个函数指针
	driver->DriverUnload = DriverUnload;
	//就是return 0而已,只是好看点
	return STATUS_SUCCESS;
}

编译成功,无报错
image.png

方法二:

修改警告等级

在“C/C++——常规”中修改警告等级为“3”;警告视为错误设为“否”,如图
image.png

设置警告模式

在“Driver Signing——General”中修改“Sign Mode”为“Off”,如图
image.png

虚拟机驱动测试

配置完后重新编译放进虚拟机里加载运行
image.png
直接蓝屏
image.png
image.png
原因是缺少文件,而造成文件缺失的原因是编写代码的时候没有配置值好。
image.png
然后在VS2019进行相关配置
image.png

配置完后重新编译放进虚拟机里加载运行,便看到驱动加载成功
image.png
使用Degview查看输出消息
image.png

附录:

image.png
ThreadSpy-master.zip
注意:

  1. 该文件驱动是不能跑虚拟机的,是没有效果的。

开启监控的时候,可以监控三环进0环的线程
image.png
可以拿到线程的EIP,并且可以修改,造成劫持
直接做注入 远程call。

ThreadSpy
https://github.com/SpadeXiu/ThreadSpy
PT调试
https://github.com/intelpt/WindowsIntelPT

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑桃鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值