Автор работы: Пользователь скрыл имя, 28 Декабря 2010 в 13:28, курсовая работа
Цель
1. Анализ семейства вирусов Email-Worm.VBS.LoveLetter.
2. Реализация эвристического анализатора семейства вирусов Email-Worm.VBS.LoveLetter
Задача
1. Проанализировав семейство вирусов Email-Worm.VBS.LoveLetter выделить классы эвристик
2. Реализовать эвристический анализатор методом нечеткого логического вывода Цукамота в программной среде Microsoft Visual C++ 6.0.
Введение 3
Цель 4
Задача 4
1 Семейство вирусов Email-worm.VBS.LoveLetter 5
1.1 Общее описание 5
1.2 Описание модификаций вируса 7
1.2.1 LoveLetter.A 7
1.2.2 LoveLetter.B 8
1.2.3 LoveLetter.C 9
1.2.4 LoveLetter.E 9
2 Метод нечеткого вывода Цукамото 10
2.1 Основные понятия 10
2.2 Алгоритм Цукамото 17
3 Реализация эвристического анализатора методом нечеткого вывода Цукамото 18
3.1 Эвристики семейства вирусов Email-worm.VBS.LoveLetter 18
3.2 Реализация 19
Заключение 37
Библиографический список 38
Центр
площади равен y=u, где значение u определяется
из уравнения:
Алгоритм Цукамото представляет из себя следующие этапы:
Перед тем как начать реализацию эвристического анализатора необходимо выделить эвристики семейства вирусов Email-worm.VBS.LoveLetter
Эвристики
интернет червь Email-worm.VBS.
Наличие ключей реестра:
Отсутствие ключей в реестра:
Эвристический анализатор методом нечеткого логического вывода Цукамото был реализован с помощью Microsoft Visual C++ 6.0.
В начале, необходимо сформировать базу правил.
База правил:
Правило №1: Если наличие определенных строк низкое, то вируса нет
Правило №2: Если наличие определенных строк среднее, то вирус скорее всего есть
Правило №3: Если наличие определенных строк высокое, то вирус есть
Правило №4: Если наличие определенных ключей в реестре низкое, то вирус нет
Правило №5: Если наличие определенных ключей в реестре среднее, то вирус скорее всего есть
Правило №6: Если наличие определенных ключей в реестре высокое, то вирус есть
Правило №7: Если наличие определенных файлов низкое, то вируса нет
Правило №8: Если наличие определенных файлов среднее, то вирус скорее всего есть
Правило №9: Если наличие определенных файлов высокое, то вируса есть.
Функция поиска определенных файлов
int poisk_f(char *str1,char *put, int temp)
{
WIN32_FIND_DATA ger; char *str2;
str2=str1;
HANDLE
hSearch1=FindFirstFile(put,&
str1=ger.cFileName;
temp=strcmp(str1, str2);
if (temp==0) return temp;
while(FindNextFile(
{
str1=ger.cFileName;
temp=strcmp(str1, str2);
if(temp==0) return temp;
}
if (temp!=0) return 1;
}
В качестве параметра str1 передаем имя файла, который надо найти. В качестве параметра Put передаем путь до каталога, в котором может находится файл, который надо найти.
Если файл будет найден, то функция возвращает значение равное 0.
Функция поиска ключа в реестре.
int poisk_reg(char *str1,char *put, int temp)
{ HKEY hKey = HKEY_LOCAL_MACHINE;
char lpValueName[255]; DWORD lpType; LPBYTE lpData; DWORD lpcbData;
DWORD lpcValueName; HKEY key;
LPCTSTR lpSubKey =put;
char *str2;
str2=str1;
RegOpenKeyEx(hKey,lpSubKey,0,
for(int i = 0;i<12; i++)
{ RegEnumValue(key,int(i),
&lpcbData);
str1=lpValueName;
temp=strcmp(str1, str2);
if (temp==0) return temp;
}
}
В качестве параметра str1 передаем параметр, который надо найти. В качестве параметра Put передаем путь к ключу реестра, в котором может параметр, который надо найти.
Если ключ будет найден, то функция возвращает значение равное 0.
Функция объединения
int obied(float masX[1000], float masY[1000], int temp, int n, int m)
{ for (int i=0;i<n;i++)
{ for(int j=i+1;j<m;j++)
{ if(masX[i]!=masX[j]) masX[i]=masX[i];
Else
{ if(masY[i]>=masY[j])
{ masY[i]=masY[i]; temp=temp+1;}
else { masY[i]=masY[j]; temp=temp+1;}
}
}
}
return temp;
}
В качестве параметра masX[] передаются значения Х из двух нечетких множеств, полученных после этапа активизации. В качестве параметра masY[] передаются значения Y из двух нечетких множеств, полученных после этапа активизации. В качестве параметра n передается количество значений первого нечеткого множества. В качестве параметра m передается количество значений второго нечеткого множества.
Функция возвращает 0, если значения нечетких множеств были не объединены, то есть все значения у множеств были различны.
Функция записи из файла в массив
int zapic(char *p1,float masX[1000],float masY[1000])
{ float x,y; FILE *t1;int i=0; t1=fopen(p1,"r");
while(!feof(t1))
{ fscanf(t1,"%f %f", &x,&y); masX[i]=x; masY[i]=y; i++;}
i--; return i;
}
В качестве параметра р1 передается имя файла, в котором хранятся значения нечеткого множества. В качестве параметра masX[] передается массив для записи значений X. В качестве параметра masY[] передается массив для записи значений Y.
Функция записывает в массивы значения из файла и возвращает количество значений нечеткого множества.
Функция записи массивов в файл
void zapic2(char *p1,int temp,float masX[1000],float masY[1000],int n, int m)
{ FILE *t3; t3=fopen(p1,"w");
if (temp==0)
{ for(int i=0;i<m; i++) fprintf(t3,"%.0f %.2f\n", masX[i],masY[i]); }
Else
{ for(int i=0;i<n; i++) fprintf(t3,"%.0f %.2f\n", masX[i],masY[i]);}
fclose(t3);
}
В качестве параметра р1 передается имя файла, в котором хранятся значения нечеткого множества. В качестве параметра masX[] передается массив для записи значений X. В качестве параметра masY[] передается массив для записи значений Y. В качестве параметра temp передается значение, полученное функций объединения. В качестве параметра n передается значение, полученное функцией записи первого нечеткого множества. В качестве параметра m передается значение, полученное функций записи второго нечеткого множества.
Функция для нахождения конкретного значения соответствующего значения терма входных и выходных переменных по формуле треугольной функции принадлежности .
float treyg_func(float x , int a, int b, int c)
{ float y=0 ; if (x<=a ) y=0;
else
{ if ((x>a) && (x<=b)) y=(x-a)/(b-a);
else
{ if ((x>b) && (x<c)) y=(c-x)/(c-b);
else
{ if(x>=c) y=0;
}
}
}
return y;
}
В качестве параметра Х передается значение терма. В качестве a передается начальное значение интервала. В качестве с передается конечное значение интервала. В качестве b передается число, являющееся серединой интервала [a,c]
Процедура создания треугольной функции принадлежности для терма входных и выходных переменных
void sozd(FILE *t1, float x, int a,int b, int c,)
{ float y=0;
for (int i=x;i<c;i++)
{ y=treyg_func(x,a,b,c);
fprintf(t1,"%.0f %.2f \n",x,y);
x=x+1;
}
}
В качестве параметра Х передается значение терма. В качестве a передается начальное значение интервала. В качестве с передается конечное значение интервала. В качестве b передается число, являющееся серединой интервала [a,c]
Функция фаззификации
float fazific(int a, int b, int c, char *p1, char *p2)
{ FILE *t1; FILE *t4; FILE *t5; float x,y,f1;
t1=fopen(p1,"r");
for(int i=0; i<(a+1);i++) fscanf(t1,"%f %f",&x,&y);
f1=y;
t4=fopen("f4.txt","r");
t5=fopen(p2,"w");
for (i=0;i<b;i++) fscanf(t4,"%f %f",&x,&y);
for (i=b;i<c;i++)
{ fscanf(t4,"%f %f",&x,&y);
fprintf(t5,"%.0f %.2f\n",x,y);
}