Исследование защиты плагина SFTP для Sublime Text
Скриншот плагина SFTP для Sublime Text
Для замечательного редактора кода Sublime Text есть не менее замечательный плагин SFTP, который позволяет прямо из редактора работать с файлами по протоколам FTP, FTPS и SFTP. Кроме этого, плагин предоставляет еще множество других интересных функций, таких как синхронизация локальных и удаленных каталогов, сравнение файлов, отслеживание изменений, автоматическая загрузка и выгрузка файлов, и многое другое. Неожиданностью для меня стал тот факт, что за этот плагин требуется выложить некоторую сумму вечнозеленых денег.
В принципе, плагин работает без функциональных ограничений и без лимита по времени. Но при каждой десятой операции, связанной с загрузкой или сохранением файла, изменением атрибутов, удалением и т.п., на экране появляется вот такое назойливое сообщение:
Сообщение об отсутствии регистрации
SFTP, как и все плагины для Sublime Text, написан на языке Python. Сложность заключается в том, что скрипты плагина распространяются в скомпилированном виде, то есть без исходных текстов. Для последних версий редактора Sublime Text 3 плагин компилируется в 3-й версии Python, а, как я говорил в одной из предыдущих статей, рабочих инструментов для декомпиляции этой версии Python нет. К счастью, есть версия плагина для версии Sublime Text 2, которая скомпилирована в Python 2, а на офсайте Sublime Text можно скачать эту версию редактора. На сайте плагина не сказано о какой-то особой регистрации для разных версий редактора, поэтому можно сделать вывод, что регистрационные данные от плагина SFTP для Sublime Text 2 должны подойти к плагину для Sublime Text 3. Устанавливаем Sublime Text 2, подключаем к нему плагин. После этого декомпилируем все содержимое папки SFTP при помощи Easy Python Decompiler.
Декомпилируем файлы плагина
Все скрипты плагина декомпилированы без ошибок. После декомпиляции надо запустить контекстный поиск по всем файлам плагина по строке "Thanks for trying out Sublime SFTP". Найдется декомпилированный файл commands.pyc_dis, а нужная строка обнаруживается почти в самом его начале.
Функция инициализации плагина
Что тут происходит? Если вы знаете Python и ранее сталкивались с плагинами для Sublime Text, то легко поймете, что в этой функции считывается файл конфигурации и затем заполняется структура SftpCommand.elements, причем переменная с характерным именем key записывается в параметр SftpCommand.elements[1]. Нас интересуют только два параметра: email и product_key. Очевидно, что они должны быть заполнены в файле конфигурации и содержать правильные регистрационные данные. Теперь надо найти место, где эти параметры каким-либо образом проверяются. Глобальный поиск пока не трогаем, а поиск в этом же файле commands.pyc_dis по строке "SftpCommand.elements[1]" выводит нас на следующий код:
Функция проверки регистрации
Здесь выполняются проверки на количество выполненных команд, генерируется и сравнивается серийный номер, а также выводится сообщение о необходимости регистрации. Как видно из листинга, проверяемый серийник записывается в строку key_prefix. Программист, владеющий Python на достаточном уровне, легко вычленит алгоритм регистрации и напишет кейген, а я сделаю хитрее. Я просто скопирую функцию генерации проверочного (читай - правильного) серийника в описанную выше функцию инициализации и добавлю вывод сообщения с правильным серийным номером. В принципе, можно ничего не копировать, а просто добавить вывод правильного серийника сразу после его генерации в функции проверки, в этом случае он будет показываться при выполнении любой операции с файлами на сервере.
Добавляем функцию генерации и вывод сообщения
После внесения изменений в исходник, надо переименовать файл commands.pyc_dis в commands.py, чтобы при последующем запуске Sublime Text перекомпилировал плагин заново. Теперь что касается регистрации. Никаких форм ввода серийника в плагине нет, все делается на суровом уровне редактирования конфигов Sublime Text. Согласно принятым в Sublime text правилам, имя файла конфигурации должно иметь вид имя_плагина.sublime-settings, а сам файл должен находиться в пользовательской папке редактора. Идем в пользовательскую папку Sublime Text и создаем там файл SFTP.sublime-settings, в который записываем следующий текст:
{
"email": "manhunter.pcl@shareware.must.die",
"product_key": "123123123123"
}
Это регистрационный email, для которого будет сгенерирован правильный серийник, и на всякий случай любой левый серийник, чтобы не было пустоты в параметрах. Сохраняем файл конфигурации, полностью закрываем Sublime Text, для надежности удаляем скомпилированный файл commands.pyc в папке с плагином. Удалять не обязательно, при запуске файл все равно будет скомпилирован заново, но для чистоты эксперимента лучше это сделать. Запускаем редактор, в меню выбираем подключение к любому серверу. SFTP радостно показывает нам окно сообщения с правильным серийным номером:
Правильный серийный номер для регистрации
Вот так плагин выступил в роли генератора ключей к самому себе. Для завершения регистрации осталось отредактировать в пользовательской папке Sublime Text файл SFTP.sublime-settings, изменив левый серийник на правильный, чтобы он стал следующего вида:
{
"email": "manhunter.pcl@shareware.must.die",
"product_key": "61faaf-dac84e-9f9945-4301a1-a7ec06"
}
Удаляем исходник commands.py, возвращаем на место первоначальный файл плагина commands.pyc из дистрибутива, перезапускаем редактор. Подключаемся к любому FTP-серверу и пробуем несколько раз открыть файлы на редактирование, а затем закачать их обратно. При достижении критического количества операций ничего не происходит, плагин работает без каких-либо ненужных сообщений. Копируем файл конфигурации в пользовательскую папку Sublime Text 3, ставим плагин SFTP для этой версии редактора. Запускаем, проверяем, тут тоже никаких проблем, регистрация от старой версии походит. Цель достигнута, мы научились обходить защиты на компилированных скриптах Python.
Просмотров: 12339 | Комментариев: 15
Метки: исследование защиты, Sublime Text
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Tester
(13.10.2023 в 15:43):
Sublime 4x win, тоже работает
Fobaz
(28.05.2019 в 06:11):
Нашел пару ключиков работающих на данный момент, а заодно полезный сайтец, делюсь
ыукшфды.иу
{ "email": "boris@creolab.hr", "product_key": "1a503a-298cb9-0de61f-4cb170-0d9cb3" } { "email": "tim@timsuchanek.de", "product_key": "e9a476-159bcc-79916b-93dc7b-4e71f4" }
Спасибо за статью, было интересно читать
ыукшфды.иу
{ "email": "boris@creolab.hr", "product_key": "1a503a-298cb9-0de61f-4cb170-0d9cb3" } { "email": "tim@timsuchanek.de", "product_key": "e9a476-159bcc-79916b-93dc7b-4e71f4" }
Спасибо за статью, было интересно читать
Fobaz
(28.05.2019 в 05:38):
Просто вставить мыло и ключ из статьи уже не проканает =(
погромист
(16.08.2017 в 10:17):
спасибо, за то что не пришлось все это делать самому
serg
(25.03.2017 в 10:29):
Beqa, спасибо, сработало, даже улыбнуло)
айнур
(22.02.2017 в 21:24):
Beqa, так просто
Beqa
(13.01.2017 в 00:06):
Preference > Package Settings > SFTP > Settings - User
откроется файл и туда вставляете вот этот код:
{
"email": "manhunter.pcl@shareware.must.die",
"product_key": "61faaf-dac84e-9f9945-4301a1-a7ec06"
}
Вот и все. Для меня сработало.
откроется файл и туда вставляете вот этот код:
{
"email": "manhunter.pcl@shareware.must.die",
"product_key": "61faaf-dac84e-9f9945-4301a1-a7ec06"
}
Вот и все. Для меня сработало.
Евгений
(02.05.2016 в 10:57):
спасибо!!!
Красавчик !
(25.01.2016 в 15:02):
Спасибо ! Молодец ! Так держать !
alex
(26.10.2015 в 12:13):
Работает sublime 3 linux
ManHunter
(20.10.2015 в 17:18):
Гвоздь себе в голову забей, тогда заработает.
xxx
(20.10.2015 в 17:08):
Не работает.
Alex
(07.07.2015 в 21:51):
Благодарочка. То что надо!
ManHunter
(30.06.2015 в 08:18):
Декомпилятор сам все прекрасно форматирует, руками ничего делать не надо.
SergVic
(30.06.2015 в 08:10):
Спасибо за статью Но с этим дебильным питоном 5 часов форматировал текст ошибки рандомные задрали.....
Можно ли файлик скинуть commands.py
Можно ли файлик скинуть commands.py
Добавить комментарий
Заполните форму для добавления комментария