Blog. Just Blog

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

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

QuickHDR от компании MediaChance - очень интересная программа для работы с HDR изображениями. Но в отличие от аналогичных программ, где для составления фотографии требуется несколько изображений с разной экспозицией, здесь нужно только одно изображение. На его основе и создается качественное изображение с различными HDR-эффектами. Вы можете выбрать эффекты как из предустановленных пресетов, так и самому настроить эффекты в точности как вам надо. Конечно, когда есть время и возможности, то лучше сделать полноценную серию кадров с различной экспозицией, но в реальных условиях это не всегда возможно. Так что программа QuickHDR окажется полезной, когда приходится "вытаскивать" одиночные изображения, имеющие слишком контрастные или слишком затемненные области.

Перейдем к не менее интересной части, в которой мы будем обходить необходимость покупки программы. Сперва скачиваем дистрибутив и устанавливаем его. После запуска программы в средней части ее рабочей области появляется вот такая надпись:

Окно ввода серийного номера
Окно ввода серийного номера

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

Триальное сообщение
Триальное сообщение

Но это мало чем помогает. Можете убедиться сами, дизассемблер не показывает никаких очевидных условий в участке кода, где обрабатывается это сообщение. Условные переходы есть, но условия их срабатывания слишком неявные. Что ж, приходится признать, что автор может смело записать еще один плюсик на свой счет. Пролистнем в hex-просмотрщике файл на один экран дальше.

Подозрительная строка
Подозрительная строка

А вот тут сразу две интересные строчки. Во-первых, строчка "Reg Code:". Очевидно, что она как-то относится к регистрационному коду, но при этом в диалоговых окнах ничего подобного нет. Во-вторых, строчка из серии нулей. Она находится в подозрительной близости от "Reg Code", а еще мне сложно представить, где она может применяться в графической программе, кроме как при проверке серийного номера. Посмотрим, какие участки кода ссылаются на них. Как ни странно, но это все находится в одной процедуре:
  1. .text:0046AB50                 push    0FFFFFFFFh
  2. .text:0046AB52                 push    offset SEH_46AB50
  3. .text:0046AB57                 mov     eax, large fs:0
  4. .text:0046AB5D                 push    eax
  5. .text:0046AB5E                 mov     large fs:0, esp
  6. .text:0046AB65                 sub     esp, 24h
  7. .text:0046AB68                 push    ebx
  8. .text:0046AB69                 push    esi
  9. .text:0046AB6A                 mov     esi, ecx
  10. .text:0046AB6C                 lea     eax, [esp+38h+arg_0]
  11. .text:0046AB70                 lea     ecx, [esp+38h+var_30]
  12. .text:0046AB74                 push    eax
  13. .text:0046AB75                 mov     [esp+3Ch+var_4], 0
  14. .text:0046AB7D                 call    sub_6776D3
  15. .text:0046AB82                 mov     ebx, 1
  16. .text:0046AB87                 lea     ecx, [esp+38h+var_30]
  17. .text:0046AB8B                 mov     byte ptr [esp+38h+var_4], bl
  18. .text:0046AB8F                 call    sub_67076E
  19. .text:0046AB94                 lea     ecx, [esp+38h+var_30]
  20. .text:0046AB98                 call    sub_670677
  21. .text:0046AB9D                 mov     ecx, [esp+38h+var_30]
  22. .text:0046ABA1                 mov     al, [ecx]
  23. .text:0046ABA3                 cmp     al, 3Ah
  24. .text:0046ABA5                 jnz     short loc_46ABD2
  25. .text:0046ABA7                 lea     edx, [esp+38h+var_1C]
  26. .text:0046ABAB                 push    ebx
  27. .text:0046ABAC                 push    edx
  28. .text:0046ABAD                 lea     ecx, [esp+40h+var_30]
  29. .text:0046ABB1                 call    ?Mid@CString@@QBE?AV1@H@Z
  30. .text:0046ABB6                 push    eax
  31. .text:0046ABB7                 lea     ecx, [esp+3Ch+var_30]
  32. .text:0046ABBB                 mov     byte ptr [esp+3Ch+var_4], 2
  33. .text:0046ABC0                 call    sub_677A97
  34. .text:0046ABC5                 lea     ecx, [esp+38h+var_1C]
  35. .text:0046ABC9                 mov     byte ptr [esp+38h+var_4], bl
  36. .text:0046ABCD                 call    sub_67795E
  37. .text:0046ABD2 loc_46ABD2:
  38. .text:0046ABD2                 push    offset aRegCode ; "Reg Code:"
  39. .text:0046ABD7                 lea     ecx, [esp+3Ch+var_30]
  40. .text:0046ABDB                 call    sub_670200
  41. .text:0046ABE0                 test    eax, eax
  42. .text:0046ABE2                 jnz     short loc_46AC10
  43. .text:0046ABE4                 lea     eax, [esp+38h+var_1C]
  44. .text:0046ABE8                 push    9
  45. .text:0046ABEA                 push    eax
  46. .text:0046ABEB                 lea     ecx, [esp+40h+var_30]
  47. .text:0046ABEF                 call    ?Mid@CString@@QBE?AV1@H@Z
  48. .text:0046ABF4                 push    eax
  49. .text:0046ABF5                 lea     ecx, [esp+3Ch+var_30]
  50. .text:0046ABF9                 mov     byte ptr [esp+3Ch+var_4], 3
  51. .text:0046ABFE                 call    sub_677A97
  52. .text:0046AC03                 lea     ecx, [esp+38h+var_1C]
  53. .text:0046AC07                 mov     byte ptr [esp+38h+var_4], bl
  54. .text:0046AC0B                 call    sub_67795E
  55. .text:0046AC10 loc_46AC10:
  56. .text:0046AC10                 push    edi
  57. .text:0046AC11                 lea     ecx, [esp+3Ch+var_30]
  58. .text:0046AC15                 call    sub_67076E
  59. .text:0046AC1A                 lea     ecx, [esp+3Ch+var_30]
  60. .text:0046AC1E                 call    sub_670677
  61. .text:0046AC23                 push    offset a00000000000000
  62. ; "0000000000000000000"
  63. .text:0046AC28                 lea     ecx, [esp+40h+var_30]
  64. .text:0046AC2C                 call    sub_677D3A
  65. .text:0046AC31                 lea     ecx, [esp+3Ch+var_20]
  66. .text:0046AC35                 push    9               ; Size
  67. .text:0046AC37                 push    ecx             ; int
  68. .text:0046AC38                 lea     ecx, [esp+44h+var_30]
  69. .text:0046AC3C                 call    sub_670166
  70. ...
Запустим программу под отладчиком и поставим точку останова в начало этой функции по адресу 0046AB50. Для теста снова введем какой-нибудь заведомо неправильный серийник, например, "1234567890987654321". Точка останова сработает сразу после ввода, на стеке при этом лежит указатель на введенный серийник. Пройдем эту процедуру в пошаговом режиме, при этом внимательно будем смотреть на то, как меняются указатели в регистрах и на значения указателей на стеке. В один из моментов там появится что-то такое:

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

Что мы тут видим? Мы видим введенный серийный номер с дописанной к нему в конце группой нулей, первую часть серийного номера, вторую часть серийного номера и строчку "0021-7102". Ее мы точно не вводили, значит она сгенерировалась где-то в дебрях программы и скорее всего на основании введенных нами данных. В отладчике добираемся до следующего блока:
  1. .text:0046AF4C                 mov     al, [ecx+1]
  2. .text:0046AF4F                 mov     bl, [edx+1]
  3. .text:0046AF52                 cmp     al, bl
  4. .text:0046AF54                 jnz     loc_46AFEB
  5. .text:0046AF5A                 mov     al, [ecx+2]
  6. .text:0046AF5D                 mov     bl, [edx+2]
  7. .text:0046AF60                 cmp     al, bl
  8. .text:0046AF62                 jnz     loc_46AFEB
  9. .text:0046AF68                 mov     al, [ecx+5]
  10. .text:0046AF6B                 mov     bl, [edx+5]
  11. .text:0046AF6E                 cmp     al, bl
  12. .text:0046AF70                 jnz     short loc_46AFEB
  13. .text:0046AF72                 mov     cl, [ecx+8]
  14. .text:0046AF75                 mov     al, [edx+8]
  15. .text:0046AF78                 cmp     cl, al
  16. .text:0046AF7A                 jnz     short loc_46AFEB
Можно также пройти этот участок в пошаговом режиме, но можно сделать проще - посмотреть на значения регистров. Там мы четко видим вторую часть серийного номера и сгенерированную строчку, которая засветилась чуть раньше на стеке.

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

Пошаговый проход подтверждает, что действительно сравниваются символы из второй части серийного номера. Значит надо попробовать заменить вторую часть из нашего введенного неправильного серийника на сравниваемую с ней строку, то есть получится серийный номер "12345678900021-7102". Перезапустим программу и введем на этот раз его. Триальная надпись мгновенно исчезнет, а водяные знаки при сохранении изображений также пропадут. То есть программа успешно зарегистрирована.

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

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

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

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

Комментарии

Отзывы посетителей сайта о статье
ManHunter (21.03.2013 в 09:19):
arzrav, именно так и делаю. Например, работа с реестром так или иначе связана с использованием строки "SOFTWARE", это значительно сужает район поиска. Рядом обычно лежат названия ключей реестра. Если это не помогает, то дальше делается перебор по часто встречающимся названиям типа "regcode", "regkey", "serial", "username", "key", "regnumber" и т.п. Вариантов не так много, как кажется. Ну а если и это не даст результат, то приходится уже думать в других направлениях, тут универсальных советов быть не может.
arzrav (21.03.2013 в 00:46):
ManHunter, можно поинтересоваться, как вы находите в секции данных ключевые слова навроде RegCode (здесь, следуя статье, вы просматривали код вручную) - ведь бывают большие программы и большие области данных, всё не просмотришь. Может по ключевым словам search юзаете?
ManHunter (05.03.2013 в 20:15):
А шо ви таки хотели? Обработка графики - дорогое удовольствие :)
SVS (05.03.2013 в 18:33):
Чего-то прожка нехило проц грузит. У меня не слабый компик, а впадал периодически в ступор с этой прожкой.
ManHunter (05.03.2013 в 10:37):
IDA Pro и HiEW
Владимир (05.03.2013 в 10:08):
Привет, ManHunter.
Я новичок, только зашел на ваш БЛОГ.
Какие вы программы используете? Чтобы просмотреть этот код.
У меня WinHex.
Но, какой программой вы сам код изменяете?
С помощью чего, доступ получаете к строкам:
.text:0046AF4C                 mov     al, [ecx+1]
.text:0046AF4F                 mov     bl, [edx+1]
.text:0046AF52                 cmp     al, bl
.text:0046AF54                 jnz     loc_46AFEB
И редактируете их.
Rustamer (04.03.2013 в 21:38):
Все программы от MediaChance по-своему уникальны. Они не похожи на аналоги. Мне вот много лет назад приглянулся графический редактор Mediachance Photo- Brush. Столько разных эффектов(мне нравятся из раздела Artistic), продуманность, оригинальность, компактность. Это не фотошоп. Это просто нечто другое. Я постоянно использую вроде бы такую простую вещь как надписи. С тенями и 3D получается отлично. Не могу найти объяснения(оно скорее всего лежит в незнании других средств), но именно этот инструмент прост и удобен - выбрал цвет, шрифт, размер тени и получил красивый результат. Поэтому эта программа много лет входит в комплект тех, что я обязательно ставлю для себя.
ManHunter (04.03.2013 в 12:24):
Я думаю, что все-таки кодили с творческим подходом, а не лепили из того что было. Но на сайте разработчика есть несколько очень похожих программ, все примерно на одном движке, разница только в производимых эффектах. Так что часть инструментов можно было и объединить.

А что касается второго вопроса, то для исследований я стараюсь выбирать самые недорогие или самые ненужные среди всех продуктов одного производителя, если есть такая возможность. Причину, надеюсь, объяснять не надо.
Андрей (04.03.2013 в 12:20):
Интересно Ваше мнение: прога "сбацана из компонентов" или "люди душу вкладывали" ?

Второй вопрос: почему не MediaChance Dynamic Photo-HDR ?

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

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

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