程式自刪除

2021-10-07 15:54:38 字數 2948 閱讀 9192

之所以可以使用批處理來實現檔案自刪除,是因為批處理有乙個特別的地方就是:批處理提供了自己刪除自己的命令:

del %

0

這個命令,批處理執行完後,就會把自身檔案刪除了,而且不放進**站。所以,有了這個關鍵技術作為前提,使用批處理方式實現程式的自刪除,就好理解了。

這樣,程序建立起來,執行批處理檔案。等批處理檔案延遲結束,這是,程式程序也已經結束,便可以刪除檔案了。

建立 choice 延時方式的批處理檔案:

bool createchoicebat

(char

*pszbatfilename)

;// 構造批處理內容

/* @echo off

choice /t 5 /d y /n >nul

del *.exe

del %0

*/::wsprintf

(szbat,

"@echo off\nchoice /t %d /d y /n >nul\ndel *.exe\ndel %%0\n"

, itime)

;// 生成批處理檔案

file *fp =

null

;fopen_s

(&fp, pszbatfilename,

"w+");

if(null

== fp)

fwrite

(szbat,(1

+::lstrlen

(szbat)),

1, fp)

;fclose

(fp)

;return true;

}

建立 ping 延時方式的批處理檔案:

bool createpingbat

(char

*pszbatfilename)

;// 構造批處理內容

/* @echo off

ping 127.0.0.1 -n 5

del *.exe

del %0

*/::wsprintf

(szbat,

"@echo off\nping 127.0.0.1 -n %d\ndel *.exe\ndel %%0\n"

, itime)

;// 生成批處理檔案

file *fp =

null

;fopen_s

(&fp, pszbatfilename,

"w+");

if(null

== fp)

fwrite

(szbat,(1

+::lstrlen

(szbat)),

1, fp)

;fclose

(fp)

;return true;

}

建立程序呼叫批處理:

bool delself

(int itype)

;char szbatfilename[max_path]=;

char szcmd[max_path]=;

// 獲取當前程式所在目錄

::getmodulefilename

(null

, szcurrentdirectory, max_path)

;char

*p =

strrchr

(szcurrentdirectory,

'\\');

p[0]

='\0'

;// 構造批處理檔案路徑

::wsprintf

(szbatfilename,

"%s\\temp.bat"

, szcurrentdirectory)

;// 構造呼叫執行批處理的 cmd 命令列

::wsprintf

(szcmd,

"cmd /c call \"%s\""

, szbatfilename)

;// 建立自刪除的批處理檔案if(

0== itype)

elseif(

1== itype)

// 建立新的程序, 以隱藏控制台的方式執行批處理

if(bret)

; process_information pi;

si.cb =

sizeof

(si)

;//指定wshowwindow成員有效

si.dwflags = startf_useshowwindow;

//此成員設為true的話則顯示新建程序的主視窗

si.wshowwindow = false;

bool bret =

createprocess

(//不在此指定可執行檔案的檔名

null

,//命令列引數

szcmd,

//預設程序安全性

null

,//預設程序安全性

null

,//指定當前程序內控制代碼不可以被子程序繼承

false,

//為新程序建立乙個新的控制台視窗

create_new_console,

//使用本程序的環境變數

null

,//使用本程序的驅動器和目錄

null

,&si,

&pi);if

(bret)

}return bret;

}

main 函式;

int

_tmain

(int argc, _tchar* ar**)

else

system

("pause");

return0;

}

執行後自刪除程式

當乙個可執行程式exe在執行過程中,程式檔案無法刪除,這是因為系統將每個正在執行的程式對應的硬碟檔案 對映到記憶體,即虛擬記憶體,要實現自刪除,關鍵一點在程式退出前將程式從記憶體對映中解放出來,然後 再呼叫檔案操作函式刪除程式檔案!typedef int winapi pfclose lpvoid ...

delphi 程式自刪除函式 DeleteMe

delphi 程式自刪除函式 deleteme 德州行業網 procedure deleteme varbatchfile textfile batchfilename string processinfo tprocessinformation startupinfo tstartupinfo b...

EXE程式的自刪除實現

程式的自刪除已經不是什麼新鮮的話題了,它廣泛運用於木馬 病毒中。試想想,當你的程式還在執行中 通常是完成了駐留 感染模組 它就自動地把自己從磁碟中刪掉,這樣一來,就做到了神不知鬼不覺,呵呵,是不是很cool呢?自刪除 self deleting 最早的方法是由 gary nebbett 大蝦寫的,太...