• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Protecting the Telegram bot's source code | Защищаем исходники Telegram-бота

FerdinandDemara

The Great Impostor
Забанен
Регистрация
04.02.2022
Сообщения
59
Реакции
35
Гарант сделки
1
Депозит
0.001
Пожалуйста, обратите внимание, что пользователь заблокирован

Всех приветствую снова. Это уже вторая статья для данного конкурса. Предыдущая статья на тему СИ была слишком обширной, но подробной. Для того, чтобы вам было удобнее читать эту статью, постараюсь сделать её максимально короткой и подробной одновременно.

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

1. Шеллы. Данный вариант обваливается на самом первом этапе. На моменте передачи исходного кода заказчику. Как правило, использование шеллов ВЕЗДЕ запрещено

2. Обфускация кода. Штука не особо запрещена, но во-первых заказчик будет не очень рад видеть такое, да и это оставляет скрипт работоспособным, потому при сливе скрипта, его будут использовать в обфусцированном виде, при том, что он будет оставаться работоспособным.

Нам нужно простое и эффективное решение. Чтобы никак не "шифровать" код и не оставлять в нём всякие "сюрпризы". Конечно, можно было бы сделать некий API, где вы выдаёте некие "исходники", часть которых будет обрабатываться на устройстве, с которого его запустили (сервер, хостинг, ПК), а часть будет обрабатываться на вашем сервере. Во-первых это весьма сложно в плане реализации, а эту статью я пишу не для профессионалов в программировании. Таким образом, задача следующая: реализовать некую систему контроля скриптом, чтобы, например, в случае каких-либо проблем (сливы, проблемы с заказчиком и т.д.) вы могли приостановить таким пользователям работу скрипта при том условии, что код по сути будет чистым.

Разбирать буду реализацию на примере PHP, а в конце будет чуть-чуть Python

Работать будем с одним из моих проектов (ручной обменник BTC). Скрипт реализован на PHP, стоит на доменах. Потому имеется .htaccess.
Основная задача - оставить себе дыру для получения токена Telegram-бота

.htaccess — файл дополнительной конфигурации веб-сервера Apache, а также подобных ему серверов. Позволяет задавать большое количество дополнительных параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), таких как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения главного конфигурационного файла.

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


1654950469194.png

Что же этот скриншот означает? То, что я выделил в зеленый квадрат ограничивает файлы .txt и .zip от всех пользователей, то есть, как я описал выше - доступ к исходникам просто по URL получить не выйдет с данными настройками .htaccess, а потому мы сделаем уязвимость для самих себя и просто пропишем на файл с конфигом, где указывается наш токен - allow from all. Но с большой оговоркой, что файл конфига не будет называться config.php т.к даже индексатор не нужен, чтобы найти файл конфига с таким названием)0)

По-этому добавляем в .htaccess строчки:


Код:
<Files название файла>
allow from all
</Files>

Таким образом, мы оставили доступ к файлу, который содержит токен бота. Это был первый вариант. Переходим ко второму, более интересному.

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

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


1654950996858.png

Эта команда означает, что если в Telegram-бота отправить команду /ConfigInfo , то независимо от наших привилегий и доступов, бот выдаст нам следующее сообщение:

1654951234085.png


Тем самым, вы получите токен.

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


1654951319520.png


Эта строчка лишь имитация API / лицензии. Хотя если вам понравится данная статья, то я покажу, как из этого сделать полноценное распределение и создание лицензий. Но пока что это лишь строчка, которая не отвечает вообще ни за что. При сливах и передачах другим пользователям вашего продукта, никто не будет менять эту строчку, ошибочно полагая, что скрипт перестанет работать или что-то другое. Для каждого клиента, нужно будет менять "ключ", и заносить куда-нибудь себе. У меня для этого используется база данных MySQL на другом проекте. А начинающим подойдёт и обычный блокнот. Таким образом, в случае слива, мы узнаем, кто это сделал.

Превращаем бота в "кирпич"

Имея токен, просто создаём простейший скрипт на Python такого формата:

Код:
bot = telebot.TeleBot('token')

 @bot.message_handler(commands=['start']) def start_message(message): 
 bot.send_message(message.chat.id, 'Оплати лицензию, чертила. ПМ на @Логин') 

  @bot.message_handler(content_types=['text']) def start(message): 
 bot.send_message(message.chat.id, 'Оплати лицуху, чорт. ПМ на @Логин')

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

А для получения всех ботов в онлайн-режиме, мы используем команду:

1654952440809.png

Это лишь пример, а вообще, при каждом первом запуске загонять бота в базу данных, чтобы при повторении не было отстука ранее созданных ботов. В общем, используйте задумку как угодно со своими наворотами

А если мы и вовсе хотим чекать все логи от лица бота, то для этого нам потребуется Graph Messenger с функцией авторизации по токену бота.

На этом всё. Всем успехов)
 

Вложения

  • 1654951105946.png
    1654951105946.png
    6.2 КБ · Просмотры: 20


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх