windows系统内核调试 环境搭建(保姆级)

1 环境搭建  vs2019+wdk10   

我自己搭建了两套环境(window7和xp系统)

vs2019下载官网社区版即可 免费的无需破解
wdk10   注意两者要下载对应的版本 ,我这里下载的都是最新的版本  两者可以无缝衔接

VS2019 安装插件选择C++即可

一路下一步即可  安装完成后再安装 WDK  安装路径好像不能改  我的直接安装到了 D:\Windows Kits
安装完成后  会有驱动安装的提示 ,一路next安装即可   一定要安装 !!!  我之前一直都没安装上  所以VS2019没有  对于的驱动开发模块
登录VS2019时 选择创建新项目可看到 有了驱动开发模块。

WDK安装完成后,在开始菜单中找到windbg程序对应的位置,右击发送快捷方式到桌面

配置启动参数

"D:\Windows Kits\10\Debuggers\x64\windbg.exe" -b -k com:pipe,port=\\.\pipe\com_2,resets=0

操作系统环境遍历设置

_NT_SYMBOL_PATH         SRV*D:\Myself_Software\Windows_soft\symbols* http://msdl.microsoft.com/download/symbols    一定要注意的空格呀!

 

2 虚拟机操作系统安装  xp与win7 64位  暂时没安装win10

往上有人说  wdk版本太新不能调试xp系统,经自己测试可以调试 ,网上说的都不靠谱啊  一定要自己尝试。
系统安装地址:msdn官网

XP系统如下


注意xp系统不要下载如下版本  不晓得为什么系统文件后缀不是iso而是img

对于window7系统  也是下载如下的版本,原因  其他版本都存在各种各样的问题,踩了太多坑了,不多BB了

操作系统的大小超过4G后  VMware会不能识别到操作系统  所以我们下载的都是纯净版的。

VMware安装操作系统略  自行百度。

操作系统的网路设置可参考:https://blog.csdn.net/qq_33523925/article/details/92387360

3 系统调试端口设置

3.1  xp系统调试端口设置

 

添加如下代码

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=com_2 /baudrate=115200

通过win+R  msconfig查看启动项目设置   windows7 系统也是一样的

进入windows7 系统配置

以管理员身份启动cmd,输入   bcdedit /copy {current} /d Win7Debug  

然后  win+R  msconfig  设置启动项目

注意及时拍快照以便回复系统!!!

系统参数配置如下

4 关于windows7 64驱动签名的问题  参考文章

https://www.52pojie.cn/thread-877849-1-1.html
https://www.52pojie.cn/thread-1027420-1-1.html

首先去看雪论坛找到签名证书  https://bbs.pediy.com/thread-187925.htm 
另外HackingTeam 证书暂时没找 (又找到地址的可以下方评论区回复我)
结合上吾爱破解的两篇文章做出驱动签名的dll,  使用loadPE把我们做出的HookSigntool.dll挂到DSignTool.ext程序上

5 VS2019 创建第一个驱动程序(window7系统的)

6 驱动签名

7 测试驱动

8 收工。

 

 

------------------------------------------------------------------------------2021-03-22  中断提权 ------------------------------------------------------------------------------

首先手动在idtr 表注册20号中断

XP系统查看注册 20号中断

运行结果

 

设置编译器生成固定基址

其他配置

 

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

// 设置vscode在release开发环境下的  随机基址(否) 固定基址(是)
// IdtEntry函数的编译后的固定地址 0x00401040  为了插入到中断表中


// r idrt 读取中断表地址  0x8003f400
// dq 8003f400 l40  (注意是字母L的小写 不是数字1)
// dw = 双字节WORD格式;
// dd = 4字节DWORD格式 ;
// dq = 8字节格式;  
// 
// 
// 手动注册idt表
// 参考 03号中断  8003f430  8053ee00`0008e8b4    前四位8053+ 后四位ed04 = 函数的实际地址8053e8b4   中间8位  表示中断性质 ee00`0008
//             eq 8003f500  0040ee00`00081040      eq 编辑的意思  必须与03号中断保持一致


DWORD g_tmp = 0;
void __declspec(naked) IdtEntry()
{
	__asm
	{
		mov eax, dword ptr ds : [0x8003f500]
		mov g_tmp, eax
		iretd // 函数结束 注意32位操作系统用iretd 64位的用iret
	
	}
	 
}

void goToIdtEntry()
{
	__asm int 0x20  // 跳转我们注册20号中断函数

}

 
int main()
{
	 if ((DWORD)IdtEntry != 0x00401040)
	{
		printf("IdtEntry is not 0x00401040, wrong addr: %p\n", IdtEntry);
		system("pause");
		exit(-1);
	} 

	printf("IdtEntry函数是固定基址 %p\n", IdtEntry);

	// 跳转中断表
	goToIdtEntry();

	// %x  十六进制整数0f
	// %u  无符号十进制整数
	// %p  指针
	printf("g_tmp = %x\n" ,g_tmp);
	printf("g_tmp = %p\n", g_tmp);
    system("pause");
		
	return 0;
}
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值