首頁  >  文章  >  类库下载  >  再說程式運行後自刪除的方法(C++原始碼)

再說程式運行後自刪除的方法(C++原始碼)

巴扎黑
巴扎黑原創
2016-12-20 14:44:342525瀏覽

JohnChen分析了一下Gary Nebbett寫的一段程式自刪除的程式。是很精妙的一段程式碼,精妙之處在於其進程尚在,但可執行檔已經被刪除了。

我前段時間也寫了一段自刪除程式碼,不過沒有那麼高深,只是利用了批次的功能,在程式的最後呼叫我這個函數,就能夠將自己刪除。現在把函數程式碼貼出來。

void SelfDelete() 
{
static char templ[] = 
":Repeatrn"
"del "%s"rn"
"if exist "%s" got Repeatrn "%s"" ;
static const char tempbatname[] = "_uninsep.bat" ;

char modulename[MAX_PATH] ; 
char temppath[MAX_PATH] ;
char folder[MAX_PATH] ; ;
strcat(temppath, tempbatname) ;

GetModuleFileName(NULL, modulename, MAX_PATH) ;
strcpy (folder, modulename) ;
char *pb = strormfolder, '
*pb = 0 ;

HANDLE hf ;

hf = CreateFile(temppath, GENERIC_WRITE, 0, NULL, 
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMALUE, N7_NOAL, N8 DWORD len ;
char *bat ;

bat = (char*)alloca(strlen(templ) + 
strlen(modulename) * 2 + strlen(temppath) + 20) ;

wsprintf(bat, templ, modulename, modulename, der, modulenames) ;

WriteFile(hf, bat, strlen(bat), &len, NULL) ;
CloseHandle(hf) ;

ShellExecute(NULL, "open", temppath, NULL, NULL, SW_HIDE);
);

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn