用C 實現(程式自殺)

2021-04-25 11:43:28 字數 1617 閱讀 4153

近日看到網友詢問如何實現程式執行之後把自己刪除的方法,使用者只要一執行程式,可執行檔案就沒有了,可是程式還是在跑,膽小的只怕要喊"鬼呀!","老婆,快出來看上帝"甚麼的。其實最典型的用法是寫反安裝程式.   閒來無事,查到一種還算巧妙的「刪除自己」的方法。  

大家都知道,一般的程式執行的時候,可執行檔案本身是被作業系統保護的,不能用改寫的方式訪問,更別提在本身還在執行的時侯刪除自己了。在lu0的主頁上看到一種undocument的方法,通過改變系統底層的檔案訪問模式實現刪除自己,那是實在功夫。我看了很是佩服。但是有沒有一種用在msdn上就能查到的函式實現呢?有! 下面做乙個範例:     

#include  

#include  

#include  

/  

int   winapi   winmain(hinstance   h,   hinstance   b,   lpstr   psz,   int   n)  

else  

return(0);   

}  

看懂了嗎?  

這一段程式思路很簡單:不是不能在執行時直接刪除本身嗎?好,那麼程式先複製(clone)乙個自己,用複製品起動另乙個程序,然後自己結束執行,則原來的exe檔案不被系統保護.這時由新程序作為殺手刪除原來的exe檔案,並且繼續完成程式其他的功能。  

新程序在執行結束後,複製品被自動刪除。這又是值得介紹的乙個把戲了,注意:  

//   open   the   clone   exe   using   file_flag_delete_on_close  

handle   hfile   =   createfile(szpathclone,   0,   file_share_read,   null,open_existing,   file_flag_delete_on_close,   null);  

這裡面的file_flag_delete_on_close標誌,這個標誌是告訴作業系統,當和這個檔案相關的所有控制代碼都被關閉之後(包括上面這個createfile建立的句炳),就把這個檔案刪除。幾乎所有的臨時檔案在建立時,都指明了這個標誌。  

另外要注意的是:在複製品程序對原始程式操刀之前,應該等待原程序退出.在這裡用的是程序同步技術.用  

handle   hprocessorig   =   openprocess(synchronize,   true,getcurrentprocessid());  

得到原程序控制代碼.synchronice標誌在nt下有效,作用是使openprocess得到的控制代碼可以做為同步物件.複製品程序用waitforsingleobject函式進行同步,然後乙個deletefile,以及進行其它銷毀證據(jeffrey說:比如刪目錄)的工作,打完收工!  

程式是基於console的,通過傳入的引數確定是原始的程序還是複製品新程序,並且得到需要操作的目標檔案的資訊(主要是路徑),複製品放在系統的temp目錄(gettemppath得到),你也可以隨便找個你認為安全的地方(比如:windows/system32等等)。  

這裡面沒有甚麼深的技術.再看其他的一些實現刪除自己的例子,比如說在程序退出前,用fwrite等方法輸出乙個.bat檔案,在裡面寫幾句del,然後winexec一下這個bat檔案即可.玩兒過dos的蟲蟲大多都會。

Delphi實現程式自銷毀(自殺)

unit unit1 inte ce uses windows,messages,sysutils,classes,graphics,controls,forms,dialogs,stdctrls type tform1 class tform button1 tbutton procedure d...

VC 程式自殺

原文在這裡 有時候,我們需要建立乙個執行後能夠自己刪除自己的可執行程式即自刪除檔案。很明顯如果乙個程序通過直接呼叫deletefile 來刪除自己是不可能的。必須另想辦法,經過本人在網上參考很多資料後實際測試並集眾家之所長,發現有二種方法效果比較好。現在將其封裝成函式,這樣使用將更加容易 方法1,呼...

利用C語言實現自殺環

執行環境 win10,vs2013 約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3 n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始從1報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到剩餘乙個人 linklist.c include i...