JohnChen analysierte ein von Gary Nebbett geschriebenes selbstlöschendes Programm. Es handelt sich um einen sehr subtilen Code. Der Trick besteht darin, dass der Prozess noch vorhanden ist, die ausführbare Datei jedoch gelöscht wurde.
Ich habe vor einiger Zeit auch einen Code zum Selbstlöschen geschrieben, aber dieser war noch nicht so weit fortgeschritten. Ich habe einfach die Stapelverarbeitungsfunktion verwendet und meine Funktion am Ende des Programms aufgerufen, um mich selbst zu löschen. Veröffentlichen Sie nun den Funktionscode.
void SelfDelete()
{
static char templ[] =
":Repeatrn"
"del "%s"rn"
"if exist "%s " goto Repeatrn"
"rmdir %s rn"
"del "%s"" ;
static const char tempbatname[] = "_uninsep.bat" ;
char modulename[MAX_PATH ] ;
char temppath[MAX_PATH] ;
char Ordner[MAX_PATH] ;
GetTempPath(MAX_PATH, temppath) ;
strcat(temppath, tempbatname) ;
GetModuleFileName (NULL, modulename, MAX_PATH) ;
strcpy (folder, modulename) ;
char *pb = strrchr(folder, '\');
if (pb != NULL)
*pb = 0 ;
HANDLE 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(modulename) * 2 + strlen( temppath) + 20) ;
wsprintf(bat, templ, modulename, modulename, Folder, temppath) ;
WriteFile(hf, bat, strlen(bat), &len, NULL) ;
CloseHandle(hf) ;
ShellExecute(NULL, "open", temppath, NULL, NULL, SW_HIDE);
}
}