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

Скриншот программы Ping Manager
Ping Manager - это набор сетевых инструментов, основанных на ICMP-запросах, включающий: обычный пинг, сканирование диапазона IP-адресов, трассировку маршрута и ping-тестирование пути. Каждая страница имеет уникальные настройки как для ручного, так и для автоматического режима работы. Никак не могу привыкнуть к тому, что за хорошие программы почему-то требуют денег.
Забираем дистрибутив, устанавливаем, запускаем, смотрим. Главный исполняемый файл ничем не упакован, отправляем его на анализ в дизассемблер. Заодно посмотрим, какие функции там используются.

Триальный текст
В тексте окна появляется строка о триальном времени, а если установить системное время на несколько месяцев вперед, появится сообщение об окончании пробного периода.
Code (Assembler) : Убрать нумерацию
- .text:00437378 mov [ebp+var_17800], 264h
- .text:00437381 mov edx, offset aUnregisteredVe
- ; " - Unregistered version"
- .text:00437386 lea eax, [ebp+var_177DC]
- .text:0043738C call @System@AnsiString@$bctr$qqrpxc
- .text:00437391 inc [ebp+var_177F4]
- .text:00437397 lea edx, [ebp+var_177DC]
Code (Assembler) : Убрать нумерацию
- .text:00436CD3 mov edx, 2
- .text:00436CD8 call sub_597D98
- .text:00436CDD xor ecx, ecx
- ; Строка с байтом проверки
- .text:00436CDF mov cl, byte_60C33C
- .text:00436CE5 test ecx, ecx
- .text:00436CE7 jle loc_437378
- .text:00436CED mov [ebp+var_17800], 168h
- .text:00436CF6 mov edx, offset aRegisteredVers
- ; " - Registered version"
- .text:00436CFB lea eax, [ebp+var_17788]
- .text:00436D01 call @System@AnsiString@$bctr$qqrpxc
- .text:00436D06 inc [ebp+var_177F4]
- .text:00436D0C lea edx, [ebp+var_17788]
- .text:00436D12 lea eax, [ebp+var_17720]
- .text:00436D18 call sub_597DDC
- .text:00436D1D dec [ebp+var_177F4]
- .text:00436D23 lea eax, [ebp+var_17788]
- .text:00436D29 mov edx, 2
- .text:00436D2E call sub_597D98
- .text:00436D33 xor ecx, ecx
- .text:00436D35 mov cl, byte_60C33C

Перекрестные ссылки на ячейку памяти
Как видите, в двух местах кода устанавливается значение флага регистрации, и в двух других местах этот флаг инициализируется нужным значением. Все остальное - это проверки и сопутствующие операции.
Code (Assembler) : Убрать нумерацию
- .text:00407600 mov [ebp+var_18], 18h
- .text:00407606 xor ecx, ecx
- .text:00407608 mov byte_60C334, 1
- .text:0040760F mov dword_60C338, ecx
- ; Такой флаг инициализируется
- .text:00407615 mov byte_60C33C, 0
- .text:0040761C mov eax, [ebp+var_4]
- .text:0040761F mov byte_60C33E, 0
- .text:00407626 mov byte_60C33F, 0
- .text:0040762D mov byte_60C340, 0
Code (Assembler) : Убрать нумерацию
- .text:00435BC3 mov [ebp+var_17C30], 0
- ; Такой флаг инициализируется
- .text:00435BCA mov byte_60C33C, 0
- .text:00435BD1 lea edx, [ebp+var_17C30] ; dest
- .text:00435BD7 lea eax, [ebp+dest] ; dest
- .text:00435BDD call sub_4078AC
- .text:00435BE2 test al, al
- .text:00435BE4 jz short loc_435BFD
- .text:00435BE6 mov [ebp+var_17BF0], 0
- .text:00435BED lea eax, [ebp+dest]
- .text:00435BF3 call loc_407BA4
- .text:00435BF8 mov byte_60C33C, al

Триальное окно
При попытке вызвать любую функцию программы появляется сообщение "Evaluation period is over.", и, по сути, все функции программы становятся недоступными, они не работают, несмотря на возможные визуальные элементы интерфейса. Чтобы программа действительно работала, требуется следующий анализ, поиск и модификация реальной проверки срока действия.
Посмотрим на строку "Evaluation period is over.", она, как выясняется, встречается не один раз, а в нескольких экземплярах в коде. Эти вхождения выглядят похоже, но расположены отдельно для разных элементов интерфейса, вкладки или функции программы. То есть, проверка реализована локально в каждом обработчике, а не централизованно. Возьмем, например, вот такой кусок:
Code (Assembler) : Убрать нумерацию
- .text:0042824C inc [ebp+var_44]
- .text:0042824F mov [ebp+var_50], 18h
- .text:00428255 mov [ebp+var_50], 24h
- ; Проверка флага
- .text:0042825B cmp byte_60C334, 0
- ; Проверка перехода
- .text:00428262 jnz loc_42888B
- .text:00428268 mov eax, dword_60B38C
- .text:0042826D test eax, eax
- ...
- ...
- ...
- .text:0042888B loc_42888B:
- .text:0042888B lea eax, [ebp+s] ; s
- .text:0042888E call sub_426C34
- .text:00428893 mov [ebp+var_50], 24h
- .text:00428899 push 2 ; n
- .text:0042889B push 0 ; c
- .text:0042889D lea edx, [ebp+s]
- .text:004288A0 push edx ; s
- .text:004288A1 call _memset
- .text:004288A6 add esp, 0Ch
- .text:004288A9 mov edx, offset aEvaluationPe_3
- ; "Evaluation period is over.\r\nPlease regi"...
- .text:004288AE or byte ptr [ebp+s], 4
- .text:004288B2 push 0
- .text:004288B4 lea eax, [ebp+var_3C]

Перекрестные ссылки на ячейку памяти
По адресу 00407608 устанавливается байт флага mov byte_60C334,1, причем находится всего на несколько строк выше, в уже знакомом нам участке кода, где он инициализируется.
Code (Assembler) : Убрать нумерацию
- .text:00407600 mov [ebp+var_18], 18h
- .text:00407606 xor ecx, ecx
- ; Такой флаг инициализируется
- .text:00407608 mov byte_60C334, 1
- .text:0040760F mov dword_60C338, ecx
- .text:00407615 mov byte_60C33C, 0
- .text:0040761C mov eax, [ebp+var_4]
- .text:0040761F mov byte_60C33E, 0
- .text:00407626 mov byte_60C33F, 0
- .text:0040762D mov byte_60C340, 0
Просмотров: 948 | Комментариев: 3
Метки: исследование защиты, сеть
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(19.09.2025 в 11:47):
Варианты есть всегда, но бывает сложно их толково написать, да и чтобы поняли :)
0101
(19.09.2025 в 10:23):
На сайте программы есть и другие программы поинтереснее, ничем не накрытые и лечатся правкой одного байта.
kaktustv
(18.09.2025 в 22:28):
Если изменить вторую инструкцию mov byte_60C33C на запись значения 0 на 28, получим в заголовке "Registered version (Enterprise License)".
Мелочь, конечно, но приятно!
Мелочь, конечно, но приятно!
Добавить комментарий
Заполните форму для добавления комментария


