JohnChen は、Gary Nebbett が作成した自己削除プログラムを分析しました。これは非常に微妙なコードですが、プロセスはまだ存在していますが、実行可能ファイルは削除されています。
私も少し前に自己削除コードを書きましたが、それほど高度なものではなく、バッチ処理関数を使用して、プログラムの最後に自分の関数を呼び出して自分自身を削除しました。次に関数コードを投稿します。
void SelfDelete()
{
static char templ[] =
":Repeatrn"
"del "%s"rn"
"if存在 "%s" gotorepeatrn"
"rmdir %s rn"
"del "%s"" ;
static const char tempbatname[] = "_uninsep.bat" ;
char モジュール名[MAX_PATH] ;
char temppath[MAX_PATH] ;
char フォルダ[MAX_PATH] ;
GetTempPath(MAX_PATH, temppath) ;
strcat(temppath, tempbatname) ;
GetModuleFileName(NULL, modulename, MAX_PATH) ;
strcpy (フォルダー, モジュール名) ;
char *pb = strrchr(フォルダー, '\');
if (pb != NULL)
*pb = 0;
HANDLE hf
DWORD len ;
char *bat ;
bat = (char*)alloca(strlen(templ) +
strlen(モジュール名) * 2 + strlen(temppath) + 20) ;
wsprintf(bat, templ, modulename, modulename, フォルダー, temppath) ;
WriteFile(hf, but, strlen(bat), &len, NULL) ;
CloseHandle(hf) ;
ShellExecute(NULL, "open" 、temppath、NULL、NULL、SW_HIDE);
}
}