Исследование защиты программы XML Marker
Скриншот программы XML Marker
XML Marker - весьма недурственный просмотрщик и редактор файлов в формате XML и JSON. При более чем скромных размерах, XML Marker позволяет просматривать содержимое в виде удобной древовидной структуры, с подсветкой тегов, проверкой синтаксиса, с возможностью поиска и сортировки, при этом совершенно спокойно открывает файлы даже в несколько сот мегабайт. В ознакомительном режиме программа работает без никаких ограничений, но непродолжительное время. Как гласит ирландская пословица, "когда бог создал время, он создал его достаточно". Давайте поделимся кусочком вечности с программой.
Забираем с офсайта дистрибутив последней версии, устанавливаем, смотрим. Исполняемый файл ничем не упакован, отправляем его на дизассемблирование.
Окно "О программе"
В окне "О программе" отображается счетчик пробных дней, прошедших с момента первого запуска. Переводом системной даты на месяц вперед удалось смоделировать истечение пробного периода. Теперь можно только выйти из программы, ввести ключ или метнуться в кассу. Ну, такой себе выбор.
У нас есть строки, из которых формируется фраза о количестве дней, давайте поищем их в файле. Ведь наверняка именно там запрашивается или вычисляется это количество для отображения в числовом виде. По фрагментам строк выходим на вот такой код:
Code (Assembler) : Убрать нумерацию
- .text:00485E6C lea eax, [esi-4]
- ; Вызвать функцию проверки
- .text:00485E6F call sub_486560
- ; Ее результат меньше или равен 30?
- .text:00485E74 cmp eax, 1Eh
- .text:00485E77 jbe short loc_485E83
- ; Установить красный текст надписи
- .text:00485E79 push 0FFh ; color
- .text:00485E7E call sub_4233A0
- .text:00485E83 loc_485E83:
- .text:00485E83 lea ecx, [esp+20h+arg_428]
- .text:00485E8A mov edx, ecx
- .text:00485E8C lea eax, [esp+20h+arg_827]
- .text:00485E93 mov [esp+20h+arg_418], ebp
- .text:00485E9A mov [esp+20h+arg_414], offset off_4EBC30
- .text:00485EA5 mov [esp+20h+arg_41C], ecx
- .text:00485EAC mov [esp+20h+arg_420], edx
- .text:00485EB3 mov [esp+20h+arg_424], eax
- .text:00485EBA mov [esp+20h+arg_428], 0
- .text:00485EC2 push offset aYouAreNowOnDay
- ; "You are now on day "
- .text:00485EC7 lea edi, [esp+24h+arg_414]
- .text:00485ECE mov [esp+24h+arg_1C9C], 1
- .text:00485ED9 call sub_401020
- .text:00485EDE lea eax, [esi-4]
- ; Вызвать функцию проверки и преобразовать результат в число
- .text:00485EE1 call sub_486560
- .text:00485EE6 mov ecx, eax
- .text:00485EE8 call sub_401200
- .text:00485EED push eax
- .text:00485EEE call sub_401020
- .text:00485EF3 push offset aOfThe30DaysEva
- ; " of the 30 days evaluation period."
- .text:00485EF8 call sub_401020
- .text:00485EFD mov eax, [esp+20h+arg_420]
Code (Assembler) : Убрать нумерацию
- .text:00486560 sub_486560 proc near
- .text:00486560 sub esp, 8
- .text:00486563 push ebx
- .text:00486564 push esi
- .text:00486565 push edi
- .text:00486566 mov edi, [eax+3Ch]
- .text:00486569 mov eax, dword_501468
- .text:0048656E test eax, eax
- .text:00486570 jns short loc_4865AF
- .text:00486572 push edi
- .text:00486573 call sub_4847E0
- .text:00486578 lea ecx, [esp+14h+var_8]
- .text:0048657C push ecx
- .text:0048657D mov esi, eax
- .text:0048657F call sub_4A8E71
- .text:00486584 mov ebx, [esp+18h+var_8]
- .text:00486588 add esp, 4
- .text:0048658B test esi, esi
- .text:0048658D jz short loc_486593
- .text:0048658F cmp esi, ebx
- .text:00486591 jbe short loc_486595
- .text:00486593 loc_486593:
- .text:00486593 mov esi, ebx
- .text:00486595 loc_486595:
- .text:00486595 push esi
- .text:00486596 call sub_484820
- .text:0048659B sub ebx, esi
- .text:0048659D mov eax, 0C22E4507h
- .text:004865A2 mul ebx
- .text:004865A4 mov eax, edx
- .text:004865A6 shr eax, 10h
- .text:004865A9 inc eax
- .text:004865AA mov dword_501468, eax
- .text:004865AF loc_4865AF:
- .text:004865AF pop edi
- .text:004865B0 pop esi
- .text:004865B1 pop ebx
- .text:004865B2 add esp, 8
- .text:004865B5 retn
- .text:004865B5 sub_486560 endp
Сообщение о поврежденном файле
Но после запуска пропатченного файла появляется вот такое сообщение. В программе имеется проверка целостности. По тексту сообщения выходим на следующий код:
Code (Assembler) : Убрать нумерацию
- .text:00487BD8 call sub_487800
- .text:00487BDD test al, al
- .text:00487BDF jnz short locret_487C00
- .text:00487BE1 mov eax, dword_5029F0
- .text:00487BE6 mov ecx, [eax+8]
- .text:00487BE9 push 0
- .text:00487BEB push offset aXmlMarkerCanNo
- ; "XML Marker can not run because of corru"...
- .text:00487BF0 push ecx
- .text:00487BF1 mov ecx, [eax+48h]
- .text:00487BF4 call sub_424090
- .text:00487BF9 push 0
Вечный триал
В окне "О программе" теперь всегда отображается первый день испытательного периода. С вечным триалом разобрались, с проверкой целостности тоже, осталась небольшая косметика. Так как у нас нет полноценной лицензии ни в каком виде, в заголовке главного окна программы выводится надпись о пробном периоде.
Строка из заголовка
Строку "Evaluation" из заголовка легко найти в файле. И точно так же легко заменить ее, например, на "Licensed" или "Registered", или вообще на пустую строку. Теперь и заголовок окна программы выглядит прилично.
Цель достигнута. В принципе, окно "О программе" можно было бы покромсать еще, но туда можно просто не заглядывать. Цель достигнута. Спасибо авторам за отличный инструмент.
Просмотров: 345 | Комментариев: 0
Метки: исследование защиты
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет
Добавить комментарий
Заполните форму для добавления комментария