Board logo

标题: [系统相关] [已解决]求助批处理WMIC获取驱动签名的问题 [打印本页]

作者: luckboy45    时间: 2024-10-24 09:28     标题: [已解决]求助批处理WMIC获取驱动签名的问题

本帖最后由 luckboy45 于 2024-10-25 07:32 编辑

运行环境是XP系统,这个问题是15年前的,最近翻看到再重发下,期待有解决方案。

思路是用wmic sysdriver get PathName >>list.txt

list.txt内容将获得如下,省略N多

PathName                                          
                                                   
C:\WINDOWS\system32\DRIVERS\ACPI.sys               
C:\WINDOWS\system32\drivers\acpiec.sys            
C:\WINDOWS\system32\drivers\aec.sys               
C:\WINDOWS\system32\drivers\afd.sys               
C:\WINDOWS\system32\drivers\ahcix86_.sys           
C:\WINDOWS\system32\DRIVERS\amdhub30.sys           
C:\WINDOWS\system32\DRIVERS\amdxhc.sys            
C:\WINDOWS\system32\Drivers\androidusb.sys         
C:\WINDOWS\system32\drivers\asc3350p.sys           
C:\WINDOWS\system32\DRIVERS\asyncmac.sys           
C:\WINDOWS\system32\DRIVERS\atapi.sys
\??\C:\WINDOWS\system32\drivers\ksapi.sys
\??\C:\WINDOWS\system32\drivers\QQFrmMgr.sys      
\??\C:\WINDOWS\system32\drivers\QQProtect.sys
C:\WINDOWS\system32\DRIVERS\rtwlanu.sys            
C:\WINDOWS\system32\DRIVERS\secdrv.sys            
C:\WINDOWS\system32\drivers\sense3.sys            
C:\WINDOWS\system32\drivers\Serial.sys            
C:\WINDOWS\system32\drivers\Sfloppy.sys

然后读取逐行读取list.txt里的路径,用wmic datafile获得其签名,并将结果输出到list1.txt

for /f "skip=1 delims=" %%a in (list.txt) do wmic datafile where "name='%%a'"get manufacturer  /format:list

以上命令执行后无任何反应,如何修正?

希望输出的格式为如下,希望能帮忙实现下。

[C:\WINDOWS\system32\DRIVERS\HDAudBus.sys           ] [Windows (R) Server 2003 DDK provider ]
[C:\WINDOWS\system32\drivers\RtkHDAud.sys           ] [Realtek Semiconductor Corp. ]
[C:\WINDOWS\system32\DRIVERS\kguard.sys             ] [ ]
[c:\WINDOWS\system32\npkcusb.sys                ] [INCA Internet Co. ]
[C:\WINDOWS\system32\DRIVERS\nv4_mini.sys           ] [NVIDIA Corporation ]
[c:\WINDOWS\system32\drivers\prcmondrv1041.sys  ] [Igor Nys ]
[C:\WINDOWS\system32\DRIVERS\ptilink.sys            ] [Parallel Technologies ]
[C:\WINDOWS\system32\DRIVERS\Rtnicxp.sys            ] [Realtek Semiconductor Corporation                            ]
[C:\WINDOWS\system32\DRIVERS\secdrv.sys             ] [Macrovision Corporation ]
[C:\WINDOWS\system32\Drivers\sense3.sys             ] [Beijing Senselock ]
[c:\WINDOWS\system32\TesSafe.sys                ] [TENCENT ]
[c:\WINDOWS\system32\drivers\TsQBDrv.sys        ] [Tencent Inc. ]
[C:\WINDOWS\system32\DRIVERS\ucguard.sys            ] [Huorong Borui (Beijing) Technology Co. ]
[C:\WINDOWS\system32\Drivers\usbaapl.sys            ] [Apple ]
作者: czjt1234    时间: 2024-10-24 10:36

wmic要\\而不是\
也不支持\?\C:这样子
  1. wmic datafile where name="C:\\WINDOWS\\system32\\DRIVERS\\atapi.sys" get manufacturer /format:list
复制代码
这个测试可以运行
作者: aloha20200628    时间: 2024-10-24 15:31

本帖最后由 aloha20200628 于 2024-10-24 20:07 编辑

回复 1# luckboy45
  1. @echo off &setlocal enabledelayedexpansion &echo,处理中...
  2. (for /f "tokens=2 delims==" %%a in (
  3.      'wmic sysdriver get pathname /value ^|find "=" '
  4.     ) do (set "a=%%a" &set "a=!a:\??\=!" &for /f "tokens=2 delims==" %%v in (
  5.      'wmic datafile where "name='!a:\=\\!'" get manufacturer /value ^|find "=" '
  6.     ) do set "v=%%v" &echo,[!a:~,-1!] [!v:~,-1!]
  7. ))>list.txt
  8. endlocal&pause&exit/b
复制代码

作者: luckboy45    时间: 2024-10-24 18:27

回复 3# aloha20200628

感谢楼上2位朋友提供的帮助,其中三楼的代码测试有效,但扫描不全面,会提示很多“无可用范例”,出现很多漏扫
经过我过滤微软签名后的内容如下:
[C:\WINDOWS\system32\drivers\Afc.sys] [Arcsoft, Inc.]
[C:\WINDOWS\system32\DRIVERS\HDAudBus.sys] [Windows (R) Server 2003 DDK provider]
[C:\WINDOWS\system32\drivers\RtkHDAud.sys] [Realtek Semiconductor Corp.]
[C:\WINDOWS\system32\DRIVERS\nv4_mini.sys] [NVIDIA Corporation]
[C:\WINDOWS\system32\DRIVERS\ptilink.sys] [Parallel Technologies, Inc.]
[C:\WINDOWS\system32\DRIVERS\Rtnicxp.sys] [Realtek Semiconductor Corporation                           ]
[C:\WINDOWS\system32\DRIVERS\secdrv.sys] [Macrovision Corporation, Macrovision Europe Limited, and Macrovision Japan and Asia K.K.]
[C:\WINDOWS\system32\Drivers\sense3.sys] [Beijing Senselock]
[C:\WINDOWS\system32\DRIVERS\ucguard.sys] [Huorong Borui (Beijing) Technology Co., Ltd.]
[C:\WINDOWS\system32\Drivers\usbaapl.sys] [Apple, Inc.]
[C:\WINDOWS\system32\drivers\websafe.sys] [jackiefzj]

而实际我用另外一个工具扫描到的结果如下

[C:\WINDOWS\system32\drivers\Afc.sys                    ] [Arcsoft  ]  
[\G:\FXDrv32.sys                                     ] [  ]  
[C:\WINDOWS\system32\DRIVERS\HDAudBus.sys               ] [Windows (R) Server 2003 DDK provider  ]  
[C:\WINDOWS\system32\drivers\RtkHDAud.sys               ] [Realtek Semiconductor Corp.  ]  
[C:\WINDOWS\system32\DRIVERS\kguard.sys                 ] [  ]  
[c:\WINDOWS\system32\npkcusb.sys                    ] [INCA Internet Co.  ]  
[C:\WINDOWS\system32\DRIVERS\nv4_mini.sys               ] [NVIDIA Corporation  ]  
[c:\WINDOWS\system32\drivers\prcmondrv1041.sys      ] [Igor Nys  ]  
[C:\WINDOWS\system32\DRIVERS\ptilink.sys                ] [Parallel Technologies  ]  
[C:\WINDOWS\system32\DRIVERS\Rtnicxp.sys                ] [Realtek Semiconductor Corporation                             ]  
[C:\WINDOWS\system32\DRIVERS\secdrv.sys                 ] [Macrovision Corporation  ]  
[C:\WINDOWS\system32\Drivers\sense3.sys                 ] [Beijing Senselock  ]  
[c:\WINDOWS\system32\TesSafe.sys                    ] [TENCENT  ]  
[c:\WINDOWS\system32\drivers\TsQBDrv.sys            ] [Tencent Inc.  ]  
[C:\WINDOWS\system32\DRIVERS\ucguard.sys                ] [Huorong Borui (Beijing) Technology Co.  ]  
[C:\WINDOWS\system32\Drivers\usbaapl.sys                ] [Apple  ]  
[C:\WINDOWS\system32\drivers\websafe.sys                ] [jackiefzj  ]  
[c:\WINDOWS\system32\npkcrypt.sys                   ] [INCA Internet Co.  ]
作者: aloha20200628    时间: 2024-10-24 19:54

回复 4# luckboy45

修复了三楼代码》删除驱动路径中包含?字符的字段,取消了过滤...

作者: luckboy45    时间: 2024-10-24 20:16

本帖最后由 luckboy45 于 2024-10-25 08:34 编辑

回复 5# aloha20200628

过滤也是必要的,取消后会报“无效查询”

我给出我的方法,扫描的会比你的全面一些,但缺点是代码有点长,还得过滤"\\"

我原来的代码
@echo off &setlocal enabledelayedexpansion
for /f "skip=1 tokens=* " %%i in ('wmic sysdriver get PathName') do call :GetVendor "%%i"
call :replace
::过滤Microsof为关键字的行
findstr /v "Microsoft" "%temp%\7.txt" > "%temp%\8.txt"
exit
:GetVendor
:: 非系统驱动调用判断代码
if "%~1"=="" goto :eof
        set Vendor=Unknow
        set PathName=%~1
        set PathName=!PathName:\=\\!
        set PathName=!PathName:\??\=!
        set PathName=!PathName:\\c:=c:!
    for /f "delims=,  tokens=1,2,3,4,5" %%a in (
        'wmic datafile where "name='!PathName!'" get
        "creation date"^,        
        lastmodified^,
        manufacturer^,
        version /format:csv.xsl'
    ) do (
        set mymanu=%%d >nul
    )
    if not "!mymanu!"=="Microsoft Corporation " (
        echo [!PathName!] [!mymanu!]>>%temp%\3.txt
)
goto :eof

:replace
:: 将文本%temp%\3.txt中的\\替换成\,输出到%temp%\7.txt
(for /f "delims=" %%a in (%temp%\3.txt) do (
        set "str=%%a"
        set "str=!str:\\=\!"
        echo.!str!
))>%temp%\7.txt
goto :eof

以上代码测试可用,留给后来者吧,最终输出结果在"%temp%\8.txt"
作者: aloha20200628    时间: 2024-10-24 20:43

本帖最后由 aloha20200628 于 2024-10-24 23:32 编辑

回复 6# luckboy45

   取消过滤是发现包含?字符的字段均在驱动路径开头,即如 ‘\??\C:\WINDOWS\system32\drivers\ksapi.sys’,删除不影响路径完整性
   比较四楼的两组结果,发现第一组缺失的都是驱动路径盘符为小写或未能获取驱动签名的数据项...
   用订正后的三楼代码在win8.1系统跑了一遍,wmic sysdriver get pathname /value |find "=" 的查询结果共287项,最终结果 list.txt 也是287项,没有任何遗漏。
   关于 ‘无可用实例(No Instance(s) Available)’ 的wmic报错,查看了一些中外老帖的记载,大部分均与 wmic 查询表达式的格式有误相关,如双引号包裹、转义特殊字符等...
   wmic 的返回值默认采用 utf-16+ 编码,其在后续的管道或重定向传输中会被系统用当前码页编码自动转换,可能出现转换结果中的某些 ‘怪状’,对本帖而言,是要看 ‘wmic sysdriver get pathname’ 查询结果中的驱动路径是否包含某些非正常字符需要修理,以便为后续应用清路...

作者: aloha20200628    时间: 2024-10-24 21:33

本帖最后由 aloha20200628 于 2024-10-24 21:38 编辑

回复 6# luckboy45

再次订正3楼代码如下... 对 wmic sysdriver get pathname /value |find "=" 查询结果中的驱动路径三番修理(参考了6楼代码),并过滤了微软官方签名的数据项...
  1. @echo off &setlocal enabledelayedexpansion &echo,处理中...
  2. (for /f "tokens=2 delims==" %%a in (
  3.      'wmic sysdriver get pathname /value^|find "=" '
  4.     ) do (set "a=%%a" &set "a=!a:\??\=!" &set "a=!a:\\c:=c:!" &for /f "tokens=2 delims==" %%v in (
  5.      'wmic datafile where "name='!a:\=\\!'" get manufacturer /value ^|find "=" '
  6.     ) do set "v=%%v" &if /i "!v!"=="!v:microsoft corporation=!" echo,[!a:~,-1!] [!v:~,-1!]
  7. ))>list.txt
  8. endlocal&pause&exit/b
复制代码

作者: luckboy45    时间: 2024-10-25 07:31

回复 8# aloha20200628

感谢多次热情帮助!解决了从09年就出现的困扰,代码短小精悍一直是我所期待的,本帖可以帮助到后来者,虽然批处理已经要退出历史舞台,每每翻看那时候写的代码还是恍如回到那个时代,致我们失去的青春!
作者: aloha20200628    时间: 2024-10-25 12:34

本帖最后由 aloha20200628 于 2024-10-25 12:41 编辑

回复 9# luckboy45

回看前几版代码主要是修理wmic返回值可能残留的‘头部隐患’(即驱动路径盘符前的一些多余字符),再给一个版本如下》可一步统一清理这些头部 ‘捣乱分子’,不必再 ‘逐一针对性’ 剔除了...
  1. @echo off &setlocal enabledelayedexpansion &echo,处理中...
  2. (for /f "tokens=1* delims=:" %%a in (
  3.    'wmic sysdriver get pathname /value^|find "=" '
  4.   ) do set "a=%%a" &set "a=!a:~-1!:%%b" &for /f "tokens=2 delims==" %%v in (
  5.    'wmic datafile where "name='!a:\=\\!'" get manufacturer /value ^|find "=" '
  6.   ) do set "v=%%v" &if /i "!v!"=="!v:microsoft corporation=!" echo,[!a:~,-1!] [!v:~,-1!]
  7. )>list.txt
  8. endlocal&pause&exit/b
复制代码

作者: luckboy45    时间: 2024-10-25 19:33

本帖最后由 luckboy45 于 2024-10-25 19:36 编辑

回复 10# aloha20200628

强悍,实现的效果不错,就代码简洁和扫描结果来看,你的代码短小强悍,我的代码虽然烦琐但执行效率更高,速度比你的代码快了5.3秒

我的代码
获得的内容:

[C:\WINDOWS\system32\drivers\Afc.sys                ] [Arcsoft ]
[\G:\FXDrv32.sys                                 ] [ ]
[C:\WINDOWS\system32\DRIVERS\HDAudBus.sys           ] [Windows (R) Server 2003 DDK provider ]
[C:\WINDOWS\system32\drivers\RtkHDAud.sys           ] [Realtek Semiconductor Corp. ]
[C:\WINDOWS\system32\DRIVERS\kguard.sys             ] [ ]
[c:\WINDOWS\system32\npkcrypt.sys               ] [INCA Internet Co. ]
[c:\WINDOWS\system32\npkcusb.sys                ] [INCA Internet Co. ]
[C:\WINDOWS\system32\DRIVERS\nv4_mini.sys           ] [NVIDIA Corporation ]
[c:\WINDOWS\system32\drivers\prcmondrv1041.sys  ] [Igor Nys ]
[C:\WINDOWS\system32\DRIVERS\ptilink.sys            ] [Parallel Technologies ]
[C:\WINDOWS\system32\DRIVERS\Rtnicxp.sys            ] [Realtek Semiconductor Corporation                            ]
[C:\WINDOWS\system32\DRIVERS\secdrv.sys             ] [Macrovision Corporation ]
[C:\WINDOWS\system32\Drivers\sense3.sys             ] [Beijing Senselock ]
[c:\WINDOWS\system32\TesSafe.sys                ] [TENCENT ]
[c:\WINDOWS\system32\drivers\TsQBDrv.sys        ] [Tencent Inc. ]
[C:\WINDOWS\system32\DRIVERS\ucguard.sys            ] [Huorong Borui (Beijing) Technology Co. ]
[C:\WINDOWS\system32\Drivers\usbaapl.sys            ] [Apple ]
[C:\WINDOWS\system32\drivers\websafe.sys            ] [jackiefzj ]

相较于SRENG漏扫
  <\??\C:\WINDOWS\system32\drivers\QQFrmMgr.sys><Tencent>
  <\??\C:\WINDOWS\system32\drivers\QQProtect.sys><Tencent>

你的代码
获得的内容:
[C:\WINDOWS\system32\drivers\Afc.sys] [Arcsoft, Inc.]
[C:\WINDOWS\system32\drivers\dmboot.sys] [Microsoft Corp., Veritas Software]
[C:\WINDOWS\system32\drivers\dmio.sys] [Microsoft Corp., Veritas Software]
[C:\WINDOWS\system32\drivers\dmload.sys] [Microsoft Corp., Veritas Software.]
[C:\WINDOWS\system32\DRIVERS\HDAudBus.sys] [Windows (R) Server 2003 DDK provider]
[C:\WINDOWS\system32\drivers\RtkHDAud.sys] [Realtek Semiconductor Corp.]
[C:\WINDOWS\system32\npkcrypt.sys] [INCA Internet Co., Ltd.]
[C:\WINDOWS\system32\npkcusb.sys] [INCA Internet Co., Ltd.]
[C:\WINDOWS\system32\DRIVERS\nv4_mini.sys] [NVIDIA Corporation]
[C:\WINDOWS\system32\drivers\prcmondrv1041.sys] [Igor Nys]
[C:\WINDOWS\system32\DRIVERS\ptilink.sys] [Parallel Technologies, Inc.]
[C:\WINDOWS\system32\DRIVERS\Rtnicxp.sys] [Realtek Semiconductor Corporation                           ]
[C:\WINDOWS\system32\DRIVERS\secdrv.sys] [Macrovision Corporation, Macrovision Europe Limited, and Macrovision Japan and Asia K.K.]
[C:\WINDOWS\system32\Drivers\sense3.sys] [Beijing Senselock]
[C:\WINDOWS\system32\TesSafe.sys] [TENCENT]
[C:\WINDOWS\system32\drivers\TsQBDrv.sys] [Tencent Inc.]
[C:\WINDOWS\system32\DRIVERS\ucguard.sys] [Huorong Borui (Beijing) Technology Co., Ltd.]
[C:\WINDOWS\system32\Drivers\usbaapl.sys] [Apple, Inc.]
[C:\WINDOWS\system32\drivers\websafe.sys] [jackiefzj]
   
相比我的代码漏扫
[\G:\FXDrv32.sys                                 ] [ ]
[C:\WINDOWS\system32\DRIVERS\kguard.sys             ] [ ]

该段代码用于一般检测病毒生成的驱动应该够了,主要是以前写的批处理工具里面的一个驱动检测段代码。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2