麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > Java > 正文

一種巧妙的刪除程序自己的方法

2019-09-06 23:33:21
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

                    近日看到網(wǎng)友詢問(wèn)如何實(shí)現(xiàn)程序運(yùn)行之后把自己刪除的方法,不知大家對(duì)木馬甚么的興趣實(shí)在太濃,還是想要這樣的效果:用戶只要一運(yùn)行程序,可執(zhí)行文件就沒(méi)有了,可是程序還是在跑,膽小的只怕要喊"鬼呀!","老婆,快出來(lái)看上帝"甚么的
。其實(shí)最典型的用法是寫反安裝程序. 閑來(lái)無(wú)事,Bear掰到一種還算巧妙的“刪除自己”的方法。
 
大家都知道,一般的程序運(yùn)行的時(shí)候,可執(zhí)行文件本身是被操作系統(tǒng)保護(hù)的,不能用改寫的方式訪問(wèn),更別提在本身還在運(yùn)行的時(shí)侯刪除自己了。在Lu0的主頁(yè)上看到一種UNDOCUMENT的方法,通過(guò)改變系統(tǒng)底層的文件訪問(wèn)模式實(shí)現(xiàn)刪除自己,那是實(shí)在功夫。我看了很是佩服。但是有沒(méi)有一種用在MSDN上就能查到的函數(shù)實(shí)現(xiàn)呢?有!Jeffrey Richter給我們做了一個(gè)范例:
 
DeleteMe.CPP
 
Module name: DeleteMe.cpp
Written by: Jeffrey Richter
Description: Allows an EXEcutable file to delete itself
**************************************************/
 
#include <Windows.h>
#include <stdlib.h>
#include <tchar.h>
 
/////////////////////////////////////////////////
 
int WINAPI WinMain(HINSTANCE h, HINSTANCE b, LPSTR psz, int n) {
 
// Is this the Original EXE or the clone EXE?
// If the command-line 1 argument, this is the Original EXE
// If the command-line >1 argument, this is the clone EXE
 
if (__argc == 1) {
 
// Original EXE: Spawn clone EXE to delete this EXE
// Copy this EXEcutable image into the user's temp directory
 
TCHAR szPathOrig[_MAX_PATH], szPathClone[_MAX_PATH];
GetModuleFileName(NULL, szPathOrig, _MAX_PATH);
GetTempPath(_MAX_PATH, szPathClone);
GetTempFileName(szPathClone, __TEXT("Del"), 0, szPathClone);
CopyFile(szPathOrig, szPathClone, FALSE);
 
//***注意了***:
// Open the clone EXE using FILE_FLAG_DELETE_ON_CLOSE
HANDLE hfile = CreateFile(szPathClone, 0, FILE_SHARE_READ, NULL, OPEN_EXISTI
NG, FILE_FLAG_DELETE_ON_CLOSE, NULL);
 
// Spawn the clone EXE passing it our EXE's process handle
// and the full path name to the Original EXE file.
TCHAR szCmdLine[512];
HANDLE hProcessOrig = OpenProcess(SYNCHRONIZE, TRUE, GetCurrentProcessId());

wsprintf(szCmdLine, __TEXT("%s %d "%s""), szPathClone, hProcessOrig, szPat
hOrig);
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
CreateProcess(NULL, szCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
CloseHandle(hProcessOrig);
CloseHandle(hfile);
 
// This original process can now terminate.
} else {
 
// Clone EXE: When original EXE terminates, delete it
HANDLE hProcessOrig = (HANDLE) _ttoi(__targv[1]);
WaitForSingleObject(hProcessOrig, INFINITE);
CloseHandle(hProcessOrig);
DeleteFile(__targv[2]);
// Insert code here to remove the subdirectory too (if desired).
 
// The system will delete the clone EXE automatically
// because it was opened with FILE_FLAG_DELETE_ON_CLOSE
}
return(0);
}
 
看懂了嗎?
 
這一段程序思路很簡(jiǎn)單:不是不能在運(yùn)行時(shí)直接刪除本身嗎?好,那么程序先復(fù)制(CLONE)一個(gè)自己,用復(fù)制品起動(dòng)另一個(gè)進(jìn)程,然后自己結(jié)束運(yùn)行,則原來(lái)的EXE文件不被系統(tǒng)保護(hù).這時(shí)由新進(jìn)程作為殺手刪除原來(lái)的EXE文件,并且繼續(xù)完成程序其他的功能。

 
新進(jìn)程在運(yùn)行結(jié)束后,復(fù)制品被自動(dòng)刪除。這又是值得介紹的一個(gè)把戲了,注意:
// Open the clone EXE using FILE_FLAG_DELETE_ON_CLOSE
HANDLE hfile = CreateFile(szPathClone, 0, FILE_SHARE_READ, NULL,OPEN_EXISTIN
G, FILE_FLAG_DELETE_ON_CLOSE, NULL);
這里面的FILE_FLAG_DELETE_ON_CLOSE標(biāo)志,這個(gè)標(biāo)志是告訴操作系統(tǒng),當(dāng)和這個(gè)文件相關(guān)的所有句柄都被關(guān)閉之后(包括上面這個(gè)CREATEFILE創(chuàng)建的句炳),就把這個(gè)文件刪除。幾乎所有的臨時(shí)文件在創(chuàng)建時(shí),都指明了這個(gè)標(biāo)志。
另外要注意的是:在復(fù)制品進(jìn)程對(duì)原始程序操刀之前,應(yīng)該等待原進(jìn)程退出.在這里用的是進(jìn)程同步技術(shù).用HANDLE hProcessOrig = OpenProcess(SYNCHRONIZE, TRUE,GetCurrentProcessId());得到原進(jìn)程句柄.SYNCHRONICE標(biāo)志在NT下有效,作用是使OpenProcess得到的句柄可以做為同步對(duì)象.復(fù)制品進(jìn)程用WaitForSingleObject函數(shù)進(jìn)行同步,然后一個(gè)DeleteFile,以及進(jìn)行其它銷毀證據(jù)(Jeffrey說(shuō):比如刪目錄)的工作,打完收工!
 
程序是基于CONSOLE的,通過(guò)傳入的參數(shù)確定是原始的進(jìn)程還是復(fù)制品新進(jìn)程,并且得到需要操作的目標(biāo)文件的信息(主要是路徑),復(fù)制品放在系統(tǒng)的TEMP目錄(GetTempPath得到),你也可以隨便找個(gè)你認(rèn)為安全的地方(比如:WINDOWSSYSTEM32等等)。
這里面沒(méi)有甚么深的技術(shù).再看其他的一些實(shí)現(xiàn)刪除自己的例子,比如說(shuō)在進(jìn)程退出前,用fwrite等方法輸出一個(gè).BAT文件,在里面寫幾句DEL,然后WINEXEC一下這個(gè)BAT文件即可.
玩兒過(guò)DOS的蟲蟲大多都會(huì)。今天又學(xué)一招,爽。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 久久逼逼| 欧美精品在线免费观看 | 亚洲九九色 | 少妇的肉体k8经典 | 福利在线小视频 | 精品一区二区三区毛片 | 成人免费毛片在线观看 | 日韩黄色av网站 | 免费在线观看一级片 | 久久日本 | 91 在线免费观看 | 久久久久久久一区二区三区 | 欧美日韩免费一区二区三区 | 操毛片| 天天草夜夜骑 | 久草在线最新免费 | 蜜桃av鲁一鲁一鲁一鲁 | 亚洲第一页视频 | 日韩av电影免费看 | 午夜视频你懂的 | 成熟女人特级毛片www免费 | 电影一级毛片 | 欧美 日韩 亚洲 中文 | 性欧美视频在线观看 | 羞羞电影在线观看 | 国产精品久久久久av | 欧美一级毛片欧美一级成人毛片 | 日本xxxx视频 | 久久久久久久一区 | 久久精品中文字幕一区二区三区 | 国产精品一区网站 | 成人免费观看49www在线观看 | 国产呻吟| 免费高潮在线国 | 毛片在线免费观看完整版 | 欧美18一12sex性处hd | 91精品最新国内在线播放 | 成人免费乱码大片a毛片视频网站 | 黄网站免费在线看 | 在线观看国产一区二区 | 色婷婷久久久久久 |