开发适用于Windows xpWindows 7TitanHide驱动。

环境准备

因为要适配Windows xpWindows 7,所以选择WDK7.1
下载地址:https://learn.microsoft.com/zh-cn/windows-hardware/drivers/legacy-wdk-downloads

找到下载好的.ISO文件,解压,到解压好的文件夹中,
找到安装文件KitSetup.exe,根据指引安装好(路径检验选择默认路径,后续配置安装默认路径)。

安装好就可以在C盘的根目录看到WinDDK文件夹,

项目配置

将从Github上获取的TitanHide源码中TitanHide目录下的.cpp、.h文件复制好一份,重新配一个工程。

根据以下要求配置项目属性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

//编译出win xp 32位驱动
VS2017里新建一个空项目,新建一个配置名:TitanHide_xp //自行定义名字
VS++目录-》可执行文件目录:C:\WinDDK\7600.16385.1\bin\x86;$(ExecutablePath) //其实这里都是32位的编译器,链接器,只是通过传参,调用X86或者AMD64的编译连接器,生成32位或者64位的驱动
常规-》目标文件扩展名:.sys
C/C++-》常规-》附加包含目录:C:\WinDDK\7600.16385.1\inc\ddk;C:\WinDDK\7600.16385.1\inc;C:\WinDDK\7600.16385.1\inc\crt;C:\WinDDK\7600.16385.1\inc\api;%(AdditionalIncludeDirectories)
C/C++-》常规-》调试信息格式:C7 兼容 (/Z7)
C/C++-》优化-》优化:已禁用 (/Od)
C/C++-》预处理器-》预处理器定义:WIN32=100;_X86_=1;WINVER=0x500;DBG=1;%(PreprocessorDefinitions)
C/C++-》代码生成-》运行库:多线程调试 (/MTd)
C/C++-》代码生成-》缓冲区安全检查:否 (/GS-)
C/C++-》高级-》调用约定:__stdcall (/Gz)
C/C++-》高级-》编译为:编译为 C++ 代码 (/TP)

链接器-》常规-》启用增量链接:否 (/INCREMENTAL:NO)
链接器-》常规-》附加库目录:C:\WinDDK\7600.16385.1\lib\wxp\i386;%(AdditionalLibraryDirectories)
链接器-》输入-》附加依赖项:ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB;%(AdditionalDependencies)
链接器-》输入-》忽略所有默认库:是 (/NODEFAULTLIB)
链接器-》清单文件-》启用用户账户控制(UAC):否 (/MANIFESTUAC:NO)
链接器-》调试-》生成调试信息:是 (/DEBUG)
链接器-》调试-》生成映射文件名:是 (/MAP)
链接器-》系统-》子系统:控制台 (/SUBSYSTEM:CONSOLE)
链接器-》系统-》堆栈保留大小:4194304
链接器-》系统-》堆栈提交大小:4096
链接器-》系统-》驱动程序:驱动程序 (/Driver)
链接器-》高级-》入口点:DriverEntry
链接器-》高级-》设置校验和:是 (/RELEASE)
链接器-》高级-》基址:0x10000
链接器-》高级-》随机地址:空
链接器-》高级-》数据执行保护(EDP):空
链接器-》高级-》目标计算机:MachineX86 (/MACHINE:X86)

//编译win7 64位驱动,稍微改动下边的几个,其他跟上边相同即可:
VS2010里新建一个空项目,新建一个配置名:TitanHide_x64 //自行定义名字
链接器-》常规-》附加库目录:C:\WinDDK\7600.16385.1\lib\win7\amd64;$(LibraryPath)
C/C++-》预处理器-》预处理器定义:WIN32=100;_AMD64_=1;WINVER=0x501;DBG=1;%(PreprocessorDefinitions) //这里用到的估计也就只有_AMD64_,DBG,因为剩下的都不是64位的定义,没用到也就能编译过去了
链接器-》高级-》目标计算机:MachineX64 (/MACHINE:X64)

可能会因为VS的版本不同,会有些许差异,按上面配置更改后,根据VS的提示做出调整即可。

源码的更改

_global.h:
补充
#define MAXINT32 _I32_MAX
#define _Out_
#define _In_
#define _In_opt_
#define _Outptr_ 五个宏
补充#include <limits.h>头文件

undocumented.h:
补充ObQueryObjectAuditingByHandleObCloseHandle函数声明

运行驱动

按上面修改好能编译后,将驱动配置进Windows xpWindows 7检验。

Windows xp

Windows xp对内核驱动无强制数字签名要求,即使是未签名的TitanHide.sys
直接用sc create/sc start命令创建系统服务加载驱动。

windows 7

Win7默认启用驱动签名强制校验,未签名的TitanHide.sys会驱动数字签名验证失败。

创建自签测试证书

  1. 以管理员权限启动cmdcdmakecert.exe文件夹位置。
    1
    cd C:\WinDDK\7600.16385.1\bin\amd64
  2. 创建证书(证书名请自行替换):TitanHide.cer
    1
    makecert.exe -r -pe -ss PrivateCertStore -n CN=TitanHide_test TitanHide.cer
  3. 用此证书签名驱动文件:
    下面命令请把”D:\visual studio 3\TitanHide_xp\x64\TitanHide_x64\TitanHide.sys” 替换为自己需签名的文件路径,把TitanHide替换自己的证书名。
    1
    Signtool sign /a /v /s PrivateCertStore /n TitanHide /t http://timestamp.digicert.com "D:\visual studio 3\TitanHide_xp\x64\TitanHide_x64\TitanHide.sys"
  4. win 7虚拟机安装证书
    点击安装证书,

    选择证书存储:受信任的根证书颁发机构

    ,然后证书就安装成功了。


  5. cmd打开测试模式,并重启虚拟机就可以使用签名的驱动,
    1
    bcdedit /set testsigning on

参考文章

驱动开发配置:https://blog.csdn.net/Simon798/article/details/103264104
创建自签证书:https://blog.csdn.net/khqnlg/article/details/123950768