
Скриншот программы 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, сохраняем изменения, запускаем.

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