0x00.前言
将学习的内容做以下总结,学艺不深,有错误的地方还望各位指出。
一些图是借用的网络上的,部分内容截图比较麻烦。内容分为三个方面:
·搭建编译环境
·设置编译选项
·测试项目
0x01.搭建编译环境
搭建环境网上的文章有一些,但我按照网上的流程搭建了一遍之后发现一个问题——找不到相关头文件比如<ntddk.h>
这事因为sdk的版本和wdk版本不匹配,所以,最好的安装步骤是先安装vs2015再安装WDK10
我的两个版本如上,或者安装vs时不选择sdk,安装vs之后再去官网上选择合适的sdk和wdk
其次是搭建双机调试环境,忘掉古老的设备接口吧,这里用VirtualKD
http://blog.csdn.net/coc_k/article/details/52034927
这篇文章写得很详细
0x02.设置编译选项
现在我们修改编译选项实现一个打印遍历驱动的程序
新建wdm项目
添加新建项,并改后缀为.c
删除自动生成的.inf文件
修改编译选项如下,不一一截图:
// C/C++
// |-常规
// | |-视警告为错误:否
// |-优化
// | |-优化:已禁用
// | |-启用内部函数:否
// *-代码生成
// |-启用字符串池:否
// |-安全检查:禁用安全检查(/GS-)
// *-启用函数级连接:否(/Gy-)
//
// 链接器
// |-常规
// | *-将链接器警告视为错误:否
// |-调试
// | |-生成完整的数据库文件:是
// *-高级
// |-入口点:DriverEntry
//
// Driver Setting
// |-General
// | *-Target OS Version:windows 7
// | *-Target Platform:Desktop //这些自定义
这样修改编译选项生成的文件更为纯净容易分析,下图是拖到IDA里面的效果
如果没有这方面的需要只需修改下面的选项即可
// | |-视警告为错误:否
// | *-将链接器警告视为错误:否
// | *-Target OS Version:windows 7
// | *-Target Platform:Desktop //这些自定义
0x03.测试
注意:一些古老的教材提到wdk自带一个build environment的文件夹,通过这里面的exe命令行进行编译
而wdk10不再支持这种方式,已经将这个整合到vs里了,请按照上文的编译环境配置
源码见附件,从DriverEntry入口开始分析即可
另外windbg需要获得打印的调试信息,需要拷贝下面文字到记事本,改后缀名为.reg,双击导入被调试虚拟机注册表
并且需要重启目标虚拟机
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter]
"DEFAULT"=dword:0000000f
另外对于学习驱动的朋友题两点建议:
1.多看一些新的教材,老的教材就直接放弃吧,推荐以下教程:
http://www.vbasm.com/thread-7971-1-1.html
《Windows内核安全与驱动开发》
2.明确重点,从事逆向的工作直接跳过硬件接口方面的章节
额外推荐阅读:
http://www.mycode.net.cn/language/cpp/1771.html
http://www.m5home.com/bbs/thread-8905-1-1.html
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课