[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] [已解决]批处理如何获取DLL路径?

思路是先用TASKLIST /M列出所有进程调用的DLL,接着,用命令获取DLL的详细路径,并赋予给%%A

希望各位帮忙写出来,本人能力有限。

参见DOS联盟贴 http://www.cn-dos.net/forum/viewthread.php?tid=49030&fpage=1

希望能有P处理版本的出现。本人能力有限,期待各位帮忙!

[ 本帖最后由 luckboy45 于 2009-10-24 17:19 编辑 ]
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
逍遥@浪子@反病毒
http://hi.baidu.com/luckboy039

回复 20# luckboy45

18代码已被订正,用19楼节选示例测试已通过...

TOP

本帖最后由 luckboy45 于 2024-11-3 08:27 编辑

回复 18# aloha20200628

感谢你热情的帮助,测试了18楼代码,使用sort的那段,无法过滤干净,效果如下,很多重复的没有被过滤,大概是因为大小写的缘故。

C:\Documents
C:\Program
C:\WINDOWS\AppPatch\AcAdProc.dll
C:\WINDOWS\AppPatch\AcGenral.dll
C:\WINDOWS\explorer.exe
c:\WINDOWS\pchealth\helpctr\binaries\pchsvc.dll
C:\WINDOWS\system32\AcSignIcon.dll
c:\WINDOWS\system32\activeds.dll
C:\WINDOWS\system32\activeds.dll
c:\WINDOWS\system32\activeds.dll
C:\WINDOWS\system32\activeds.dll
c:\WINDOWS\system32\activeds.dll
C:\WINDOWS\system32\activeds.dll
c:\WINDOWS\system32\activeds.dll
C:\WINDOWS\system32\activeds.dll
c:\WINDOWS\system32\activeds.dll
C:\WINDOWS\system32\activeds.dll
C:\WINDOWS\system32\actxprxy.dll
C:\WINDOWS\system32\adsldpc.dll
c:\WINDOWS\system32\adsldpc.dll
C:\WINDOWS\system32\adsldpc.dll
c:\WINDOWS\system32\adsldpc.dll


而使用第二段代码,过滤的是干净了,但把
C:\Program Files\Bonjour\mdnsNSP.dll

C:\Program Files\Common Files\Autodesk Shared\dwf Common\DWFShellExtension.dll                                                

C:\Program Files\Common Files\Autodesk Shared\dwf Common\MSVCP71.dll                                                         

C:\Program Files\Common Files\Autodesk Shared\dwf Common\MSVCR71.dll
C:\Documents and Settings\All Users\Application Data\Thunder Network\KanKan\Pusher\xappdrv.1.0.0.87.dll


经过过滤后变成了
C:\Program
C:\Documents

其实应该是过滤掉空行和行尾的空格即可,麻烦再帮完善下,谢谢!~
逍遥@浪子@反病毒
http://hi.baidu.com/luckboy039

TOP

回复 17# Batcher

我指的效果不佳是,因为我上面代码生成的2.TXT内每行末尾都有空格符号,而且有些下面有空行,内容如下,节选部分
  1. C:\WINDOWS\system32\cryptdll.dll                                                                                             
  2. C:\WINDOWS\system32\sensapi.dll                                                                                               
  3. C:\WINDOWS\system32\DNSAPI.dll                                                                                                
  4. C:\Program Files\Bonjour\mdnsNSP.dll                                                                                          
  5. C:\WINDOWS\system32\rasadhlp.dll                                                                                             
  6. C:\WINDOWS\system32\rsaenh.dll                                                                                                
  7. D:\常用工具\UnLocker185\UnlockerCOM.dll                                                                                       
  8. C:\WINDOWS\system32\syncui.dll                                                                                                
  9. C:\Program Files\Common Files\Autodesk Shared\dwf Common\DWFShellExtension.dll                                                
  10. C:\Program Files\Common Files\Autodesk Shared\dwf Common\MSVCP71.dll                                                         
  11. C:\Program Files\Common Files\Autodesk Shared\dwf Common\MSVCR71.dll                                                         
  12. C:\WINDOWS\system32\MSISIP.DLL                                                                                                
  13. C:\WINDOWS\system32\wshext.dll   
  14.                                                                                              
  15. C:\WINDOWS\system32\ntdll.dll  
  16. C:\WINDOWS\system32\csrss.exe     
  17. C:\WINDOWS\system32\ntdll.dll     
  18. C:\WINDOWS\system32\CSRSRV.dll   
  19. C:\WINDOWS\system32\basesrv.dll   
  20. C:\WINDOWS\system32\winsrv.dll   
  21. C:\WINDOWS\system32\GDI32.dll     
  22. C:\WINDOWS\system32\KERNEL32.dll  
  23. C:\WINDOWS\system32\USER32.dll   
  24. C:\WINDOWS\system32\LPK.DLL      
  25. C:\WINDOWS\system32\USP10.dll     
  26. C:\WINDOWS\system32\ADVAPI32.dll  
  27. C:\WINDOWS\system32\RPCRT4.dll   
  28. C:\WINDOWS\system32\Secur32.dll   
  29. C:\WINDOWS\system32\sxs.dll      
  30. C:\WINDOWS\system32\winlogon.exe                                                                                   
  31. C:\WINDOWS\system32\ntdll.dll                                                                                      
  32. C:\WINDOWS\system32\kernel32.dll                                                                                   
  33. C:\WINDOWS\system32\ADVAPI32.dll                                                                                   
  34. C:\WINDOWS\system32\RPCRT4.dll                                                                                    
  35. C:\WINDOWS\system32\Secur32.dll                                                                                    
  36. C:\WINDOWS\system32\AUTHZ.dll        
  37. C:\WINDOWS\system32\svchost.exe                                                                                    
  38. C:\WINDOWS\system32\ntdll.dll      
  39. C:\Documents and Settings\All Users\Application Data\Thunder Network\KanKan\Pusher\xappdrv.1.0.0.87.dll                                                                           
  40. C:\WINDOWS\system32\kernel32.dll                                                                                   
  41. C:\WINDOWS\system32\ADVAPI32.dll                                                                                   
复制代码
我需要过滤掉重复的行,因为那会影响到后续代码执行效率。
逍遥@浪子@反病毒
http://hi.baidu.com/luckboy039

TOP

本帖最后由 aloha20200628 于 2024-11-3 11:13 编辑

回复 16# luckboy45

以下去重的代码针对16楼的示例文件 2.txt(数据行均为全路径文件名),第2行代码专为删除 2.txt 中的空行和行尾空格...
  1. @echo off &setlocal enabledelayedexpansion
  2. (for /f "tokens=* delims= " %%a in (2.txt) do echo,%%~dpnxa)>0.0
  3. (for /f "delims=" %%a in ('sort 0.0') do (
  4.    if /i "%%a" neq "!a!" if "!a!" neq "" echo,!a!)&set "b=!a!"&set "a=%%a")>2.new.txt
  5. if /i "!b!" neq "!a!" echo,!a!>>2.new.txt
  6. del/q "0.0"&endlocal&pause&exit/b
复制代码
以下代码未用 sort.exe 完成,但仍须第2行代码专为删除 2.txt 中的空行和行尾空格...
  1. @echo off &setlocal enabledelayedexpansion
  2. (for /f "tokens=* delims= " %%a in (2.txt) do echo,%%~dpnxa)>0.0
  3. (for /f "delims=" %%a in (0.0) do if not defined _%%a set "_%%a=1"&echo,%%a)>2.new.txt
  4. del/q "0.0"&endlocal&pause&exit/b
复制代码

TOP

回复 16# luckboy45


"效果不佳"的意思是代码得到了正确的结果但是速度太慢?还是代码得到了错误的结果?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 luckboy45 于 2024-11-2 21:32 编辑

回复 15# aloha20200628

感谢你的热心回复!

因为我电脑没有安装PS,且我有4台电脑均是XP系统,有专业版、家庭版、精简版,我写的程序需要适用于不同版本的系统,故我的操作思路是
@echo off
For /f "skip=1 delims=" %%a in ('WMIC Process WHERE "handle!=0 AND handle!=4" GET ExecutablePath^|more') do (
        For /f "tokens=2 delims=/" %%b in ('WMIC Path  Win32_PerfFormattedData_PerfProc_FullImage_Costly where "name like "%%~na%%"" GET Name') do echo %%b>>2.txt
)
goto :eof


2.txt   的内容生成如下:
C:\WINDOWS\system32\ntdll.dll  

C:\WINDOWS\system32\csrss.exe     

C:\WINDOWS\system32\ntdll.dll     

C:\WINDOWS\system32\CSRSRV.dll   

C:\WINDOWS\system32\basesrv.dll   

C:\WINDOWS\system32\winsrv.dll   

C:\WINDOWS\system32\GDI32.dll     

C:\WINDOWS\system32\KERNEL32.dll  

C:\WINDOWS\system32\USER32.dll   

C:\WINDOWS\system32\LPK.DLL      

C:\WINDOWS\system32\USP10.dll     

C:\WINDOWS\system32\ADVAPI32.dll  

C:\WINDOWS\system32\RPCRT4.dll   

C:\WINDOWS\system32\Secur32.dll   

C:\WINDOWS\system32\sxs.dll      

C:\WINDOWS\system32\winlogon.exe                                                                                   

C:\WINDOWS\system32\ntdll.dll                                                                                      

C:\WINDOWS\system32\kernel32.dll                                                                                   

C:\WINDOWS\system32\ADVAPI32.dll                                                                                   

C:\WINDOWS\system32\RPCRT4.dll                                                                                    

C:\WINDOWS\system32\Secur32.dll                                                                                    

C:\WINDOWS\system32\AUTHZ.dll                                                                                      

C:\WINDOWS\system32\msvcrt.dll                                                                                    

C:\WINDOWS\system32\CRYPT32.dll                                                                                    

C:\WINDOWS\system32\MSASN1.dll                                                                                    

C:\WINDOWS\system32\USER32.dll                                                                                    

C:\WINDOWS\system32\GDI32.dll                                                                                      

C:\WINDOWS\system32\NDdeApi.dll                                                                                    

C:\WINDOWS\system32\PROFMAP.dll                                                                                    

C:\WINDOWS\system32\NETAPI32.dll                                                                                   

C:\WINDOWS\system32\USERENV.dll                                                                                    

C:\WINDOWS\system32\PSAPI.DLL  

如何过滤重复行???代码最好不依赖外部工具,我尝试用下面代码过滤重复行,但效果不佳,请问怎么解决?

for /f "delims=" %%i in (2.txt) do (if not defined %%i set %%i=s & echo %%i>>b.txt)

接着再用wmic datafile where "name='!a:\=\\!'" get manufacturer /value
来判断过滤掉微软签名的,最终过滤出可疑DLL。
逍遥@浪子@反病毒
http://hi.baidu.com/luckboy039

TOP

回复 14# luckboy45

用14楼要求的流程走一遍,只有获取*.dll全路径的可选方法不多,其中借用powershell一行流似乎至为简洁,但首启 ps 稍慢点,既然请ps进门了就顺手把 ‘去重’ 也给练了...
以下代码仅供参考
  1. @echo off &cd.>"0.0" &tasklist /m /fo csv|findstr /iv "映像名称 暂缺 tasklist.exe findstr.exe">0.1
  2. powershell "gc 0.1|%%{$_.split('.')[0].substring(1)}|select -unique|%%{gps $_|select -expandproperty modules|select filename|ac 0.0};gc 0.0|select -unique|sc 0.1"
  3. setlocal enabledelayedexpansion & (for /f "tokens=2 delims=}=" %%a in (0.1) do (
  4.    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" &if /i "!v!"=="!v:microsoft corporation=!" echo,[%%a] !v:~,-1!))>list.txt
  7. del/q "0.?"&endlocal&pause&exit/b
复制代码

TOP

将老帖重新顶起来,需要实现的效果是,过滤系统DLL,思路是获取所有进程和进程调用的所有DLL详细路径,接着过滤掉重复的DLL,然后用wmic datafile where "name='!a:\=\\!'" get manufacturer /value ,获得他们的签名,再过滤掉微软签名的DLL,从而达到最终过滤出可疑DLL的目的。

我是使用start msinfo32 /categories +swenvloadedmodules /report %temp%\a.txt来实现的,期待有不同方案。
逍遥@浪子@反病毒
http://hi.baidu.com/luckboy039

TOP

感谢各位的帮助!

[ 本帖最后由 luckboy45 于 2009-10-24 17:18 编辑 ]
逍遥@浪子@反病毒
http://hi.baidu.com/luckboy039

TOP

回复 11楼 的帖子

大家给的那些链接中的代码你都看过吗?还是看了之后不懂?随便修改一下就可以了。如果是不懂请直说,大家会直接给你写代码,而不用这么白费口舌。

另外,请不要在一个帖子中问多个主题不同的问题。问题如果有更新,请在顶楼编辑。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 10楼 的帖子

可能我的系统是GHOST版的关系,代码无任何效果可言。。。很感谢你的帮忙!

看样子这个帖子是比较有挑战难度的啊!~还是期待有能力的各位能帮忙写出来,

具体要求见7楼
逍遥@浪子@反病毒
http://hi.baidu.com/luckboy039

TOP

尝试一下获得进程 explorer.exe 的DLL地址:
  1. wmic process where name="explorer.exe" assoc
复制代码

TOP

回复 8楼 的帖子

3楼的我看过的,没有我想要的结果,且运行多无效果。。。。说无效查询
逍遥@浪子@反病毒
http://hi.baidu.com/luckboy039

TOP

回复 7楼 的帖子

你怎么不看3楼给出的链接?
(*^_^*)

TOP

返回列表