JohnChen은 Gary Nebbett이 작성한 자동 삭제 프로그램을 분석했습니다. 이는 매우 미묘한 코드 조각이지만 프로세스는 여전히 존재하지만 실행 파일이 삭제되었다는 점이 미묘합니다.
저도 얼마 전에 자가 삭제 코드를 작성했는데 그렇게 고급은 아니어서 그냥 일괄 처리 기능을 사용하고 프로그램 마지막에 함수를 호출해서 저를 삭제했습니다. 이제 함수 코드를 게시하십시오.
void SelfDelete()
{
static char templ[] =
":Repeatrn"
"del "%s"rn"
"if 존재하는 경우 "%s " goto Repeatrn"
"rmdir %s rn"
"del "%s"" ;
static const char tempbatname[] = "_uninsep.bat" ;
char 모듈 이름[MAX_PATH ] ;
문자 임시 경로[MAX_PATH] ;
문자 폴더[MAX_PATH] ;
GetTempPath(MAX_PATH, temppath) ;
strcat(temppath, tempbatname) ;
GetModuleFileName (NULL, 모듈 이름, MAX_PATH) ;
strcpy(폴더, 모듈 이름) ;
char *pb = strrchr(폴더, '\');
if (pb != NULL)
*pb = 0 ;
hf 처리 ;
hf = CreateFile(temppath, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) ;
if (hf != INVALID_HANDLE_VALUE)
{
DWORD len ;
char *bat ;
bat = (char*)alloca(strlen(templ) +
strlen(모듈 이름) * 2 + strlen( temppath) + 20) ;
wsprintf(bat, templ, 모듈 이름, 모듈 이름, 폴더, temppath) ;
WriteFile(hf, bat, strlen(bat), &len, NULL) ;
CloseHandle(hf) ;
ShellExecute(NULL, "open", temppath, NULL, NULL, SW_HIDE);
}
}