Исследование защиты программы Zeta Debugger
Скриншот программы Zeta Debugger
Zeta Debugger, по заявлению его создателя, представляет собой отладчик с поддержкой отладочной информации, оставляемой некоторыми компиляторами в файлах. На самом деле все не так. И без того небогатый функционал этого неуклюжего поделия напрочь убивается чудовищным вырвиглазным интерфейсом "добро пожаловать в 90-е". А главный прикол в том, что этот отладчик еще и платный. К счастью, проект давно загнулся, но это как раз тот случай, когда ни капельки не жалко.
Офсайт недоступен, ссылки на скачивание не работают, но у меня в закромах завалялся дистрибутив версии 1.4. В интернетах мне удалось наковырять более свежую версию 1.5, но там урезанная бесплатная версия, которая не регистрируется. Да и не вижу смысла гоняться за последним релизом.
Устанавливаем, смотрим. Главный исполняемый файл ничем не упакован, поэтому отправляем отладчик в дизассемблер. Мммм, как звучит-то!
Окно регистрации
Если внимательно посмотреть на окно регистрации, то можно заметить, что поле ввода регистрационного имени заблокировано. В него принудительно вписывается имя учетной записи пользователя. Это означает, что регистрация привязывается как минимум к этой информации, и сделать универсальное решение на основе серийного номера не получится.
Как я понимаю, кнопка "ОК" активируется автоматически при вводе правильного серийника. Поищем в ресурсах идентификаторы кнопок, какие-нибудь сообщения об успехе регистрации, ну и всякое подобное.
Картинка в ресурсах
И обнаруживается вот что. Вместо обычного сообщения о правильной регистрации в программе используется КАРТИНКА попугайской расцветки! По всей видимости, в случае успеха на нее заменяется картинка в окне регистрации. Индекс этой картинки 200, что в hex-значении равняется 0C8h. Поищем в коде, где это значение используется. Таких мест найдется несколько, но только одно относится к ресурсам:
Code (Assembler) : Убрать нумерацию
- .text:00426E79 call ds:SetCursor
- .text:00426E7F push offset byte_46731C ; lpString
- .text:00426E84 mov edx, dword_46736C
- .text:00426E8A push edx ; hWnd
- .text:00426E8B call ds:SetWindowTextA
- .text:00426E91 push 1 ; uIDEvent
- .text:00426E93 mov eax, [ebp+hWnd]
- .text:00426E96 push eax ; hWnd
- .text:00426E97 call ds:KillTimer
- .text:00426E9D mov ecx, dword_46739C
- .text:00426EA3 push ecx ; ho
- .text:00426EA4 call ds:DeleteObject
- ; Загрузить картинку из ресурсов
- .text:00426EAA push 0C8h ; lpName
- .text:00426EAF mov edx, hModule
- .text:00426EB5 push edx ; hModule
- .text:00426EB6 call sub_453600
- .text:00426EBB add esp, 8
- .text:00426EBE mov dword_46739C, eax
- .text:00426EC3 push 0 ; bErase
- .text:00426EC5 push offset stru_4673A0 ; lpRect
- .text:00426ECA mov eax, [ebp+hWnd]
- .text:00426ECD push eax ; hWnd
- ; Перерисовать окно
- .text:00426ECE call ds:InvalidateRect
Code (Assembler) : Убрать нумерацию
- .text:00426DD3 cmp [ebp+var_108], 10h
- .text:00426DDA jnz loc_426F22
Code (Assembler) : Убрать нумерацию
- .text:00426D38 call sub_427029
- .text:00426D3D add esp, 8
- .text:00426D40 mov [ebp+var_108], eax
После каждого запуска отладчика в папке с программой создается файл zd.log. При обычном запуске процесс работы выглядит примерно так:
22 Starting main loop
23 [437103]: cmdline='"C:\Program Files\ZD\zd.exe" '
24 SAMPLE PLUG-IN: Shutting down...
25 Shutting down the debugger...
26 [401088]: OK
А вот при запуске патченного файла в лог добавляется интересная строчка:
22 Starting main loop
23 [437103]: cmdline='"C:\Program Files\ZD\zd.exe" '
24 [440883]: Patrol failedSAMPLE PLUG-IN: Shutting down...
25 Shutting down the debugger...
26 [401088]: OK
Несложно догадаться, что это и есть реакция защиты от изменений. Вернемся в дизассемблер и посмотрим, где эта строчка проявляется:
Code (Assembler) : Убрать нумерацию
- .text:00440861 add eax, 0F0h
- .text:00440866 mov dword_46B938, eax
- ; Проверка
- .text:0044086B cmp dword_46B938, 100h
- ; Условный переход в случае несовпадения
- .text:00440875 jnz short loc_440879
- ; Перепрыгнуть вывод строки
- .text:00440877 jmp short loc_440812
- .text:00440879 ; ------------------------------------------
- .text:00440879 loc_440879:
- .text:00440879 push offset aPatrolFailed
- ; "Patrol failed"
- .text:0044087E call sub_44FEAA
- .text:00440883 add esp, 4
- .text:00440886 mov eax, [ebp+arg_4]
- .text:00440889 mov ecx, hWndNewParent
- .text:0044088F mov [eax], ecx
Программа успешно "зарегистрирована"
Для чистоты эксперимента переведем системное время на пару месяцев вперед, программа все так же работает. Цель достигнута. Можно запускать деинсталлятор и удалять этого монстра с жесткого диска.
Просмотров: 2482 | Комментариев: 9
Метки: исследование защиты, реверсинг
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
user
(28.03.2018 в 22:44):
..просто не сразу разобрался, что "region59" туда тоже относится.
user
(28.03.2018 в 22:31):
Да, так и есть.
ManHunter
(27.03.2018 в 16:30):
Хз, файл на месте, никуда не девался. Может местный провайдер режет доступ к Я.Диску?
user
(25.03.2018 в 23:17):
-- Добавлено --
Скачалась нормально версия 1.4 отсюда: www.duote.com/soft/1953.html
Скачалась нормально версия 1.4 отсюда: www.duote.com/soft/1953.html
user
(25.03.2018 в 16:54):
Что-то дистрибутив версии 1.4 не скачивается из указанного места.
И вообще, найти его в сети не удаётся.
В вебархиве только его версия 1.5.
И вообще, найти его в сети не удаётся.
В вебархиве только его версия 1.5.
ManHunter
(24.03.2018 в 10:10):
Все когда-то было, но это же не причина, чтобы больше ничего не делать.
xussr
(24.03.2018 в 04:26):
Не впечатлило уже проходилили подобное -
ManHunter
(23.03.2018 в 21:32):
Интерфейс напоминает "домашние странички" времен становления интернета. Не хватает только анимации с вращающимися e-mail, бегающими собачками, Comic Sans и прочего днища.
pawel97
(23.03.2018 в 21:10):
Загнулся, вырвиглазный, не жалко, неуклюжее поделие, но дистриб оставлю :)
Хоткеи аффтар делал по принципу лишь бы не как у всех.
Хоткеи аффтар делал по принципу лишь бы не как у всех.
Добавить комментарий
Заполните форму для добавления комментария