前言 可能大家想到病毒
第一反應就是可能是用asm來編寫
或者是vbsript
而高級語言如delphi就好象不能編寫一樣
其實事實並不是這個樣子的
只要我們花一些時間
照樣可以寫出簡短而高效的病毒程序來
一點也不輸那些用匯編寫出來的程序哦
一個病毒程序首先要短小
我們的目標是經過壓縮後控制在
k以下
用過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
// 一般設置為
DWORD dwType
// 我們寫的鍵的類型
字符串為REG_SZ
CONST BYTE *lpData
// 鍵值的地址
DWORD cbData // 寫入的鍵值的長度
);
[] []
From:http://tw.wingwit.com/Article/program/Delphi/201311/24755.html