0x00 Windows批处理脚本优势
- 不需要安装各种编译解释器,Windows下直接使用
- 自动化处理,解决windows下的重复操作,提高工作效率
- 简单易学习
0x01 需求背景
为测试一个系统处理速度性能。需要编写所有样本(样本均为.db文件)的一个描述文件(decription.temp)作为输入,只要描述文件存在,系统立即根据描述文件描述的文件属性(例如样本存储的路径)进行对应的样本处理。处理结束后会在另一个指定文件夹中输出一个结果文件(例如:result.txt)。然而该系统无源码,无法插桩记录开始和结束时间并进行时间效率计算。考虑整个系统的过程为输入描述文件到输出结果文件。只要记录下描述文件被放入输入文件夹的开始时间和产生输出文件的结束时间即可。
0x02 总体思路
由于要实现功能的比较简单,我们采用bat批处理进行实现。该批处理需要实现的功能步骤如下所示:
- 研究描述文件格式,提取出描述一个样本文件的模板字符串,并放入template.txt中。
- 遍历所有db文件,并根据template.txt中的模板构造文件描述字符串,并将其附加到decription.txt。
- 更改decription.txt后缀名为decription.temp,让系统立即开始处理。
- 第3步同时,获取系统时间并记录下来。
- 循环访问指令目录下是否产生了result.txt文件。若产生则第6步。
- 记录结束时的系统时间。
- 根据记录的开始时间和结束时间计算总耗时和效率。
0x03 bat批处理脚本实现
本节将按照上节每个步骤依次进行讲解和实现。
1、构造template.txt文件
通过研究描述文件格式,发现不同样本只需要写入一个相似的字符串到描述文件中。每个文件的描述字符串仅仅是文件全路径不同。所以我们任意提取其中一个文件的描述字符串并把其中的文件名变为ZWF.db,意为占位符。因为我们的样本也放入该文件夹下,所以路径我们就不动了。把该模板字符串手动存储到template.txt中,供批处理程序读取并使用。模板为下所示:
2、构造decription.txt文件
构造描述文件需要按照模板字符串对所有样本进行构造,首先获取模板字符串,代码如下所示:
rem 测试计算某系统识别效率
@echo off
setlocal enabledelayedexpansion
::获取txt中的模板字符串
for /f "delims=" %%b in (template.txt) do (
set template=%%b
goto A
)
:A
::遍历所有db文件并构造描述文件
set dbNum=0
set FolderName=.
for /f "delims=" %%a in ('dir /b "%FolderName%\*.db"') do (
set newTemp=%template%
set var=!newTemp:ZWF.db=%%a!
echo !var!>>decription.txt
set /a dbNum+=1
)
echo 文件夹中总共有:!dbNum!个文件
运行后生成如下文件:
与预想的效果一致。
此处代码我们需要了解以下批处理脚本知识。
2.1、注释
任何高级语言都会存在注释,提高代码可阅读性,windows 批处理也不例外。在批处理中存在两种注释方法:
- rem 注释
- :: 注释
例如上述构造decription.txt文件脚本中这两种注释均被使用到。
2.2、echo输出语句
echo可作为控制台输出语句,格式为:echo "String"
echo on:若定义此句,后面所有脚本命令将会显示出来,bat中是默认打开的。这种视觉体验不好。
echo off:关闭回显,和echo on功能相反,将表明不会显示所执行的命令。但本身会被显示。
@echo off:加上@除了上述外,“echo off”本身也不会显示。也就是只显示echo指示的;内容。
直接看下图就很容易理解: