コード例 #1
0
ファイル: VirusLibrary.cs プロジェクト: GarageInc/all
        // Собственно, сама проверка
        public virtual bool check(ref Parser p)
        {
            bool ans = false;
            
            List<SegmentCode> dangerSegments = new List<SegmentCode>();
            if (p.doneRenamed)
            {
                dangerSegments = p.AllSegments;
            }

            // Теперь, собственно, проверка на вхождение
            foreach (SegmentCode virusSegment in allVirus)// Берем каждый вирус
            {
                foreach (SegmentCode dangerSegment in dangerSegments)// Берем сегмент кода
                {
                    // Передаем в сегмент кода нашего файла сигнатуру вируса
                    if (dangerSegment.Find(virusSegment))// Если сегмент кода содержит в себе "вирус" - возвращаем true
                    {
                        ans = true;
                    }
                }
            }
            
            return ans;
        }
コード例 #2
0
ファイル: ScanSystem.cs プロジェクト: GarageInc/all
        public  void ScanFile(FileInfo f)
        {
            i++;
            if (numberofFile != 0)
            {
                procent = (i * 100) / numberofFile;
            }

            //// Вывод процентов
            progressBar.Value = (int) procent;
            //// Вывод названия сканируемого файла
            richTextBoxResult.Text += '\n'+f.Name;

            try
            {
                // Парсер - получаем сегменты кода проверяемого файла
                Parser p = new Parser(f.FullName);
                if (p.doIt() != 1)
                {
                    if (virusLibrary.check(ref p))
                    {
                        virusFiles.Add(f);
                        numberofVirusFile++;
                    }
                    numberofPEFile++;
                }
            }
            catch (FileNotFoundException exception)
            {
                numberofNotOpenedFile++;
                richTextBoxResult.Text += '\n' + exception.Message+ '\n';
            }
            catch (IOException exception)
            {
                numberofNotOpenedFile++;
                richTextBoxResult.Text += '\n' + exception.Message + '\n';
            }
        }
コード例 #3
0
ファイル: Form1.cs プロジェクト: GarageInc/all
        // Генерируем простую сигнуру типа
        // Console.WriteLine("Virus!");
        // Thread.Sleep(1000);
        private void GeneratSignatureButton_Click(object sender, EventArgs e)
        {
            // Прочитаем "зараженные" файлы(сегменты кода) и найдем их общую часть
            Parser p1 = new Parser("Virus1.exe");
            p1.doIt();
            Parser p2 = new Parser("Virus2.exe");
            p2.doIt();
            Parser p3 = new Parser("MiniVirus.exe");
            p3.doIt();
            Parser p4 = new Parser("NotVirus.exe");
            p4.doIt();

            var segm1 = p1.AllSegments.First().CodeBytes;
            var segm2 = p2.AllSegments.First().CodeBytes;
            var segm3 = p3.AllSegments.First().CodeBytes;

            // Найдем пересечение общих участков кода - это и будет сигнатура! ищем данный участок: он отсутствует у p4
            // Console.Writeline("VIRUS!";
            //  Thread.Sleep(1000);
            var a7 = LCS(Encoding.Default.GetString(segm1), Encoding.Default.GetString(segm2));
            var a8 = LCS(Encoding.Default.GetString(segm3), Encoding.Default.GetString(segm2));
            var a9 = LCS(a7, a8);

            // Методом тыка пришёл к получению данной сигнатуры:
            //Добавляем сигнатуру в базу данных
            Addsignature(Encoding.Default.GetBytes(a9));

            this.progressBar1.Value = 0;
        }