Blog. Just Blog

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

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

XML Marker - весьма недурственный просмотрщик и редактор файлов в формате XML и JSON. При более чем скромных размерах, XML Marker позволяет просматривать содержимое в виде удобной древовидной структуры, с подсветкой тегов, проверкой синтаксиса, с возможностью поиска и сортировки, при этом совершенно спокойно открывает файлы даже в несколько сот мегабайт. В ознакомительном режиме программа работает без никаких ограничений, но непродолжительное время. Как гласит ирландская пословица, "когда бог создал время, он создал его достаточно". Давайте поделимся кусочком вечности с программой.

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

Окно "О программе"
Окно "О программе"

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

У нас есть строки, из которых формируется фраза о количестве дней, давайте поищем их в файле. Ведь наверняка именно там запрашивается или вычисляется это количество для отображения в числовом виде. По фрагментам строк выходим на вот такой код:
  1. .text:00485E6C                 lea     eax, [esi-4]
  2. ; Вызвать функцию проверки
  3. .text:00485E6F                 call    sub_486560
  4. ; Ее результат меньше или равен 30?
  5. .text:00485E74                 cmp     eax, 1Eh
  6. .text:00485E77                 jbe     short loc_485E83
  7. ; Установить красный текст надписи
  8. .text:00485E79                 push    0FFh            ; color
  9. .text:00485E7E                 call    sub_4233A0
  10. .text:00485E83 loc_485E83:
  11. .text:00485E83                 lea     ecx, [esp+20h+arg_428]
  12. .text:00485E8A                 mov     edx, ecx
  13. .text:00485E8C                 lea     eax, [esp+20h+arg_827]
  14. .text:00485E93                 mov     [esp+20h+arg_418], ebp
  15. .text:00485E9A                 mov     [esp+20h+arg_414], offset off_4EBC30
  16. .text:00485EA5                 mov     [esp+20h+arg_41C], ecx
  17. .text:00485EAC                 mov     [esp+20h+arg_420], edx
  18. .text:00485EB3                 mov     [esp+20h+arg_424], eax
  19. .text:00485EBA                 mov     [esp+20h+arg_428], 0
  20. .text:00485EC2                 push    offset aYouAreNowOnDay
  21. ; "You are now on day "
  22. .text:00485EC7                 lea     edi, [esp+24h+arg_414]
  23. .text:00485ECE                 mov     [esp+24h+arg_1C9C], 1
  24. .text:00485ED9                 call    sub_401020
  25. .text:00485EDE                 lea     eax, [esi-4]
  26. ; Вызвать функцию проверки и преобразовать результат в число
  27. .text:00485EE1                 call    sub_486560
  28. .text:00485EE6                 mov     ecx, eax
  29. .text:00485EE8                 call    sub_401200
  30. .text:00485EED                 push    eax
  31. .text:00485EEE                 call    sub_401020
  32. .text:00485EF3                 push    offset aOfThe30DaysEva
  33. ; " of  the 30 days evaluation period."
  34. .text:00485EF8                 call    sub_401020
  35. .text:00485EFD                 mov     eax, [esp+20h+arg_420]
Обратите внимание, что одна и та же функция sub_486560 вызывается здесь дважды. Причем первый раз ее результат сравнивается с 30 (максимальный срок пробного периода), если оно больше, то цвет надписи меняется на красный. Во втором случае этот вызов присутствует между фрагментами надписи, что тоже весьма характерно. Посмотрим на эту функцию поближе.
  1. .text:00486560 sub_486560      proc near
  2. .text:00486560                 sub     esp, 8
  3. .text:00486563                 push    ebx
  4. .text:00486564                 push    esi
  5. .text:00486565                 push    edi
  6. .text:00486566                 mov     edi, [eax+3Ch]
  7. .text:00486569                 mov     eax, dword_501468
  8. .text:0048656E                 test    eax, eax
  9. .text:00486570                 jns     short loc_4865AF
  10. .text:00486572                 push    edi
  11. .text:00486573                 call    sub_4847E0
  12. .text:00486578                 lea     ecx, [esp+14h+var_8]
  13. .text:0048657C                 push    ecx
  14. .text:0048657D                 mov     esi, eax
  15. .text:0048657F                 call    sub_4A8E71
  16. .text:00486584                 mov     ebx, [esp+18h+var_8]
  17. .text:00486588                 add     esp, 4
  18. .text:0048658B                 test    esi, esi
  19. .text:0048658D                 jz      short loc_486593
  20. .text:0048658F                 cmp     esi, ebx
  21. .text:00486591                 jbe     short loc_486595
  22. .text:00486593 loc_486593:
  23. .text:00486593                 mov     esi, ebx
  24. .text:00486595 loc_486595:
  25. .text:00486595                 push    esi
  26. .text:00486596                 call    sub_484820
  27. .text:0048659B                 sub     ebx, esi
  28. .text:0048659D                 mov     eax, 0C22E4507h
  29. .text:004865A2                 mul     ebx
  30. .text:004865A4                 mov     eax, edx
  31. .text:004865A6                 shr     eax, 10h
  32. .text:004865A9                 inc     eax
  33. .text:004865AA                 mov     dword_501468, eax
  34. .text:004865AF loc_4865AF:
  35. .text:004865AF                 pop     edi
  36. .text:004865B0                 pop     esi
  37. .text:004865B1                 pop     ebx
  38. .text:004865B2                 add     esp, 8
  39. .text:004865B5                 retn
  40. .text:004865B5 sub_486560      endp
Во вложенных вызовах есть обращения к системным функциям даты и времени, а также присутствуют математические преобразования, которые по итогу дают количество прошедших дней. Записываем в начало функции вычисления триального срока по адресу 00486560 пару команд MOV EAX,1 и RET, сохраняем изменения. Теперь пробный период всегда будет равняться одному дню.

Сообщение о поврежденном файле
Сообщение о поврежденном файле

Но после запуска пропатченного файла появляется вот такое сообщение. В программе имеется проверка целостности. По тексту сообщения выходим на следующий код:
  1. .text:00487BD8                 call    sub_487800
  2. .text:00487BDD                 test    al, al
  3. .text:00487BDF                 jnz     short locret_487C00
  4. .text:00487BE1                 mov     eax, dword_5029F0
  5. .text:00487BE6                 mov     ecx, [eax+8]
  6. .text:00487BE9                 push    0
  7. .text:00487BEB                 push    offset aXmlMarkerCanNo
  8. ; "XML Marker can not run because of corru"...
  9. .text:00487BF0                 push    ecx
  10. .text:00487BF1                 mov     ecx, [eax+48h]
  11. .text:00487BF4                 call    sub_424090
  12. .text:00487BF9                 push    0
Контрольная сумма файла записана в файле checksum.xml, при запуске программы она сравнивается с актуальной, там же в файле еще какая-то цифровая подпись. Файл трогать не будем, просто заменяем условный переход по адресу 00487BDF на безусловный, тем самым нейтрализуем результаты проверки целостности файла. Сохраняем изменения, проверяем. Сообщение больше не появляется, программа запускается корректно.

Вечный триал
Вечный триал

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

Строка из заголовка
Строка из заголовка

Строку "Evaluation" из заголовка легко найти в файле. И точно так же легко заменить ее, например, на "Licensed" или "Registered", или вообще на пустую строку. Теперь и заголовок окна программы выглядит прилично.

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

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

Комментарии

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

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

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

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