1. Вы находитесь в архивной версии форума xaker.name. Здесь собраны темы с 2007 по 2012 год, большинство инструкций и мануалов уже неактуальны.
    Скрыть объявление

Расшифровка плагинов Google SketchUp (RBS Unscrambling)

Тема в разделе "Исследование софта на уязвимости, crackme", создана пользователем Dr. MefistO, 10 авг 2012.

  1. Dr. MefistO

    Dr. MefistO Крывіч Глобальный модератор

    Регистрация:
    3 авг 2008
    Сообщения:
    152
    Симпатии:
    254
    Баллы:
    0
    [​IMG]

    Доброго здравия, товарищи!

    Лирическое отступление​


    В этот раз мне снова досталось интересное задание: взломать платный плагин к известному бесплатному 3D-моделлеру: Google SketchUp (далее GSU). Первым делом я полез в гугл поискать на эту тему что-нибудь. Но меня ожидало разочарование. Борды попадались только англоязычные, да и на тех, акромя фраз "There is no chance to unscramble RBS-file." ничего не было. Поэтому...

    Начало​


    Вообще, простые, бесплатные плагины к GSU представляют из себя обычный Ruby-скрипт, т.е. простой текстовый файл, но с расширением .rb. Платные плагины же, в свою очередь, надо было как-то защищать от пытливых глаз крякеров, поэтому и придумали SketchUp Scrambler, который переводит скрипт в нечитаемый (расширение .rbs), и, по мнению многих, необратимый вид. Но сегодня я докажу вам обратное. :)

    Подготовка​


    Давайте скачаем и установим себе GSU. Ссылку я давать не буду, но, думаю, вы ребята умные - найдете)

    Теперь нам нужен подопытный. Я выбрал Skelion (http://skelion.net/). Качаем файл skelion_vXX.rbz, открываем GSU, заходим в меню Окно -> Параметры -> Расширения -> Установить расширение -> выбираем скачанный файл. После всех кнопочек и сообщений перезапускаем GSU. Плагин установлен.

    Анализ​


    Давайте же посмотрим, как выглядит наш плагин снаружи.

    Заходим в папку с программой, там ищем папку Plugins\_skelion. Кроме всего прочего html-хлама видим файл: skelion.rbs. Он то нам и нужен. Пытаемся посмотреть его блокнотом - облом.

    Нам поможет GSU​


    Значит так. Давайте определимся, что мы будем делать. Раз это плагин, значит он грузится при запуске самой программы, а значит она открывает файл плагина и каким-то образом его пережевывает. Значит нам нужно отловить место, когда нужный нам плагин расшифруется в память и сохранить его из памяти на диск в виде чистого .rb-скрипта.

    Грузим GSU (SketchUp.exe) в Olly Debugger. Как обычно, сразу заходим в Search -> All Intermodular Calls (отправная точка почти любого взлома).

    Осматриваем список, видим, что большинство вызываемых процедур MFC-шные, т.е. CPP-шные. Гугл нам помогает, и мы узнаем, что функция открытия файла называется fopen(). Ее и ищем в этом списке. И ставим брейкопоинты на все вызовы данной функции.

    Запускаем отладку клавишей F9 и ждем прерывания. В окне стэка мы будем видеть, какой файл после текущего прерывания будет открыт, поэтому поглядываем туда. Вот и первое прерывание.
    Код:
    2d_simplex_bool.rbs
    Не то - жмем F9 еще разок. А вот и наш файл:
    Код:
    skeleton.rbs
    Достаем чистый .rb-скрипт​


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

    После пары циклов мы доходим до RETN. Значит в текущей процедуре распаковки не произошло - шагаем дальше.

    [​IMG]

    Видим, что в регистр EAX собирается поместиться адрес некой текстовой строки с кучей звездочек. Даем ему туда поместиться) Теперь жмем правой кнопкой по адресу в EAX и жмем Follow in Dump.

    [​IMG]

    В окне дампа (оно слева снизу обычно) появляется кусок нашего скрипта в чистом виде. Для того, чтобы его извлечь оттуда, жмем правой кнопкой на дампе -> Select All, затем выбираем Edit -> Binary copy.... Открываем любой шестнадцатеричный редактор, и вставляем в новый файл содержимое буфера обмена.

    Теперь просто очищаем от лишнего мусора получившийся файл (начало - там где # #*******, конец - слово end). Сохраняем чистый файл с расширением .rb.

    Исправляем проверки и шифруем

    Собственно, найти проверки лицензии в этом файле не сложно. Ищем по словам "license", "trial" и радуемся. Честно говоря, в Ruby я не Rubly совсем, но язык не сложный и никакого труда вам не составит изменить код как вам вздумается.

    А скремблировать назад мы будем упомянутым в самом начале GSU Scrambler'ом: http://www.sketchup.com/intl/en/developer/docs/utilities.php
    Код:
    SketchUpRubyScramblerWindows.exe unpacked_skelion.rb
    Измененный плагин готов)

    Заключение

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

    Автор: Владимир Мефисто
    Special for XNTeam

    UPD. (BONUS): Во вложении самописный анскремблер RBS файлов.
     
    Последнее редактирование: 26 май 2013
    2 пользователям это понравилось.

Поделиться этой страницей