Blog. Just Blog

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

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

WiFi Hopper - очень толковый менеджер WiFi-сетей с возможностью переключения адаптера, автоматического выбора и переключения между беспроводными сетями и отображением графика сигнала. Неплохая замена стандартным виндовым инструментам по работе с WiFi. К сожалению, программа давно не обновляется, последней радостной новостью была поддержка Windows Vista, после этого разработка была прекращена. В программе используется неподписанный драйвер, так что даже на Windows 7 установить ее без бубнов проблематично, не говоря уже о более новых системах. Но для старых систем WiFi Hopper до сих пор остается актуальным. В пробном режиме некоторые функции отключены, а за полную версию требуется выложить денежку. За столько лет бездействия можно было бы сделать программу фриварной, но у автора другое мнение на этот счет. Впрочем, у нас тоже есть свое мнение.

Забираем с офсайта дистрибутив, устанавливаем. Если во время установки инсталлятор ругнется на несовместимую операционку и прекратит работу, то придется запустить его повторно, но предварительно установив режим совместимости на Windows Vista. А вот как решится вопрос с установкой неподписанного драйвера, тут я ничего сказать не могу. Моя Win7x86 ограничилась предупреждением, более старшие и 64-битные системы, скорее всего, вообще не дадут его установить. Если выбрать режим совместимости с Windows XP, то установится другая версия исполняемого файла, там методы лечения такие же, но адреса другие.

Окно регистрации
Окно регистрации

После запуска в заголовке программы сразу появляется надпись, что триал закончился. Але, гараж, я только что ее поставил первый раз. На попытку регистрации программа ломится на свой сервер с целью проверки имени и серийника. Нет уж, перебьется, будем искать другие методы. Исполняемый файл ничем не упакован, отправляем его на разбор в дизассемблер. Поиском по слову "trial" обнаруживается вот такой код:
  1. ; Загрузить значение флага
  2. .text:004226BA                 mov     eax, dword_46DEA0
  3. .text:004226BF                 dec     eax
  4. .text:004226C0                 jz      short loc_4226F8
  5. .text:004226C2                 dec     eax
  6. .text:004226C3                 jz      short loc_4226D9
  7. .text:004226C5                 dec     eax
  8. .text:004226C6                 lea     ecx, [esi+2Ch]
  9. .text:004226C9                 jz      short loc_4226D2
  10. .text:004226CB                 push    offset aUnknownProgram
  11. ; "Unknown program mode!"
  12. .text:004226D0                 jmp     short loc_422700
  13. .text:004226D2 ; ----------------------------------------------
  14. .text:004226D2 loc_4226D2:
  15. .text:004226D2                 push    offset aRegisteredVers
  16. ; "Registered Version"
  17. .text:004226D7                 jmp     short loc_422700
  18. .text:004226D9 ; ----------------------------------------------
  19. .text:004226D9 loc_4226D9:
  20. .text:004226D9                 mov     ecx, offset unk_46DEE8
  21. .text:004226DE                 call    sub_4282E0
  22. .text:004226E3                 push    eax
  23. .text:004226E4                 lea     ecx, [esi+2Ch]
  24. .text:004226E7                 push    offset aTrialDaysRemai
  25. ; "Trial, days remaining: %d"
  26. .text:004226EC                 push    ecx
Код несложный, но поясню словами что тут происходит. Загружается значение переменной-флага, после чего из него вычитается по единичке и при достижении нулевого значения выполняется переход на соответствующую ветку алгоритма. 1 соответствует истекшему триалу, 2 - действующему триалу, а вот 3 дает нам зарегистрированную программу. Давайте посмотрим по перекрестным ссылкам где и как инициализируется этот флаг.

Инициализация флага
Инициализация флага

Нужным нам значением флаг инициализируется только в одном месте, а где-то рядышком, судя по адресам, ему присваиваются и другие значения. Переходим по адресу инициализации. Если посмотреть целиком функцию по адресу 0042E560, то можно увидеть, что именно она отвечает за проверку валидности регистрационных данных. Тут и множественные сравнения строчек, и попавшая в немилость крякерская команда Team Lz0, и установка одного из трех значений флага. Проверка вызывается только из одного места, зато флаг регистрации затем используется во многих проверках. Чтобы не возиться с условными переходами, сразу же впечатываем в начало функции пару команд MOV dword [46DEA0],3 и RET. Теперь при любом раскладе будет установлено правильное значение. Сохраняем изменения, проверяем результат.

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

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

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

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

Комментарии

Отзывы посетителей сайта о статье
Max the Doctor (14.08.2022 в 17:52):
Спасибо за статью, вспомнил былое величие давних времён...

Как альтернативный вариант - 0x0002e012: 74 -> 7d
и программу можно регистрировать на любое имя (теперь уж точно красуется лицензия :)

P.S. Денежку выложить не получится, на оф.сайте статус Retired и купить нельзя (точно так же как и активировать без подправки одного байта).

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

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

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