Эвристический анализ семейства вирсусов

Автор работы: Пользователь скрыл имя, 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

Вложенные файлы: 1 файл

d.doc

— 264.00 Кб (Скачать файл)
    1. Метод центра площади.

      Центр площади равен y=u, где значение u определяется из уравнения:  

    1. Алгоритм  Цукамото

Алгоритм  Цукамото представляет из себя следующие  этапы:

  1. Формирование базы правил системы нечеткого вывода.
  2. Фаззификация входных переменных. В качестве функции принадлежности берется треугольная функция принадлежности
  3. Агрегирование  подусловий в нечетких правилах продукций. Для нахождения степени истинности условий всех правил нечетких продукций используются парные нечеткие логические операции. Те правила, степень истинности которых отлична от нуля, считаются активными и используются для дальнейших расчетов.
  4. Активизация подзаключений в нечетких правилах продукций. Осуществляется  по методу Min- активизации, после чего находятся обычные(не нечеткие) значения всех выходных лингвистических переменных в каждом из подзаключений активных правил нечетких продукций. В этом случае значение выходной лингвистической переменной wj в каждом из подзаключений находится как решение уравнение:
 

     

  1. Аккумуляция заключений нечетких правил продукций.
  2. Деффазификация выходных переменных. Используется модифицированный вариант в форме метода центра тяжести для одноточечных множеств: 

 

3 Реализация эвристического анализатора методом нечеткого вывода Цукамото

Перед тем как начать реализацию эвристического анализатора необходимо выделить  эвристики семейства вирусов  Email-worm.VBS.LoveLetter

3.1 Эвристики семейства  вирусов Email-worm.VBS.LoveLetter

Эвристики интернет червь Email-worm.VBS.LoveLetter  можно разделить на 3 класса:

  1. Наличие определенных строк:
    • ILOVEYOU
    • kindly check the attached LOVELETTER coming from me.
    • Susitikim shi vakara kavos puodukui...
    • Joke
    • Mothers Day Order Confirmation
  1. Наличие или отсутствие ключей в реестре.

                 Наличие ключей реестра:

    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\MSKernel32=MSKERNEL32.VBS
    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ RunServices \Win32DLL=Win32DLL.VBS

                Отсутствие ключей в реестра:

    • Software\Microsoft\Windows\CurrentVersion\Policies\Network\HideSharePwds
    • Software\Microsoft\Windows\CurrentVersion\Policies\Network\DisablePwdCaching
 
  1. Наличие определенных файлов:
    • MSKernel32.vbs
    • LOVE-LETTER-FOR-YOU.TXT.vbs
    • Win32DLL.vbs
    • WINFAT32. EXE
    • LOVE-LETTER-FOR-YOU.HTM
    • WIN -BUGSFIX.EXE
    • Very Funny.vbs
    • mothersday.vbs
    1. Реализация

Эвристический анализатор методом нечеткого логического вывода Цукамото был реализован с помощью 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,&ger);

      str1=ger.cFileName;

      temp=strcmp(str1, str2);

      if (temp==0) return temp;

      while(FindNextFile(hSearch1,&ger))

      {

      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,KEY_ALL_ACCESS,&key);

   for(int i = 0;i<12; i++)

    { RegEnumValue(key,int(i),lpValueName,&lpcValueName,NULL,&lpType,NULL,

      &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);

       }

Информация о работе Эвристический анализ семейства вирсусов