Blog. Just Blog

Исследование защиты программы FlipCreator

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы FlipCreator
Скриншот программы FlipCreator

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

Скачиваем дистрибутив с официального сайта, устанавливаем и осматриваем, что к чему. Беглый анализ основного исполняемого файла показывает, что он ничем не упакован и не защищен.

Сообщение незарегистрированной версии
Сообщение незарегистрированной версии

При первом запуске в окне "О программе" отображается надпись: "This software is unregistered". Это отправная точка для анализа механизма защиты.

Сообщение о неправильной регистрации
Сообщение о неправильной регистрации

При вводе недействительного регистрационного кода приложение выводит сообщение: "Invalid Registration Code! Please enter an available Registration Code". Далее выполняется анализ листинга дизассемблера для определения контекста использования данной строки.
  1. CODE:004D8429                 lea     edx, [ebp+var_2C]
  2. CODE:004D842C                 mov     eax, ds:off_7F09A4
  3. CODE:004D8431                 mov     eax, [eax]
  4. CODE:004D8433                 call    @Forms@TApplication@GetTitle$qqrv
  5. ; Forms::TApplication::GetTitle(void)
  6. CODE:004D8438                 mov     eax, [ebp+var_2C]
  7. CODE:004D843B                 call    @System@@LStrToPChar$qqrx17System@AnsiString
  8. ; System::__linkproc__ LStrToPChar(System::AnsiString)
  9. CODE:004D8440                 push    eax             ; lpCaption
  10. CODE:004D8441                 push    offset aInvalidRegistr
  11. ; "Invalid Registration Code! \r\nPlease ent"...
  12. CODE:004D8446                 mov     eax, ds:off_7F09A4
  13. CODE:004D844B                 mov     eax, [eax]
  14. CODE:004D844D                 mov     eax, [eax+30h]
  15. CODE:004D8450                 push    eax             ; hWnd
  16. CODE:004D8451                 call    MessageBoxA_0
  17. CODE:004D8456                 mov     eax, [ebx+2F8h]
  18. CODE:004D845C                 mov     edx, [eax]
  19. CODE:004D845E                 call    dword ptr [edx+0C0h]
Чуть выше - куча похожих строк: "Registered successfully, Thanks for your registration." И рядом пять почти одинаковых кусков кода, которые различаются только цифрой от 1 до 5. В самой программе есть несколько типов лицензий, и топовый - Global. Видимо, цифра как раз и определяет уровень доступа. И после каждого уровня выполняется проверка:
  1. CODE:004D820F                 call    sub_4DC3C0
  2. CODE:004D8214                 test    al, al
  3. CODE:004D8216                 jz      short loc_4D8272
Внутри процедуры проверки вызывается функция CompareStr, выполняющая сравнение двух строк. Учитывая ее расположение и роль, вероятно, она участвует в сверке введенного и ожидаемого регистрационного кода, стоит изучить ее детально.
  1. CODE:004DC3FD                 push    eax
  2. CODE:004DC3FE                 mov     ecx, ebx
  3. CODE:004DC400                 mov     edx, [ebp+var_4]
  4. CODE:004DC403                 mov     eax, esi
  5. CODE:004DC405                 call    sub_4DC464
  6. CODE:004DC40A                 mov     edx, [ebp+var_10]
  7. CODE:004DC40D                 mov     eax, [ebp+var_8]
  8. CODE:004DC410                 call    @Sysutils@CompareStr$qqrx17System@AnsiStringt1
  9. ; Sysutils::CompareStr(System::AnsiString,System::AnsiString)
  10. CODE:004DC415                 test    eax, eax
  11. CODE:004DC417                 jnz     short loc_4DC42D
  12. CODE:004DC419                 mov     ecx, ebx
  13. CODE:004DC41B                 mov     edx, [ebp+var_4]
  14. CODE:004DC41E                 mov     eax, esi
  15. CODE:004DC420                 call    sub_4DB894
Программа запускается под отладчиком. Устанавливается точка останова по адресу 004DC410, соответствующему входу в функцию CompareStr. После повторного ввода недействительного регистрационного кода ожидается срабатывание точки останова.

Указатели на строки в регистрах
Указатели на строки в регистрах

Перед сравнением в регистрах EAX и EDX находятся указатели на две строки: это наш левый серийник и правильный, с которым выполняется сравнение. Так для имени "ManHunter / PCL" правильный серийник будет "10022-43C46-9AD70". Выходим из отладчика, снова открываем настройки и повторяем регистрацию с найденными данными.

Сообщение об успешной регистрации
Сообщение об успешной регистрации

Программа выдает сообщение об успешной регистрации. Закрываем ее, перезапускаем и проверяем функции. Если все работает, значит, мы все сделали верно.

Программа успешно зарегистрирована
Программа успешно зарегистрирована

Все визуальные и функциональные ограничения, связанные с незарегистрированной версией, устранены. В окне "О программе" корректно отображаются найденное регистрационное имя и правильный серийный номер. Цель достигнута.

Поделиться ссылкой ВКонтакте
Просмотров: 312 | Комментариев: 0

Комментарии

Отзывы посетителей сайта о статье
Комментариeв нет

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2026
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.09 сек. / MySQL: 2 (0.0089 сек.) / Память: 4.5 Mb
Наверх