0%

inf文件编写

0x00 前言

在做windows驱动开发的时候遇到一个很大的问题就是inf文件编写,因为vs不会帮你生成好,如果直接编译的话会报错

然后就有以下几种方案:

  • 删除inf文件
  • 编写inf文件

0x01 删除inf文件

删除inf文件需要在vs的项目中删除

位置如上,右击删除就行了,之后编译,就会生成sys

之后就是载入问题了,大概有以下两种方式

0x02 编写inf文件

先附上自己编写的inf文件

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
;
; FuzzSystem.inf
;

[Version]
Signature="$WINDOWS NT$"
Class=System
ClassGuid={4d36e97d-e325-11ce-bfc1-08002be10318}
Provider=%ManufacturerName%
DriverVer = 11/09/2020,20.33.5.988
CatalogFile=FuzzSystem.cat
PnpLockDown=1

[DestinationDirs]
DefaultDestDir = 12
FuzzSystem.DriverFiles = 12

[SourceDisksNames]
1 = %Disk1%

[SourceDisksFiles]
FuzzSystem.sys = 1

[DefaultInstall]
OptionDesc = %ServiceDesc%
CopyFiles = FuzzSystem.DriverFiles

[FuzzSystem.DriverFiles]
FuzzSystem.sys

[DefaultInstall.Services]
AddService = %ServiceName%,,FuzzSystem.Service

[FuzzSystem.Service]
DisplayName = %ServiceName%
Description = %ServiceDesc%
ServiceBinary = %12%\FuzzSystem.sys
ServiceType = 1
StartType = 2
ErrorControl = 1

[DefaultUninstall]
DelFiles = FuzzSystem.DriverFiles

[DefaultUninstall.Services]
DelService = %ServiceName%,0x200

[Strings]
ManufacturerName = "pwnht"
ServiceDesc = "Example File System Driver"
ServiceName = "FuzzSystem"
ParameterPath = "SYSTEM\CurrentControlSet\Services\FuzzSystem\Parameters"
Disk1 = "Example File System Driver CD"

inf文件分为诸多节,每一个节都有名字并用[]标识,inf文件通常包含以下各节

  • Version(必须)
  • DestinationDirs (可选的,但建议使用)
  • SourceDisksNames (必需)
  • SourceDisksFiles (必需)
  • DefaultInstall (必需)
  • DefaultInstall (必需)
  • ServiceInstall (必需)
  • DefaultUninstall (可选)
  • DefaultUninstall (可选)
  • Strings (必需)

0x00 Version

参考 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/install/inf-version-section

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[Version]

Signature="signature-name"
[Class=class-name]
[ClassGuid={nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}]
[Provider=%INF-creator%]
[ExtensionId={xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}]
[LayoutFile=filename.inf [,filename.inf]... ] (Windows 2000 and Windows XP)
[CatalogFile=filename.cat]
[CatalogFile.nt=unique-filename.cat]
[CatalogFile.ntx86=unique-filename.cat]
[CatalogFile.ntia64=unique-filename.cat] (Windows XP and later versions of Windows)
[CatalogFile.ntamd64=unique-filename.cat] (Windows XP and later versions of Windows)
[CatalogFile.ntarm=unique-filename.cat] (Windows 8 and later versions of Windows)
[CatalogFile.ntarm64=unique-filename.cat] (Windows XP and later versions of Windows)

DriverVer=mm/dd/yyyy,w.x.y.z
[PnpLockDown=0|1] (Windows Vista and later versions of Windows)
[DriverPackageDisplayName=%driver-package-description%]
[DriverPackageType=PackageType]

CatalogFile键值是用来指定数字签名的 待补。。。。

这里需要注意的键值是PnpLockDown这个键值只有0和1

指定即插即用 (PnP) 是否阻止应用程序直接修改驱动程序包的 INF 文件指定的文件。 如果 PnpLockDown 指令设置为1,则 PnP 会阻止应用程序直接修改由 INF CopyFiles 指令复制的文件。 否则,如果指令未包含在 INF 文件中,或者指令的值设置为零,则具有管理员权限的应用程序可以直接修改这些文件。

0x01 DestinationDirs

参考 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/install/inf-version-section

1
2
3
4
[DestinationDirs]

[DefaultDestDir=dirid[,subdir]]
[file-list-section=dirid[,subdir]]...

DefaultDestDir =dirid[ ,subdir]
指定对文件的所有复制、删除和/或重命名操作的默认目标目录,如果没有显式列出操作目录(可以自定义文件列表节显式指定,如FuzzSystem.DriverFiles节),默认在这个目录下操作

dirid一般为数字代表windows一些常用的路径

参考 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/install/using-dirids

“值” 目标目录
2001 SourceDrive**: **pathname (用于安装 INF 文件的目录)
10 Windows 目录。这等同于 % SystemRoot%
11 系统目录。这等效于%SystemRoot% \ windows 2000 和更高版本的 windows 的% SystemRoot%system32
12 驱动程序目录。这等效于%SystemRoot% \ system32 \ windows 2000 和更高版本的 windows 的% SystemRoot% system32驱动程序
13 驱动程序包的 驱动程序存储 目录。对于 Windows 8.1 及更高版本的 Windows,指定导入驱动程序包的驱动程序存储目录的路径。请勿在DestinationDirs包括dirid 13 的文件上使用DelFiles 。对于应用到此文件的条目,文件的 SourceDiskFiles 节中的可选子目录必须与 DestinationDirs 节中的子目录匹配。不要使用 CopyFiles 重命名 DestinationDirs 包括 dirid 13 的文件。
17 INF 文件目录
18 帮助目录
20 字体目录
21 查看器目录
23 颜色目录 (ICM) ( 用于安装打印机驱动程序)
随时 系统磁盘的根目录。这是安装了 Windows 文件的磁盘的根目录。 例如,如果 dirid 10 是 “C:\winnt“,则 dirid 24 为 “C:\“。
25 共享目录
30 启动磁盘(也称为 “ARC 系统分区”)的根目录。 (这与 dirid 24 ) 所表示的目录可能相同,也可能不相同。
50 系统目录这等同于% SystemRoot% \ 系统
51 假脱机目录 ( 用于安装打印机驱动程序−请参阅 printer Dirids)
52 后台处理驱动程序目录 ( 用于安装打印机驱动程序)
53 用户配置文件目录
54 Ntldr.exeOsloader.exe所在的目录
55 打印处理器目录 ( 用于安装打印机驱动程序)
-1 绝对路径

从16384到32767的Dirid值保留给特殊 shell 文件夹。 下表显示了这些文件夹的 dirid 值。

“值” Shell 特殊文件夹
16406 所有 Settings\all users\start 菜单
16407 所有 Settings\all users\start Menu\Programs
16408 所有 Settings\all users\start Menu\Programs\Startup
16409 所有 Users\Desktop
16415 所有 Users\Favorites
16419 所有 Users\Application 数据
16422 程序文件
16425 %SystemRoot%\SysWOW64
16426 %ProgramFiles(x86)%
16427 程序 Files\Common
16428 % ProgramFiles (x86) % \ Common
16429 所有 Users\Templates
16430 所有 Users\Documents

0x02 SourceDisksNames

1
2
3
4
5
6
7
8
9
10
11
12
[SourceDisksNames] |
[SourceDisksNames.x86] |
[SourceDisksNames.arm] | (Windows 8 and later versions of Windows)
[SourceDisksNames.arm64] | (Windows 10 version 1709 and later versions of Windows)
[SourceDisksNames.ia64] | (Windows XP and later versions of Windows)
[SourceDisksNames.amd64] (Windows XP and later versions of Windows)

diskid = disk-description[,tag-or-cab-file] |
diskid = disk-description[,[tag-or-cab-file][,[unused][,path]]] |
diskid = disk-description[,[tag-or-cab-file],[unused],[path][,flags]] |
diskid = disk-description[,[tag-or-cab-file],[unused],[path],[flags][,tag-file]] (Windows XP and later versions of Windows)
...

参考 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/install/inf-sourcedisksnames-section

大概是将一个cab文件或者路径虚拟成一个磁盘,若未显式指明路径或者cab文件,则为inf文件所在的当前路径

0x03 SourceDisksFiles

1
2
3
4
5
6
7
8
9
[SourceDisksFiles] | 
[SourceDisksFiles.x86] |
[SourceDisksFiles.arm] | (Windows 8 and later versions of Windows)
[SourceDisksFiles.arm64] | (Windows 10 version 1709 and later versions of Windows)
[SourceDisksFiles.ia64] | (Windows XP and later versions of Windows)
[SourceDisksFiles.amd64] (Windows XP and later versions of Windows)

filename=diskid[,[ subdir][,size]]
...

参考 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/install/inf-sourcedisksfiles-section

指明安装需要文件的位置,还有size,感觉这是个攻击面 哈哈哈

0x04 DefaultInstall

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[DefaultInstall] | 
[DefaultInstall.nt] |
[DefaultInstall.ntx86] |
[DefaultInstall.ntarm] | (Windows 8 and later versions of Windows)
[DefaultInstall.ntarm64] (Windows 10 version 1709 and later versions of Windows)
[DefaultInstall.ntia64] | (Windows XP and later versions of Windows)
[DefaultInstall.ntamd64] (Windows XP and later versions of Windows)

[CopyFiles=@filename | file-list-section[,file-list-section] ...]
[CopyINF=filename1.inf[,filename2.inf]...]
[AddReg=add-registry-section[,add-registry-section]...]
[Include=filename1.inf[,filename2.inf]...]
[Needs=inf-section-name[,inf-section-name]...]
[Delfiles=file-list-section[,file-list-section]...]
[Renfiles=file-list-section[,file-list-section]...]
[DelReg=del-registry-section[,del-registry-section]...]
[BitReg=bit-registry-section[,bit-registry-section]...]
[ProfileItems=profile-items-section[,profile-items-section]...]
[UpdateInis=update-ini-section[,update-ini-section]...]
[UpdateIniFields=update-inifields-section[,update-inifields-section]...]
[Ini2Reg=ini-to-registry-section[,ini-to-registry-section]...]
[RegisterDlls=register-dll-section[,register-dll-section]...]
[UnregisterDlls=unregister-dll-section[,unregister-dll-section]...] ...

参考 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/install/inf-defaultinstall-section

当用户右键安装时就会运行这一节的内容,目前用到的还少,待补

0x00 DefaultInstall.Services

参考 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/install/inf-addservice-directive

DefaultInstall指定服务的一些设置

1
2
3
4
5
[DDInstall.Services] 

AddService=ServiceName,[flags],service-install-section
[,event-log-install-section[,[EventLogType][,EventName]]]
...

主要说一下 service-install-section

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[service-install-section]

[DisplayName=name]
[Description=description-string]
ServiceType=type-code
StartType=start-code
ErrorControl=error-control-level
ServiceBinary=path-to-service
[StartName=driver-object-name]
[AddReg=add-registry-section[, add-registry-section] ...]
[DelReg=del-registry-section[, del-registry-section] ...]
[BitReg=bit-registry-section[,bit-registry-section] ...]
[LoadOrderGroup=load-order-group-name]
[Dependencies=depend-on-item-name[,depend-on-item-name]
[Security="security-descriptor-string"]...]
[ServiceSidType=value]
[DelayedAutoStart=true/false]
[AddTrigger=service-trigger-install-section[, service-trigger-install-section, ...]]

0x00 ServiceType

说明
0x00000001 (设备驱动程序服务 SERVICE_KERNEL_DRIVER)
0x00000002 SERVICE_FILE_SYSTEM_DRIVER (文件系统或文件系统筛选器驱动程序服务)
0x00000010 SERVICE_WIN32_OWN_PROCESS (Microsoft Win32 服务,该服务在其自己的进程中运行)
0x00000020 共享进程 (Win32 服务 SERVICE_WIN32_SHARE_PROCESS)

0x01 StartType

指定何时启动驱动程序作为以下数值之一(用 decimal 或表示),如下面的列表所示,采用十六进制表示法。

说明
0x00000000 SERVICE_BOOT_START
0x00000001 SERVICE_SYSTEM_START
0x00000002 SERVICE_AUTO_START
0x00000003 SERVICE_DEMAND_START
0x00000004 SERVICE_DISABLED

0x02 AddReg

关于注册表相关 待补

0x05 DefaultUninstall

1
2
3
[DefaultUninstall]
DelFiles = ExampleFileSystem.DriverFiles
DelReg = ExampleFileSystem.DelRegistry

如果驱动可以卸载可以用DelFiles删除文件,DelReg清除注册表

参考 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/install/inf-delfiles-directivehttps://docs.microsoft.com/zh-cn/windows-hardware/drivers/install/inf-delreg-directive

0x00 DefaultUninstall.Services

1
2
[DefaultUninstall.Services]
DelService = %ServiceName%,0x200

删除服务 参考 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/install/inf-delservice-directive

0x06 Strings

1
2
3
4
5
6
7
8
9
10
[Strings] | 
[Strings.LanguageID] ...

strkey1 = ["]some string["]
strkey2 = " string-with-leading-or-trailing-whitespace " |
"very-long-multiline-string" |
"string-with-semicolon" |
"string-ending-in-backslash" |
""double-quoted-string-value""
...

定义一些字符串供其他节使用