总结
在这篇博客文章中,我们将详细分析与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