使用逐步方法剖析APT21样本

总结

在这篇博客文章中,我们将详细分析与APT(高级持久威胁)角色APT21相关的两个恶意文件(称为“Travelnet”后门)。

APT21,也被称为珍宝或锤子熊猫,是一组涉嫌国家资助的中国黑客。

根据我们在文章中提到的多个在线消息来源,APT 21历来针对的是俄罗斯政府和寻求从中国获得更大自治或独立的团体,例如西藏或新疆的团体。

第一个文件是一个dropper,用于将恶意DLL(NetTraveler特洛伊木马)注册为服务。特洛伊木马程序的主要目的是收集有关环境的信息,如用户名、主机名、主机的IP地址、Windows操作系统版本、CPU的不同配置、内存消耗信息和进程列表。恶意进程对磁盘上以及USB驱动器和网络共享上的.doc、.docx、.xls、.xlsx、.txt、.rtf、.pdf文件感兴趣,以便对其进行过滤。在整个感染过程中,会创建多个.ini配置文件,恶意软件还可以在受感染的机器上下载和执行其他文件。数据使用基于Lempel-Ziv的自定义算法进行压缩,并使用修改后的Base64算法进行编码,然后将其过滤到命令和控制服务器。

技术分析

第一节

滴管

SHA256:FECA8DB35C0C0A901556EFF447C38614D14A7140496963DF2E613B206527B338

恶意软件执行的第一步包括创建一个名为“立即安装服务”的互斥体(注意空格)。互斥锁用于避免已经感染的机器再次感染:

图1

恶意进程会在“C:\Windows\System\config_t.dat”位置创建配置文件,在整个感染过程中会大量使用该文件。用于完成此任务的API调用是CreateFileA,如图2所示:

图2

读取恶意文件中精确位置发现的以下字节,以便对其进行解密:

图3

解密例程如下图所示,由一个带有0x3E的XOR操作组成:

图4

解密结束后,新字符串表示一个包含C2服务器的URL,我们稍后将看到:

图5

使用WritePrivateProfileStringA API调用填充配置文件,如下所示。请注意,WebPage等于上面解密的字符串,其他选项稍后将在更好的上下文中进行解释:

图6
图7
图8
图9
图10

在所有这些API调用之后,配置文件具有以下模式:

图11

现在,文件中偏移量0x334处有一个字节,指示恶意进程是否应该使用代理(默认情况下,该值为0,UP=0表示恶意软件未使用代理进行网络通信)。如果该字节设置为1,恶意软件会在配置文件中写入UP=1以及5个附加值:PS(代理地址)、PP(代理端口)、PU(代理用户)、PW(代理密码)和PF(未知)。RegQueryValueExA API用于检索与“HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\svchost”关联的netsvcs(svchost.exe)的类型和数据:

图12

恶意文件枚举主机上的所有可用服务,并将其与图13中显示的硬编码列表进行比较。正如我们将进一步描述的那样,在系统上找不到的第一个服务将被用于恶意目的。

图13

策略如下:它将枚举与“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<ServiceName>”等服务对应的键,以查看该服务是否已安装。分析机器上提供了以下服务:CertPropSvc、SCPolicySvc,lanmanserver、gpsvc、iphlpsvc、msiscsi、schedule、winmgmt、SessionEnv,缺少的第一个服务是FastUserSwitchingCompatibility。RegOpenKeyExA API用于检查服务是否存在,如下图所示:

图14

与FastUserSwitchingCompatibility服务关联的文件“C:\WINDOWS\system32\FastUserswitchingCompatibilityyex.dll”应该由正在运行的进程删除(该计算机上不存在):

图15

使用CreateServiceA API函数创建名为“FastUserSwitchingCompatibility”的新服务,该函数尝试模拟合法服务,服务的二进制路径为%SystemRoot%\System32\svchost.exe-k netsvcs(合法进程):

图16

如果调用成功,我们将看到如图17所示的注册表项。(此技术是回避技术的一部分)。攻击者将尝试模拟/使用主机上的合法系统二进制文件或库来隐藏恶意活动。这将使他们能够融入常规活动并保持隐藏状态。(有关棒棒糖的更多详细信息,请访问https://lolbas-project.github.io/).

图17

为了验证服务是否已成功创建,恶意进程尝试打开“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FastUserSwitchingCompatibility”(现在它存在,因为它对应于新创建的服务):

图18

使用RegCreateKeyA API在“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FastUserSwitchingCompatibility”下创建一个名为“Parameters”的新键。这将用于将恶意DLL注册为服务:

图19

该过程将在与初始可执行文件(在我们的示例中为Desktop)相同的目录中创建一个名为temp.bat的空文件。批处理文件的内容如下所示:

图20

批处理文件的目的是通过添加“ServiceDll”条目将位于“C:\WINDOWS\system32\FastUserSwitchingCompatibilityyex.DLL”的DLL注册为服务。文件“C:\WINDOWS\system32\FastUserSwitchingCompatibilityex.dll”目前不存在,但它是由恶意软件使用CreateFileA API创建的,如下所示(它将填充恶意代码,我们稍后会看到):

图21

“时间戳”是恶意参与者用来修改文件时间戳(例如创建/修改的时间戳)的技术,以避免对文件产生任何怀疑。在我们的示例中,DLL文件的创建和修改时间戳设置为2004年8月17日星期二晚上9:00:00:

图22

现在,前面创建的DLL文件使用WriteFile API填充了恶意代码。即使文件的路径看起来合法(从“C:\Windows\SysWOW64”目录运行),它也只是模拟一个合法的服务:

图23

值得一提的是,将DLL文件注册为服务是一种持久性机制。使用StartServiceA API启动新创建的服务,并将执行流传递给DLL导出函数ServiceMain:

图24

第二节

DLL文件

SHA256:ED6AD64DAD85FE11F3CC786C8DE1FB239115B94E30420860F02E820FFC53924

恶意软件执行的第一步是调用GetProcessWindowStation API,该API返回当前窗口站的句柄,然后使用OpenWindowStationA API打开交互式窗口站(“Winsta0”)。进程使用SetProcessWindowStation函数将指定的窗口站(“Winsta0”)分配给调用进程,该窗口站是唯一的交互式窗口站(服务应该是交互式的):

图25

与第一个示例中一样,该过程创建了一个不同的互斥体,名为“NetTravler Is Running!”。如果它存在,它将在不重新感染机器的情况下退出:

图26

现在它从第一个进程创建的配置文件config_t.dat中检索几个元素:WebPage、DownCmdTime、UploadRate、AutoCheck、UP和CheckedSuccess(此时不存在,因此函数返回0)。使用GetPrivateProfileString和GetPrivate ProfileInt API提取所有值:

图27
图28
图29
图30
图31
图32

因为我们使用x32dbg用来调试DLL文件的可执行文件来运行DLL,所以进程名称类似于“DLLLoader32_58D1.exe”(在我们的示例中)。恶意进程创建一个与可执行文件同名的.log文件(“DLLLoader32_58D1.log”):

图33

该文件枚举“C:\Program file(x86)”中的目录,并将输出复制到新创建的文件:

图34

RegOpenKeyExA API用于打开“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders”注册表项,并使用RegQueryValueEx从中提取“History”值。“历史记录”值的内容为“C:\Users\<Username>\AppData\Local\Microsoft\Windows\History”:

图35

恶意软件正在查找名为“C:\Users\<Username>\AppData\Local\Microsoft\Windows\History\Histori.IE5\index.dat”的文件,该文件包含Internet浏览历史活动,包括基于Internet的搜索和打开的文件:

图36

该过程使用RegQueryValueEx函数从“HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer”中提取“版本”值:

图37

Window 10的Internet Explorer是Build 916299,Version 9.11.16299.0,如下图所示:

图38

以下信息将附加到.log文件中:IE历史记录为空,因为Windows 10和IE版本中缺少该文件(请注意,“版本”一词是用中文“版”编写的):

图39

GetVersionExA函数用于查找当前操作系统。公认的版本有:Microsoft Windows 7、Microsoft Windows Vista、Microsoft Windows 2003、Microsoft Windows 2000、Microsoft Windows XP和Microsoft Windows NT:

图40

它还从“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ProductOptions”注册表项中提取“ProductType”值。在我们的系统中,该值等于“WinNT”:

图41

以下字符串将附加到.log文件:“操作系统版本” 翻译为“操作系统版本”:

图42

网络通信中使用的用户代理始终设置为“Mozilla/4.0(兼容;MSIE 6.0)”。还有一个Accept请求HTTP头,如下所示:

图43

进程尝试连接到http://www.microsoft.com/info/privacy_security.htm(此URL过去可用)以验证是否存在互联网连接。HTTP请求如图44所示:

图44

如果连接成功,将在.log文件的末尾添加以下字符串:

图45

此外,UP(使用代理指示符)设置为0,并使用WritePrivateProfileStringA API将名为CheckedSuccess(设置为1)的值添加到config_t.dat:

图46

现在,如果连接不成功,则会向DLLLLoader32_58D1.log写入一条“Method1 Fail!!!”消息。Process32First和Process32Next函数用于查找“EXPLORER.exe”进程,然后该进程尝试使用OpenProcess API打开它:

图47

基本上,攻击者的目的是通过调用OpenProcessToken来窃取“explorer.exe”进程的令牌,以打开与“exploger.exe”关联的访问令牌,然后使用ImpersonateLoggedOnUser函数模拟用户的安全上下文。函数调用分别显示在图48和图49中。

图48
图49

该过程使用RegOpenKeyExA打开“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Internet Settings”注册表项,然后提取“ProxyEnable”值以查看计算机是否使用代理服务器:

图50

同样的函数也用于从同一注册表项中获取“ProxyServer”(网络上代理服务器的主机名/IP)和“ProxyOverride”(绕过代理服务器的hostnames/IP)值。“ProxyServer”值的提取如下所示:

图51

与第一种方法一样,攻击者使用在注册表中找到的代理设置验证是否能够连接到同一URL。如果连接成功,它会将该页面的内容与一些新参数一起附加到.log文件中:

图52

此外,由于该方法有效,恶意进程通过设置UP=1、PF=10修改config_t.dat文件,然后根据找到的设置设置PS(代理服务器)、PP(代理端口)、PU(代理用户)、PW(代理密码)。如果连接失败,消息“Method3 Fail!!!!”将附加到.log文件中。Method4与上面介绍的Method3非常相似,我们不会详细解释。其中一个区别是,如果网络连接不成功,“Method4 Fail!!!!”消息会附加到.log文件中。

如果所有方法都失败,感染将停止,并执行以下操作(自行删除的恶意软件):“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FastUserSwitchingCompatibility\Enum”,“HKEY_LOCAL-MACHINE\SYSTEM\CurrenControlSet\ Services\Fast UserSwittingCompatibility \Parameters”,使用RegDeleteKeyA函数删除“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FastUserSwitchingCompatibility\Security”和“HKEY_LOCAL-MACHINE\SYSTEM\CurentControlSet\ Services\Fast UserSwittingCompatibility”注册表项。还删除了以下文件:“C:\WINDOWS\system32\enumfs.ini”、“C:\WINDOWS\system32 \dnlist.ini”,“C:\WINDOWS\system32.udidx.ini”、“C:\WINDOWS \system320\uenumfs.ini“和”C:\WINDOWS\systema32\stat_t.ini“(其中一些文件此时不存在)。

如果上面列举的方法之一有效,恶意进程将休眠60秒,然后创建另一个线程,我们将其称为Thread1,再休眠10秒,然后再创建Thread2。主线程将进入无限循环,直到在0x100163E8(绝对地址)找到的变量设置为3:

图53

Thread1活动

首先,线程使用GetVolumeInformationA函数检索与“C:\”目录关联的卷序列号(“A2C9-AD2F”)。此编号将用作与C2服务器通信的主机id,我们稍后将看到。此外,它还使用GetComputerNameA API查找计算机的NETBIOS名称,GetUserNameA API来查找与当前线程关联的用户名,gethostname API检索计算机的主机名,gethostbyname/inet_ntoa函数打印计算机的IP地址:

图54

再次检索“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ProductOptions”注册表项中的“ProductType”值,如图55所示:

图55

恶意进程枚举可用的磁盘驱动器,并对类型3驱动器(DRIVE_FIXED)感兴趣,如下面的屏幕截图所示:

图56

RegOpenKeyExA API用于打开“HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0”注册表项,然后RegQueryValueEx用于检索“VendorIdentifier”、“Identified”和“~MHz”值:

图57

该进程使用GlobalMemoryStatus函数获取有关系统物理内存和虚拟内存使用情况的信息。到目前为止提取的所有信息都将存储在一个名为“C:\Windows\SysWOW64\system_t.dll”的新文件中,以便对其进行过滤。提供了所有从中文到英文的翻译,以便更好地理解文件的内容:“信息”翻译为“计算机信息”、“数字”翻译为“计算机”,“名称”翻译为用户名,“Ip地址”翻译为“Ip地址”,“操作系统”翻译为“操作系统”,“磁盘空间”翻译为“磁盘空间”总磁盘空间为” 转换为“总磁盘空间为”剩余磁盘空间为” 转换为“剩余磁盘空间为”、“内容”转换为“占用”、“物理内存”、“总物理内存”和“可用内存”:

图58

使用Process32First和Process32Next API检索进程列表,如下所示:

图59

操作完成且恶意软件获得进程列表后,将其追加到system_t.dll(“工程”翻译为“进程列表”):

图60

下一步是使用CreatePipe API创建管道。这将用作进程间通信机制。它将创建一个新进程“ipconfig/all”,其中显示所有适配器的完整TCP/IP配置,输出将通过管道传输回原始进程:

图61

ipconfig进程的输出保存到system_t.dll,如下图所示:

图62

恶意软件使用GetPrivateProfileInt函数检查config_t.dat中的UP值。根据卡巴斯基的报告,system_t.dll文件的内容将使用基于Lempel-Ziv的自定义算法进行压缩,并使用修改后的Base64算法进行编码。负责此操作的函数和“修改的Base64”字母表如图63所示:

图63

编码数据通过对vipmailru[.]com(C2服务器)的GET请求进行过滤。URL中提供了以下参数:hostid=当前磁盘驱动器的序列号,hostname=主机名,hostip=机器的IP,filename=“travlerbackinfo-<年>-<月>-<日>-<小时>-<分钟>.dll”:

图64

如果服务器响应包含“Success:”,则exfiltering成功。恶意进程还使用DeleteFileA API删除system_t.dll。它使用包括“action=getcmd”和上面已经解释过的其他参数执行另一个GET请求(对同一C2服务器):

图65

查询结果必须在消息的开头包含“[CmdBegin]\r\n”,在消息的结尾包含“[CmdEnd]\r\n”。“边界”之间的消息保存在“C:\Windows\System32\stat_t.ini”,然后进程使用修改的参数“action=gotcmd”执行GET请求(同一C2服务器)以及之前使用的其他参数:

图66

如前所述,如果一切正常,则该文件将收到包含“Success”字符串的HTTP响应。该进程将删除一个名为“C:\Windows\SysWOW64\dnlist.ini”的文件,该文件此时不存在。将使用以下数据创建并填充该文件:

图67

使用DeleteFileA函数删除文件stat_t.ini,然后它调用GetACP API,该API返回操作系统的当前Windows ANSI代码页标识符。由于dnlist.ini中ScanAll的值为True,恶意软件使用GetLogicalDrives API扫描所有可用的磁盘驱动器,然后使用GetDriveTypeA API将其类型与3(DRIVE_FIXED)或4(DRIVE_REMOTE)进行比较:

图68

假设“C:\”是进程发现的第一个驱动器。该文件将枚举“C:\”驱动器中的所有文件和目录,目录名将保存为dn(其中n=1,2,3,…),文件名将存储为fn(其中n=1,2,3,..),以及文件计数(文件总数)和目录计数(目录总数)。所有描述的信息都将存储在一个名为“C:\Windows\SysWOW64\enumfs.ini”的新文件中:

图69

应用于“C:\”驱动器的操作是递归的,它应用于每个目录(所有信息都将附加到enumfs.ini)。在dnlist.ini中添加/修改了以下信息:

[枚举时间]
DateTime=扫描日期
[扫描列表]
ScanAll=假

enumfs.ini文件将像以前一样通过GET请求传输到C2服务器(压缩+编码)。filename参数的格式如下:“FileList-<月><日>-<小时><分钟><秒>.ini”:

图70

服务器响应应包含“Success:”。攻击者对以下类型的文件感兴趣:.doc、.docx、.xls、.xlsx、.txt、.rtf、.pdf(来自dnlist.ini文件的types参数)。恶意进程试图打开当前不存在的uenumfs.ini,然后枚举“C:\User<Username>\AppData\Local\Temp\ntvba00.tmp\”中的文件。该特定目录将由Thread2创建,并将包含已选择要导出到C2服务器的所有文件:

图71

现在,流程使用参数“action=getdata”再次联系C2服务器。它需要以下响应之一:“A2C9AD2F:UNINSTALL”、“A2C3AD2F:UPDATE”、“A2 C9AD2 F:RESET”或“A2 C9 AD2 F:UPLOAD”(请注意,“A2C9 AD2F”是前一段时间提取的卷序列号):

图72

案例1:(UNINSTALL)

使用RegDeleteKeyA API删除以下注册表项:“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FastUserSwitchingCompatibility\Enum”,“HKEY_LOCAL-MACHINE\SYSTEM\CurentControlSet\ Services\Fast UserSwitchingCompatibility \Parameters”,“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FastUserSwitchingCompatibility\Security”和“HKEY_LOCAL-MACHINE\SYSTEM\CurentControlSet\ Services\Fast UserSwittingCompatibility”。该进程还删除enumfs.ini、dnlist.ini、“C:\WINDOWS\system32\udidx.ini”、uenumfs.ini和stat_t.ini。下面显示了一个这样的调用:

图73

C2服务器通过使用“action=updated”参数执行GET请求,得知操作已完成:

图74

案例2:(更新)

如上所述删除相同的注册表项和文件。此外,还有一个使用“action=datasize”参数向命令和控制服务器发出的GET请求,HTTP响应应该包括“Success:”,前提是一切正常:

图75

恶意软件正试图从C2服务器下载名为updata.exe的文件(此文件不可用于分析,因为分析时C2服务器已关闭):

图76

下载文件的魔法字节与“MZ”(Windows中可执行DLL文件的格式)进行了比较,它也在寻找特定偏移量的“PE”字符串。下载的文件保存为“C:\Windows\install.exe”,并由恶意进程运行:

图77

再次执行图74中的相同请求,以便在每个新步骤中保持服务器处于循环中。

情况3:(重置)

将删除以下文件:enumfs.ini、dnlist.ini、“C:\WINDOWS\system32\udidx.ini”、uenumfs.ini和stat_t.ini。图74中显示的相同请求用于联系C2服务器(在任何情况下都要执行此步骤)。

案例4:(上传)

这种情况与情况2(UPDATE)相同,不同的是没有删除任何文件/注册表项。

执行流通过所有案例后,进程休眠60秒,然后返回循环。

线程2活动

RegisterClassA函数用于注册用于CreateWindow/CreateWindowEx调用的窗口类,它使用CreateWindowExA创建窗口(窗口类名为“NTMainWndClass”,0x80000000–WS_POPUP样式)。此外,RegisterClassA API调用(sub_10004535)中使用的窗口过程被调用了5次,如下所示(每种类型的消息调用一次):0x81(WM_NCCREATE)、0x83(WM_NCC REATE”)、0x01(WM_CREATE)、0x05(WM_SIZE)和0x03(WM_SZE)。我们还应该提到以下调用:ShowWindow(设置指定窗口的显示状态)、UpdateWindow(向窗口发送WM_PAINT消息)、GetMessage(从调用线程的消息队列获取消息)和TranslateMessage(将消息转换为字符消息):

图78

恶意软件对参数为DBT_DEVICEARRIVAL(0x8000)的WM_DEVICECHANGE(0x219)消息感兴趣,这意味着已插入新的USB驱动器或系统上安装了网络共享文件夹:

图79

从dnlist.ini解析的“USearch”和“UTypeLimit”值应设置为“True”,并且dnlist.iny中的“UAuto”值为“False”(这可能指示是否应自动过滤目标文件)。攻击者还对“类型”参数(目标扩展名)感兴趣,我们稍后会了解原因。其想法是扫描插入的每个设备以及主机上安装的网络共享,并在uenumfs.ini文件中创建“文件系统”结构(就像在Thread1中那样):

图80

与第一种情况一样,此搜索将递归地应用于驱动器上找到的每个目录。该进程创建一个“C:\Users\<Username>\AppData\Local\Temp\ntvba00.tmp\”目录,其属性设置为hidden。还创建了以下文件:“C:\Windows\SysWOW64\uenumfs.ini”(其内容类似于enumfs.ini):

图81

对于USB驱动器/网络共享上找到的每个文件,该过程会将其扩展名与前面提到的列表进行比较:.doc、.docx、.xls、.xlsx、.txt、.rtf、.pdf:

图82

让我们假设“C:\eula.1028.txt”(为了简单起见)是一个目标文件。恶意软件计算文件名和上次修改的时间戳组合的哈希(MD5)(请注意与MD5算法相对应的初始化变量):

图83
图84

函数完成后,以下结果将表示对应于eula.1028.txt文件的散列(唯一标识符):

图85

现在,“C:\eula.1028.txt”被复制到“C:\Users\<Username>\AppData\Local\Temp\ntvba00.tmp\U2007-11-07-12-00-5f7a78e7927532ba2a930ec8d47e252a.txt”(隐藏文件)–2007(年)、11(月)、07(日)、12(小时)、00(分钟),5f7a 78e7927.532ba 2a930 ec8d47 e252a是上面计算的哈希值(所有值都对应于上次修改的时间戳):

图86

该过程将创建“C:\Windows\SysWOW64\udidx.ini”文件,并将添加按照前面的说明计算的所有散列:

图87

新文件的上次修改时间戳设置为从初始文件中提取的值:

图88

复制所有文档相关文件后的udidx.ini文件示例如下图所示:

图89

最后,该文件使用DefWindowProcA API确保应用程序未处理的窗口消息具有默认处理功能(WM_DEVICECHANGE–0x219,DBT_DEVICEARRIVAL–0x8000):

图90

参考文献

卡巴斯基报告:https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2018/03/08080841/kaspersky-the-net-traveler-part1-final.pdf

VirusTotal链接:https://www.virustotal.com/gui/file/feca8db35c0c0a901556eff447c38614d14a7140496963df2e613b206527b338/detection(检测)

VirusTotal链接:https://www.virustotal.com/gui/file/ed6ad64dad85fe11f3cc786c8de1f5b239115b94e30420860f02e820ffc53924/检测

MSDN(MSDN):https://docs.microsoft.com/en-us/windows/win32/api/

FireEye:高级持久威胁组(APT组)

深色阅读:中国网络间谍在……之后转向俄罗斯(darkreading.com)

复杂性指标

C2域:vipmailru[.]com

SHA256:FECA8DB35C0C0A901556EFF447C38614D14A7140496963DF2E613B206527B338

SHA256:ED6AD64DAD85FE11F3CC786C8DE1FB239115B94E30420860F02E820FFC53924

Mutexes:“NetTravler正在运行!”、“立即安装服务!”

磁盘上的文件名:

%系统%\config_t.dat
%windir%\system32\enumfs.ini文件
%windir%\system32\dnlist.ini文件
%windir%\system32\udidx.ini文件
%windir%\system32\uenumfs.ini文件
%windir%\system32\stat_t.ini
%windir%\system32\system_t.dll文件
%windir%\install.exe
%温度%\ntvba00.tmp\
温度.bat