Blog. Just Blog

Исследование защиты программы Hide Window Plus

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

Программа Hide Window Plus предназначена для быстрого скрытия окон различных приложений по нажатию горячей клавиши или по клику правой кнопкой мышки на кнопке закрытия окна. Это бывает полезно, когда какое-нибудь чудило пытается заглядывать вам через плечо, или на горизонте офиса появляется начальник. Кроме окон программа умеет также скрывать значки в трее, что дает еще больше безопасности. Как вы уже догадались, раз программа появилась в этой рубрике сайта, значит с ней что-то не так.

Скачиваем дистрибутив, устанавливаем, смотрим что у нас есть. В окне настроек есть ссылка "Enter registration key", в открывшееся окно ввода надо ввести имя пользователя, адрес email и регистрационный ключ. На ввод любых данных программа благодарит за регистрацию и предлагает перезапустить себя для проверки регистрационных данных. После перезапуска, естественно, программа остается незарегистрированной, и никаких сообщений об ошибке не выдает. Это не есть хорошо. Отправим файл в дизассемблер и поищем что-нибудь еще, связанное с регистрацией. Поиск строки "registered" наводит нас на следующие данные:

Строки в исполняемом файле
Строки в исполняемом файле

Очевидно, что тут названия проверяемых ключей, а главное строка, которая должна где-то появиться, если регистрация правильная. Посмотрим на это место получше в дизассемблере:
  1. ...
  2. CODE:004836A6                 lea     eax, [ebp+var_8]
  3. CODE:004836A9                 push    eax
  4. CODE:004836AA                 mov     ecx, offset dword_4837A8
  5. CODE:004836AF                 mov     edx, offset aLicense_2 ; "License"
  6. CODE:004836B4                 mov     eax, ebx
  7. CODE:004836B6                 mov     edi, [eax]
  8. CODE:004836B8                 call    dword ptr [edi]
  9. CODE:004836BA                 mov     eax, [ebp+var_8]
  10. CODE:004836BD                 push    eax
  11. CODE:004836BE                 push    0
  12. CODE:004836C0                 lea     eax, [ebp+var_C]
  13. CODE:004836C3                 push    eax
  14. CODE:004836C4                 mov     ecx, offset aEmail_0 ; "Email"
  15. CODE:004836C9                 mov     edx, offset aLicense_2 ; "License"
  16. CODE:004836CE                 mov     eax, ebx
  17. CODE:004836D0                 mov     edi, [eax]
  18. CODE:004836D2                 call    dword ptr [edi]
  19. CODE:004836D4                 mov     eax, [ebp+var_C]
  20. CODE:004836D7                 push    eax
  21. CODE:004836D8                 push    0
  22. CODE:004836DA                 lea     eax, [ebp+var_10]
  23. CODE:004836DD                 push    eax
  24. CODE:004836DE                 mov     ecx, offset aName_0 ; "Name"
  25. CODE:004836E3                 mov     edx, offset aLicense_2 ; "License"
  26. CODE:004836E8                 mov     eax, ebx
  27. CODE:004836EA                 mov     edi, [eax]
  28. CODE:004836EC                 call    dword ptr [edi]
  29. CODE:004836EE                 mov     edx, [ebp+var_10]
  30. CODE:004836F1                 mov     eax, esi
  31. CODE:004836F3                 pop     ecx
  32. ; Откуда-то читаем данные о регистрации, затем отправляем их на проверку
  33. CODE:004836F4                 call    sub_483400
  34. ; Сохранить результат проверки в переменной-флаге
  35. CODE:004836F9                 mov     [esi+46Ch], al
  36. ; Если функция проверки вернула AL не равный 0, то все правильно
  37. CODE:004836FF                 cmp     byte ptr [esi+46Ch], 0
  38. ; Иначе программа не зарегистрирована
  39. CODE:00483706                 jz      short loc_48376F
  40. CODE:00483708                 mov     eax, [esi+458h]
  41. CODE:0048370E                 call    sub_457CC8
  42. CODE:00483713                 push    offset aThisProgramIsR
  43. ; "This program is registered to "
  44. CODE:00483718                 push    0
  45. CODE:0048371A                 lea     eax, [ebp+var_18]
  46. CODE:0048371D                 push    eax
  47. ...
Первый способ лечения самый быстрый, но самый неспортивный. По адресу 00483400 записываем команды MOV AL,1; RET 04h и программа считает любые регистрационные данные правильными.

Второй способ - пройдем функцию проверки регистрации под отладчиком. На этапе последней проверки
  1. CODE:00483472                 mov     eax, [ebp+arg_0]
  2. CODE:00483475                 mov     edx, [ebp+var_C]
  3. CODE:00483478                 call    sub_404464
  4. CODE:0048347D                 setz    bl
на стеке лежит целая куча всякого интересного:

Данные на стеке
Данные на стеке

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

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

Остался третий способ - надо узнать, как получилась строка правильного серийного номера. Снова медитируем под отладчиком на содержимое стека и видим там более длинную строку "5F4302772CF7E0DE8A0C3C71DB4055FE", первые 8 символов которой и есть наш серийный номер, а также другую строку, составленную из регистрационного имени и адреса email. Видимо из этой строки как-то получается первая строка. Первое, что я попробовал наугад - это MD5 от строки. И, как ни странно, им оказалась строка "5F4302772CF7E0DE8A0C3C71DB4055FE". Вот и вся защита. Берем регистрационное имя, в конец к нему дописываем регистрационный email, от полученной строки считаем MD5. Первые 8 символов результата в верхнем регистре и есть серийный номер. Кейген теперь вы сможете написать самостоятельно.

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

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

Комментарии

Отзывы посетителей сайта о статье
xamtra (18.01.2020 в 10:19):
USE x32dbg

SET "BREAKPOINT" AT 00483472
1. PRESS "RUN" 3 TIMES TO OPEN HDP 
2. ENTER ANY REGISTRATION KEY, KEEP PRESSING OK UNTIL IT CLOSES COMPLETELY
3. NOW CLICK "RESTART"
4. PRESS "RUN" 2 TIMES
5. LOOK RIGHT DOWN CORNER STACK WINDOW FOR CORRECT REGISTRATION KEY
6. PRESS "RESTART" BUTTON TO RUN THIS PROCEDURE AGAIN.

Proof:
Your name: xamtra
Email: testsuccess@manhunt.ru
License key: 04E6ED43
xamtra (07.09.2016 в 01:10):
Thank you finally I found my own serial key. Much appreciated.
Tarkett (03.11.2012 в 10:37):
У меня зврегилась с первого раза
Вводил эти данные:
Name - giveawayoftheday
Email - giveawayoftheday
Key - 1A54F846

Прога сказала что для регистрации ее нужно перезапустить,перезапустил,активация не слетела )
Афоня (15.06.2012 в 16:48):
В обычном тотал коммандере просчитал МД5 и прога зарегена. ;)
Спасибо за статью!
SVS (06.03.2012 в 19:30):
DimitarSerg, а я бы заказала статью про любую прожку, которая имеет дурную привычку привязываться к HWID.
ManHunter (25.02.2012 в 19:47):
Чем Kanal от PEiD не устраивает? Тоже все прекрасно показывает. Только даже до него дело не дошло, анализ закончился на первой же попытке.
Voffka (25.02.2012 в 11:40):
Для Ольки есть плагин Hash Sniffer http://forum.tuts4you.com/topi...romsearch__1
Это на будущее, чтоб не пришлось гадать чем захэшировано.
ManHunter (25.02.2012 в 09:56):
"Короче, Склифосовский!" :) Перефразировал, чтобы не было непонимания.
brute (25.02.2012 в 09:32):
нашёл это правило: http://russkiy-na-5.ru/articles/180
в изъявительном наклонении пишется Е, а в повелительном И. Вот и разберись из контекста, какое тут наклонение :)
ManHunter (23.02.2012 в 19:07):
Никакой ошибки.
"Кейген теперь [Вы легко] напишЕте самостоятельно"
но
"Теперь напишИте кейген самостоятельно"
brute (23.02.2012 в 18:41):
нашёл ошибку :^)
Кейген теперь напишЕте самостоятельно.
Voffka (22.02.2012 в 00:22):
DimitarSerg, разбор блочных шифров ни чем не отличается от разбора любой другой защиты, только проще, т.к. все эти алгоритмы уже разобраны и реализованы на всех возможных языках, остается только понять что нужно зашифровать\расшифровать и тупо подставить ключ. Уж лучше про ассиметричное шифрование.
ManHunter (20.02.2012 в 17:38):
Может у кого-то и есть желание проводить дни и недели в отладчике, ковыряясь в шифрах, а мне есть куда тратить свое время.
DimitarSerg (20.02.2012 в 17:30):
Интересно, но просто...
Мы знаем твои нехилые возможности, может что-то поинтереснее разберешь ? Хотелось бы увидеть разбор рег.схемы на основе блочных шифров типа RijnDael, Des :)
AyTkACT (20.02.2012 в 07:41):
Как обычно всё расжёвано и дополнить нечем. =D

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

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

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