国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 軟件教程 > 正文

EXE程序的自刪除實現

2020-07-18 16:11:44
字體:
來源:轉載
供稿:網友

程序的自刪除已經不是什么新鮮的話題了,它廣泛運用于木馬、病毒中。試想想,當你的程序還在運行中(通常是完成了駐留、感染模塊),它就自動地把自己從磁盤中刪掉,這樣一來,就做到了神不知鬼不覺,呵呵,是不是很cool呢?

自刪除(Self Deleting)最早的方法是由 Gary Nebbett 大蝦寫的,太經典了,不能不提。程序如下:

#include "windows.h"int main(int argc, char *argv[]){char buf[MAX_PATH];HMODULE module;module = GetModuleHandle(0);GetModuleFileName(module, buf, MAX_PATH);CloseHandle((HANDLE)4);__asm {lea eax, bufpush 0push 0push eaxpush ExitProcesspush modulepush DeleteFilepush UnmapViewOfFileret}return 0;}

試試編譯它,運行。怎么樣?從你的眼皮底下消失了吧?是不是很神奇?

Gary Nebbett 鉆了系統的一個漏洞,他的程序是關閉了 exe 文件的 IMAGE(硬編碼為4),然后用 UnmapViewOfFile 解除了 exe 文件在內存中的映象,接著通過堆棧傳遞當前程序的 Handle 給 DeleteFile() ,實現了程序的自刪除。

Gary Nebbett 果然不愧為 WIN 系統下頂尖的底層高手。那么是否還有其他的方法實現程序的自刪除呢?答案是肯定的。

在 Win9x/ME 下,還可以利用 WININIT.INI 的一些特性。在 WININIT.INI 文件里面有一個節 [Rename] ,只要在里面寫入要 “Nul=要刪除的文件”,那么下次系統重新啟動的時候,該文件就會被自動刪除了。以下是一個例子:

[Rename]NUL=c:/SelfDelete.exe

利用這個特性,我們就可以在程序中對這個 ini 文件進行操作。值得注意的是,當需要自刪除的文件多于一個的時候,就不能使用 WritePrivateProfileString 來實現,因為這個 API 會阻止多于一個“NUL=”這樣的入口在同一個節里面出現,所以最好還是自己手動實現。

第三種方法是利用批處理文件。先讓我們做一個試驗:

創建一個 a.bat ,給它寫入以下內容:

del %0.bat

現在運行它吧,屏幕一閃而過,最后留下一串字符:“The batch file cannot be found”。這時候它已經從你的硬盤中消失了。

這說明,批處理文件是可以刪除自己的,于是我們可以把這個小技巧運用在自己的程序當中:

:Repeatdel "C:/MYDIR/SelfDelete.exe"if exist "SelfDelete.exe" goto Repeatrmdir "C:/MYDIR"del "/DelUS.bat"

它會重復不斷地搜索是否有 SelfDelete.exe 這個文件,直到刪除了它為止;當刪除完畢后,這個批處理文件就會把自己刪除。
(注:本方法可以支持所有的 Windows 版本,即 Win9x/Me/NT/2000/XP)

用批處理文件的方法有一個缺陷,就是會突然彈出一個 DOS 窗,冷不防的嚇人一跳,不過據我所知這是目前唯一可以在 WinXP 下起作用的方法。當然,最理想的方法是用 Gary Nebbett 的那種,不過它的缺陷是沒法在 WinXP 下起作用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 樟树市| 合水县| 辽宁省| 五台县| 长泰县| 永平县| 大邑县| 姜堰市| 旅游| 县级市| 洛扎县| 玉环县| 郧西县| 象州县| 晋宁县| 石嘴山市| 黎平县| 正安县| 偏关县| 华安县| 永州市| 翁牛特旗| 大名县| 栖霞市| 平利县| 遂川县| 金堂县| 大兴区| 东海县| 沭阳县| 闵行区| 郴州市| 黄龙县| 辰溪县| 任丘市| 双流县| 双流县| 林西县| 仪征市| 白城市| 青田县|