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


Скриншот программы Clear Memory

Программа Clear Memory, как можно догадаться из названия, предназначена для очистки оперативной памяти компьютера и, как заявлено на офсайте, каким-то образом она оптимизирует работу приложений в Windows. Полезность программы, а также соответствие ее заявленным параметрам я оставляю на совести разработчика, а вот с желанием шароварщиков нарубить бабла я мириться не могу.

Скачиваем программу, смотрим. Это не дистрибутив, а уже самодостаточная программа. Ну хоть на том спасибо. Теперь пробуем запустить. Сразу после запуска получаем такое окно:


Окно активации программы

Ну это уже ни в какие ворота не лезет. СМС с телефона я отправляю только любимой жене, и уж тем более никогда не отправлю СМС ни на один короткий номер. Да и вообще, как быть владельцам зарубежных телефонов? Короче, это реальный косяк и сейчас мы его будем давить.

Исполняемый файл упакован UPX без всяких модификаций, он легко снимается самими же UPX с ключом -d. Смотрим дальше. Программа работает в демо-режиме с некоторыми ограничениями, при этом в вкладке "О программе" к номеру версии приписано слово "Demo":


Вкладка "О программе"

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


Нехорошая строка найдена

Вы ведь не забыли сразу же отправить распакованный файл в дизассемблер? Отлично, посмотрим в дизассемблере на код, где используются строчки о демонстрационной и полной версии.
CODE:004B3C98                 push    ebx
CODE:004B3C99                 mov     ebx, eax
; По умолчанию установить текст "Demo"
CODE:004B3C9B                 mov     edx, offset _str_1_0_0_Demo.Text
CODE:004B3CA0                 mov     eax, [ebx+3C0h]
CODE:004B3CA6                 call    @Controls@TControl@SetText
; Controls::TControl::SetText(System::AnsiString)
CODE:004B3CAB                 xor     edx, edx
CODE:004B3CAD                 mov     eax, [ebx+3ECh]
CODE:004B3CB3                 call    unknown_libname_554
CODE:004B3CB8                 mov     dl, 1
CODE:004B3CBA                 mov     eax, [ebx+3F0h]
CODE:004B3CC0                 call    @Controls@TControl@SetVisible$qqro
; Controls::TControl::SetVisible(bool)
CODE:004B3CC5                 mov     eax, ds:off_4B6F2C
CODE:004B3CCA                 mov     eax, [eax]
CODE:004B3CCC                 call    sub_4B022C
CODE:004B3CD1                 test    al, al
CODE:004B3CD3                 jnz     short loc_4B3CE4
CODE:004B3CD5                 mov     eax, ds:off_4B6F2C
CODE:004B3CDA                 mov     eax, [eax]
CODE:004B3CDC                 mov     edx, [eax]
CODE:004B3CDE                 call    dword ptr [edx+0ECh]
CODE:004B3CE4 loc_4B3CE4:
CODE:004B3CE4                 mov     eax, ds:off_4B6F2C
CODE:004B3CE9                 mov     eax, [eax]
; Вызвать какую-то функцию проверки
CODE:004B3CEB                 call    sub_4B022C
CODE:004B3CF0                 test    al, al
; Если она вернула AL не равный 0, то программа работает в полном режиме
CODE:004B3CF2                 jnz     short loc_4B3D06
CODE:004B3CF4                 xor     edx, edx
CODE:004B3CF6                 mov     eax, [ebx+340h]
CODE:004B3CFC                 mov     ecx, [eax]
CODE:004B3CFE                 call    dword ptr [ecx+0CCh]
CODE:004B3D04                 pop     ebx
CODE:004B3D05                 retn
CODE:004B3D06 ; ---------------------------------------------
CODE:004B3D06 loc_4B3D06:
; Заменить дефолтный текст на "Personal"
CODE:004B3D06                 xor     edx, edx
CODE:004B3D08                 mov     eax, [ebx+3F0h]
CODE:004B3D0E                 call    @Controls@TControl@SetVisible$qqro
; Controls::TControl::SetVisible(bool)
CODE:004B3D13                 mov     edx, offset _str_1_0_0_Personal.Text
CODE:004B3D18                 mov     eax, [ebx+3C0h]
CODE:004B3D1E                 call    @Controls@TControl@SetText
; Controls::TControl::SetText(System::AnsiString)
CODE:004B3D23                 pop     ebx

Ну тут все тоже предельно ясно. Так как проверка активации выполняется на стороне недоступного нам сервера, а алгоритм генерации кода активации нам неизвестен и в принципе не может быть получен, то придется воспользоваться патчем. Записываем команды MOV AL,1 / RET в начало функции проверки по адресу 004B022C, сохраняем изменения, запускаем.


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

Окно с предложением активации пропало, во вкладке "О программе" наблюдаем текст о персональной полнофункциональной версии. Кроме того, стала доступной функция оптимизации памяти, недоступная в демо-режиме. А главное, что программа стала портативной и будет прекрасно работать без всякой активации на любом компьютере. Вот так в очередной раз была побеждена человеческая жадность, а мы научились обходить несложную защиту, основанную на активации по СМС.
Теги:
защита, взлом
Добавлено: 16 Сентября 2013 02:10:17 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...