Blog. Just Blog

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

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

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

Скачиваем дистрибутив Pro-версии, устанавливаем, запускаем. Сразу же появляется окно для ввода регистрационных данных.

Окно регистрации
Окно регистрации

На ввод неправильных регистрационных данных программа реагирует сообщением "Username or registration key wrong!". Но в исполняемом файле ничего подобного нет, несмотря на то, что он ничем не упакован. Глобальным поиском по всем файлам нужная строчка обнаруживается в файле "panoramastudio.qm".

Строка сообщения
Строка сообщения

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

Строка сообщения
Строка сообщения

Теперь в дизассемблере посмотрим, как и где эта строка используется. Вы ведь не забыли сразу же после установки отправить исполняемый файл в дизассемблер?
  1. .text:0048B868                 mov     edi, offset byte_76A130
  2. ; Вызвать функцию проверки
  3. .text:0048B86D                 call    sub_4C5E30
  4. .text:0048B872                 add     esp, 4
  5. .text:0048B875                 test    eax, eax
  6. ; Если она вернула EAX=0, то переход
  7. .text:0048B877                 jz      short loc_48B88A
  8. .text:0048B879                 mov     edx, [esi]
  9. .text:0048B87B                 mov     eax, [edx+0CCh]
  10. .text:0048B881                 mov     ecx, esi
  11. .text:0048B883                 call    eax
  12. .text:0048B885                 jmp     loc_48B959
  13. .text:0048B88A ; ---------------------------------------------
  14. .text:0048B88A loc_48B88A:
  15. ; Вывести сообщение о неправильном серийнике
  16. .text:0048B88A                 mov     eax, dword_9A2EAC
  17. .text:0048B88F                 inc     eax
  18. .text:0048B890                 cmp     eax, 2
  19. .text:0048B893                 mov     dword_9A2EAC, eax
  20. .text:0048B898                 jle     short loc_48B8AA
  21. .text:0048B89A                 mov     ecx, dword_9A2E80
  22. .text:0048B8A0                 mov     byte ptr [ecx+3Ch], 1
  23. ; QWidget::close(void)
  24. .text:0048B8A4                 call    ds:?close@QWidget@@QAE_NXZ
  25. .text:0048B8AA loc_48B8AA:
  26. .text:0048B8AA                 push    7D0h
  27. .text:0048B8AF                 call    ds:?msleep@QThread@@KAXK@Z
  28. ; QThread::msleep(ulong)
  29. .text:0048B8B5                 push    ebx
  30. .text:0048B8B6                 lea     ecx, [esp+98h+var_80]
  31. .text:0048B8BA                 push    offset unk_6C460C
  32. .text:0048B8BF                 push    ecx
Код, конечно, представляет собой просто эталон спагетти. Но программа написана на Qt, было бы странно ожидать от его компилятора чего-то более вразумительного. Попробуем разобраться. Сперва вызывается некая функция проверки, если она вернула EAX=0, то переходим на вывод сообщения о неправильном серийнике. Значит, чтобы программа как минимум считала любой серийник правильным, надо сделать так, чтобы функция проверки всегда возвращала EAX=1. Посмотрим на окончание функции проверки:
  1. .text:004C5EF4                 jnz     short loc_4C5F07
  2. .text:004C5EF6                 cmp     byte_73537D, 0F6h
  3. .text:004C5EFD                 jnz     short loc_4C5F07
  4. ; Вернуть EAX=1
  5. .text:004C5EFF                 mov     eax, 1
  6. .text:004C5F04                 pop     esi
  7. .text:004C5F05                 pop     ebx
  8. .text:004C5F06                 retn
  9. .text:004C5F07 ; ----------------------------------------
  10. .text:004C5F07 loc_4C5F07:
  11. .text:004C5F07                 pop     esi
  12. ; Вернуть EAX=0
  13. .text:004C5F08                 xor     eax, eax
  14. .text:004C5F0A                 pop     ebx
  15. .text:004C5F0B                 retn
Чтобы не патчить несколько условных переходов, пропатчим двухбайтную команду обнуления EAX по адресу 004C5F08, заменив ее на двухбайтную команду MOV AL,1. Сохраняем изменения, запускаем программу.

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

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

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\PanoramaStudio\Registered]
"UserName2PRO"="ManHunter / PCL"
"Key2PRO"="1234567890"

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

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

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
ManHunter (19.01.2021 в 10:58):
Поиском. В hiew это F7, как в других редакторах - не знаю. И там не адрес, а строка, читай внимательнее.
Сергей (19.01.2021 в 10:34):
Здравствуйте, могли бы вы поподробнее описать, как найденный нужный адрес в файле panoramastudio.qm найти в исполняющем файле.
brute (06.10.2016 в 23:19):
что-то вернулся к этой проге (разгребал завалы).. Нашел в Оле через поиск в памяти примерное место проверки серийника - где логин мелькает в регистрах, начал наугад править переходы.. поднялся повыше и.. заметил странный SETNE по адресу 52CDD8.. Заменил на SETE и прога зарегистрировалась. Кстати, открыл для себя два плагина для IDA: keypatch.py и ifl.py - с ними патчить и трейсить в иде одно удовольствие!, а также прикрутил (легко!) windbg 32\64 к IDA.
ManHunter (13.03.2016 в 09:28):
Я не знаю, что такое 64-битные системы. Статьи по ним появятся, когда по какой-то причине у меня вдруг на компе обнаружится установленная система с этой разрядностью, то есть ВООБЩЕ НИКОГДА.
brute (13.03.2016 в 08:46):
1. сам искать строки на немецком не догадался - подсмотрел), так как оля не брякалась функциях чтения серийника.. Уже хотел триальность "лечить"..
2. дистрибутив ставит х32/х64 в зависимости от винды. Так вот, под х64 нет отладчиков!!! Сам отладчик х64, имхо, сырой - переход на оффсет из иды не совпадает! (адреса загрузки в иду и х64 разные - не смог синхронизировать.. Слышал, что в реестре надо что-то править..) Пришлось патчить в хех-редакторе иды...
3. есть что-нибудь для отладки, кроме dbg_х64? Хотелось бы (плагин) для иды найти и приспособить баш_64, windbg или (странно, почему его нет в комплекте иды) windbg_64.

п.с. хотелось бы уже начать читать статьи по отладке х64:)
ManHunter (11.10.2014 в 17:58):
Ну дык, ёлы-палы
Vladimir (11.10.2014 в 16:45):
Шик! Kolor Autopano Giga собрала собор Святого Вита из восьми фрагментов автоматически! Без ручной коррекции контрольных точек. Еще и дисторсию убрала почти идеально.
Большое спасибо вам за подсказку!
Vladimir (11.10.2014 в 16:17):
И даже русский язык есть!
Благодарю, буду пробовать.
ManHunter (11.10.2014 в 16:05):
Kolor Autopano Giga пока вне конкуренции.
Vladimir (11.10.2014 в 16:04):
А вы пользовались для сборки панорам PTGui Pro? Если да, то она лучше/хуже, чем PanoranaStudio? Вообще, чем вы пользуетесь для этих целей?
ManHunter (05.10.2014 в 12:45):
Отличная попытка. В следующем тысячелетии обязательно попробую. А пока в бан.
Алексей (04.10.2014 в 23:41):
а попробуйте обойти защиту easypano tourweaver
Verter (02.10.2014 в 13:12):
Красава! Заменил в NOPами в редакторе. Работает. Жму лапу!
ManHunter (02.10.2014 в 01:34):
Антисанкции, чо :)
ufo (02.10.2014 в 01:27):
Неплохо так раскрутил спагетти на 90 баксов :)

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

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

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