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


Скриншот программы Hide Window Plus

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

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


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

Очевидно, что тут названия проверяемых ключей, а главное строка, которая должна где-то появиться, если регистрация правильная. Посмотрим на это место получше в дизассемблере:
...
CODE:004836A6                 lea     eax, [ebp+var_8]
CODE:004836A9                 push    eax
CODE:004836AA                 mov     ecx, offset dword_4837A8
CODE:004836AF                 mov     edx, offset aLicense_2 ; "License"
CODE:004836B4                 mov     eax, ebx
CODE:004836B6                 mov     edi, [eax]
CODE:004836B8                 call    dword ptr [edi]
CODE:004836BA                 mov     eax, [ebp+var_8]
CODE:004836BD                 push    eax
CODE:004836BE                 push    0
CODE:004836C0                 lea     eax, [ebp+var_C]
CODE:004836C3                 push    eax
CODE:004836C4                 mov     ecx, offset aEmail_0 ; "Email"
CODE:004836C9                 mov     edx, offset aLicense_2 ; "License"
CODE:004836CE                 mov     eax, ebx
CODE:004836D0                 mov     edi, [eax]
CODE:004836D2                 call    dword ptr [edi]
CODE:004836D4                 mov     eax, [ebp+var_C]
CODE:004836D7                 push    eax
CODE:004836D8                 push    0
CODE:004836DA                 lea     eax, [ebp+var_10]
CODE:004836DD                 push    eax
CODE:004836DE                 mov     ecx, offset aName_0 ; "Name"
CODE:004836E3                 mov     edx, offset aLicense_2 ; "License"
CODE:004836E8                 mov     eax, ebx
CODE:004836EA                 mov     edi, [eax]
CODE:004836EC                 call    dword ptr [edi]
CODE:004836EE                 mov     edx, [ebp+var_10]
CODE:004836F1                 mov     eax, esi
CODE:004836F3                 pop     ecx
; Откуда-то читаем данные о регистрации, затем отправляем их на проверку
CODE:004836F4                 call    sub_483400
; Сохранить результат проверки в переменной-флаге
CODE:004836F9                 mov     [esi+46Ch], al
; Если функция проверки вернула AL не равный 0, то все правильно
CODE:004836FF                 cmp     byte ptr [esi+46Ch], 0
; Иначе программа не зарегистрирована
CODE:00483706                 jz      short loc_48376F
CODE:00483708                 mov     eax, [esi+458h]
CODE:0048370E                 call    sub_457CC8
CODE:00483713                 push    offset aThisProgramIsR
; "This program is registered to "
CODE:00483718                 push    0
CODE:0048371A                 lea     eax, [ebp+var_18]
CODE:0048371D                 push    eax
...

Первый способ лечения самый быстрый, но самый неспортивный. По адресу 00483400 записываем команды MOV AL,1; RET 04h и программа считает любые регистрационные данные правильными.

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

на стеке лежит целая куча всякого интересного:


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

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


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

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