标题:如何获得域内电脑安装的所有软件列表
作者:小光
原文地址:https://forum.eviloctal.com/viewthread.php?tid=40133&page=1#pid166145
原文作者:cawan – cawan[at]ieee.org
目的 : 希望劳动可以换来一点kx 呵呵 ,
正文: 检测域内所有计算机上安装的软件列表从而发现没有授权的非法软件对于维护计算机的安全是很重要的。 然而,对于这一问题却没有好的解决办法。所以我们现在会讨论用简单的批处理来达到这一功能。把批处理放到域控制器里面并在哪里运行,因为域控制器拥有访问域内所有计算机的权限。这里我们假设域内所有计算机都是安装的windows系统登录到域控制器上的。那么域控制器就有权限向或者从所有客户机上拷贝文件。同时也拥有权限在客户机上开启计划任务。
首先,第一个问题是如何从一个客户机上获得安装的软件列表。有人建议分析从windows主目录中的特定目录中的inf文件。然而,这并不是一个好的方法,因为不同的windows版本有不同的特定目录。理想的办法应该是从注册表[hklm\software\microsoft\windows\currentversion\uninstall]
导出所需的列表。所以通过执行一条像
reg export hklm\software\microsoft\windows\currentversion\uninstall list.reg
的命令。我们就可以得到一个名字为list.reg的包含所有已安装软件列表的文件。
接下来的问题是如何让每一个电脑都执行这条命令并产生各自的reg.list文件。在这里我建议使用windows的计划任务管理服务来完成这项任务。所以,在域控制器上我们可以执行一条像“at \\CLIENT_IP TIME /i COMMAND”的命令来完成我们的任务。现在我们开始写我们简单的批处理。首先我们建一个run.bat ,里面包含“reg export hklm\software\microsoft\windows\currentversion\uninstall list.reg”。接下来我们建立一个“put.bat”里面包含
//////////////////////////put.bat/////////////////////////
copy run.bat \\%1\c$\windows\system32
at \\%1 %2 /i run.bat
/////////////////////////////////////////////////////////
接下来我们为了运行“put.bat”我们建立一个"startup.bat"包含以下内容
//////////////////////////startput.bat////////////////////
for /f %%a in ('type IP.txt') do call put.bat %%a %1
////////////////////////////////////////////////////////
所以,startup.bat就会从ip.txt中一行一行的读取ip地址,接下来调用put.bat把run.bat复制进各个ip对应的客户机中,最后在客户机上开启一项计划任务并在指定的时间内运行run.bat。例如,在8:30,我们在域控制器上执行“startup.bat 8:40"来把run.bat分发到各个客户机,各个客户机就会在10分钟之后运行run.bat并产生一个list.reg。这里有一个小问题是如何产生出ip.txt这个包含所有windows主机ip列表的文件。我们可以用fscan来抓取开着139与445端口的ip。
现在,我们的客户机上都有各自的list.reg,现在的问题是如何从各个客户机取出该文件并在域控制器上产生一个可以代表各个客户机的文件像“192.168.1.100.txt,192.168.1.101.txt等等.
让我们建立两个批处理文件 get.bat和starget.bat。他们的内容分别如下
//////////////////////////get.bat/////////////////////////
copy \\%1\c$\windows\system32\list.reg .\%1.txtxi
/////////////////////////////////////////////////////////
//////////////////////////startget.bat////////////////////
for /f %%a in ('type IP.txt') do call get.bat %%a
////////////////////////////////////////////////////////
接下 ,只要我们在域控制器上执行startget.bat我们就可一得到拥有各自独立ip地址名字的包含各个主机安装的所有软件的列表文件。大多数已安装的软件中有很多的重复因为[hklm\software\microsoft\windows\currentversion\uninstall] 包含子键。这样我们需要使用上次使用到的工具 grep 的windows版来处理得到的文件。 如果你想得到更多的此方面的信息。请主动的联系我。。
finally ,,,,,终于 翻译完了。
ps: 小弟的英语不是很好,不当之处请各位指教。。。。。
小光 献上
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课