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

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

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

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

Статья Делаем «цветомузыку» с помощью Python. Управление окнами в ОС Windows

Думаю, что иногда нужно отвлечься от серьезных дел и заняться чем-то, что не является делом первой необходимости, но позволяет отдохнуть. Давайте сделаем бесполезный в практическом смысле но, тем не менее «забавный» скрипт. И используем для этого Python.

th317xoul2180ajy.jpg

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

Дисклеймер: Все данные, предоставленные в данной статье, взяты из открытых источников, не призывают к действию и являются только лишь данными для ознакомления, и изучения механизмов используемых технологий.


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

Если вы работаете под операционной системой Windows, а работать нужно будет только на ней, то установить нужно будет одну библиотеку: pygetwindow. Именно с ее помощью мы будем производить манипуляции с окнами. Для установки пишем в терминале:

pip install pygetwindow

К сожалению, данная библиотека не работает в Linux, так как изначально разрабатывалась для Windows. Потому создание скрипта, компиляция exe и все остальное нужно производить на последней.
Для начала давайте импортируем нужные для работы библиотеки в скрипт:

Python:
import random
import time

import pygetwindow as pg


Выбор из списка открытых окон

Создадим функцию choice_win(). Никаких значений она принимать не будет. При запуске функции в переменную присваивается список заголовков открытых окон в операционной системе. Причем, в список попадают даже те окна, которые скрыты от пользователя. То есть, они вроде есть, а пользователь их не видит. Это окна некоторых процессов и служб.

После получения заголовков список возвращается в функцию, которая инициализировала его получение.

Python:
def choice_win():
    """
    Получает список заголовков открытых окон.
    :return: Возвращает случайный заголовок одного из открытых окон.
    """
    activ = pg.getAllTitles()
    return pg.getWindowsWithTitle(random.choice(activ))[0]


Случайный выбор и манипуляции с окнами

Создадим функцию action(). На вход она не принимает никаких параметров. Для начала, перед запуском эффектов, спим 0,1 секунды. Создаем переменную count, которая будет содержать счетчик и присваиваем ей стартовое значение 0.

Запускаем бесконечный цикл. В нем мы будем периодически запрашивать открытые окна. Для начала проверяем, не равен ли счетчик 25. Тут можно поставить любое число, на ваше усмотрение. Это простая проверка, чтобы сделать паузу. Обнуляем счетчик, делаем небольшую паузу.

Запрашиваем заголовок случайного окна из открытых. Проверяем состояние полученных окон. Если окно свернуто, разворачиваем его на весь экран. Если окно развернуто, сворачиваем. Если окно восстановлено, сворачиваем.

И уже вне проверок делаем окно активным, что отразиться на панели задач, в открытых окнах. Они будут подсвечены, а если открыто несколько окон, будут даже «перемигиваться». Обернем активацию окна в блок try –except, так как к некоторым окнам доступ данной функции запрещен. И для того, чтобы цикл не вылетал с ошибкой, обрабатываем исключение. Ну и в конце увеличиваем счетчик на единицу.

Python:
def action():
    """
    Вызывает мигание кнопками открытых окон.
    Проверяет состояние окно. Если оно развернуто на весь экран,
    минимизирует, если минимизировано, разворачивает.
    Состояние restore - восстановлено. Выполняется проверка, если
    окно восстановлено - минимизирует.
    Для создания этого эффекта запускается бесконечный цикл,
    в котором выполняется проверка счетчика. Если оно равно
    заданному значению, присваиваем счетчику значение 0.
    После запускает функцию, которая выбирает в случайном порядке
    одно из открытых окон. И выполняет с ними вышеуказанные операции.
    Делает активным окно вне зависимости от того, свернуто оно, развернуто
    или восстановлено. Что вызывает интересный эффект моргания всеми кнопками.
    Обрабатывается исключение доступа к окну.
    """
    time.sleep(0.1)
    count = 0
    while True:
        if count == 25:
            count = 0
            time.sleep(0.1)
        win = choice_win()

        if win.isMinimized:
            win.maximize()
        elif win.isMaximized:
            win.minimize()
        elif win.restore():
            win.minimize()
        try:
            win.activate()
        except pg.PyGetWindowException:
            pass
        count += 1
[MEDIA=youtube]qPjGzjDFjWc[/MEDIA]

После того, как функции готовы, осталось из только запустить:

Python:
if __name__ == "__main__":
    action()


Заключение

Так как данный скрипт работает только на Windows, я подумал, что будет логично сделать из него exe. И уже потом решать, каким из способов доставить его «жертве шутки». Сделал я его с помощью PyInstaller, а точнее графической оболочки для него auto-py-to-exe, которую можно установить командой pip install auto-py-to-exe, а потом запустить на выполнение в терминале с помощью команды auto-py-to-exe.

Антивирус на exe не ругается, да и с чего бы? Там нет ничего запрещенного. Прибить exe можно с помощью диспетчера задач, вот только его нужно запускать не щелчком правой кнопки мыши по панели, в этом случае ничего не получиться. А с помощью всем известной комбинации из трех клавиш: «Ctrl + Alt + Del». И уже оттуда убивать скрипт. Так как я сделал у него прозрачную иконку, искать его по названию немного неудобно, а если бы я его обозвал еще как-нибудь похоже на системную службу, то пользователь еще бы подумал, прежде чем убить системный процесс, если бы еще нашел, конечно же.

screenshot1.png

Такая вот, безобидная шутка, которая тем не менее, у неподготовленного пользователя может вызвать панику и легкий испуг )). Ниже небольшое видео демонстрирующее работу. Кстати, в нем я не смог убить прожку с помощью Диспетчера задач. Пришлось перезагружаться.


Python:
"""
Простая программа использующая функция для управления окнами.
В данном случае используется несколько функций для создания эффекта
типа-стробоскоп из открытых окон. Если открытых окон нет, эффекта наблюдаться не будет.
Но, так как скрипт работает в бесконечном цикле, как только будут открыты
окна, воспроизведется данный эффект. Требует установки библиотеки: pip install pygetwindow.
"""
import random
import time

import pygetwindow as pg


def choice_win():
    """
    Получает список заголовков открытых окон.
    :return: Возвращает случайный заголовок одного из открытых окон.
    """
    activ = pg.getAllTitles()
    return pg.getWindowsWithTitle(random.choice(activ))[0]


def action():
    """
    Вызывает мигание кнопками открытых окон.
    Проверяет состояние окно. Если оно развернуто на весь экран,
    минимизирует, если минимизировано, разворачивает.
    Состояние restore - восстановлено. Выполняется проверка, если
    окно восстановлено - минимизирует.
    Для создания этого эффекта запускается бесконечный цикл,
    в котором выполняется проверка счетчика. Если оно равно
    заданному значению, присваиваем счетчику значение 0.
    После запускает функцию, которая выбирает в случайном порядке
    одно из открытых окон. И выполняет с ними вышеуказанные операции.
    Делает активным окно вне зависимости от того, свернуто оно, развернуто
    или восстановлено. Что вызывает интересный эффект моргания всеми кнопками.
    Обрабатывается исключение доступа к окну.
    """
    time.sleep(0.1)
    count = 0
    while True:
        if count == 25:
            count = 0
            time.sleep(0.1)
        win = choice_win()

        if win.isMinimized:
            win.maximize()
        elif win.isMaximized:
            win.minimize()
        elif win.restore():
            win.minimize()
        try:
            win.activate()
        except pg.PyGetWindowException:
            pass
        count += 1


if __name__ == "__main__":
    action()

А на этом, пожалуй, все.

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

Вложения

  • mixer_light.zip
    6,4 МБ · Просмотры: 113
Последнее редактирование:

Johan Van

Green Team
13.06.2020
352
661
BIT
162
Так и эпилепсию можно вызвать

Ну, можно просто сон подольше сделать ))) Чтобы не так мелькало. Но тогда у пользователя будет время воспользоваться Диспетчером задач ))) В принципе, скрипт можно доработать, чтобы он просто не давал разворачивать окна. Проверял, если есть открытое окно, тут же его сворачивал ))
 
  • Нравится
Реакции: artfox
Мы в соцсетях:

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