
Скриншот программы ViVi Cursor
Есть такая программа - ViVi Cursor от ViVi Software. Какой-то серьезной практической пользы она не представляет, но обязательно понравится любителям украшательств системы. Также будет неплохим презентом для какой-нибудь знакомой блондинки :) Смысл ViVi Cursor в том, что при перемещении к курсору добавляется цветной шлейф из различных фигурок: звездочек, цветочков, музыкальных нот, следов зверей и т.д. Анимированные картинки с примерами можно посмотреть на офсайте программы. Качаем дистрибутив, устанавливаем, запускаем. Для ознакомления с программой нам дается 10 минут, после чего придется расстаться тоже с десяткой, но на этот раз вечнозеленых рублей. Естественно, такой вариант не для нас.
Диалоговых окон в программе немного, и в About можно найти внешние признаки триальности:

Триальное окно About
В дизассемблере найдем "нехорошую" строку и посмотрим код, который на нее ссылается:
...
.text:0040AD23 mov ebx, eax
.text:0040AD25 mov eax, offset stru_4C520C
.text:0040AD2A call @__InitExceptBlockLDTC
; Вызвать процедуру проверки регистрации. На выходе AL = 0 - программа не
; зарегистрирована, AL > 0 - программа зарегистрирована
.text:0040AD2F call sub_401FEC
.text:0040AD34 test al, al
; Переход на триальную ветку алгоритма
.text:0040AD36 jz loc_40ADDF
; Вывести в About строку о полной версии программы
.text:0040AD3C mov [ebp+var_28], 8
.text:0040AD42 xor edx, edx
.text:0040AD44 mov [ebp+var_4], edx
.text:0040AD47 lea ecx, [ebp+var_4]
.text:0040AD4A inc [ebp+var_1C]
; Указатель на строку "ViVi Cursor Full Version"
.text:0040AD4D mov eax, offset aViviCursorFull
.text:0040AD52 mov edx, off_4CF95C
...
; Часть кода пропущена для экономии места
...
.text:0040ADD3 mov edx, 2
.text:0040ADD8 call sub_4BA6A8
.text:0040ADDD jmp short loc_40AE53
; -----------------------------------------------------------------
.text:0040ADDF loc_40ADDF:
; Триальная ветка алгоритма
.text:0040ADDF mov [ebp+var_28], 20h
.text:0040ADE5 xor ecx, ecx
.text:0040ADE7 mov [ebp+var_10], ecx
.text:0040ADEA lea ecx, [ebp+var_10]
.text:0040ADED inc [ebp+var_1C]
; Указатель на строку "ViVi Cursor Trial Version"
.text:0040ADF0 mov eax, offset aViviCursorTria
.text:0040ADF5 mov edx, off_4CF95C
...
Процедура проверки регистрации вполне прозрачная. После нескольких промежуточных проверок, по их результатам, возвращает EAX=1 в случае успешной регистрации и EAX=0 в противном случае. Для отлома регистрации достаточно прописать в начало процедуры команды MOV AL,1; RET
.text:00401FEC sub_401FEC proc near
.text:00401FEC push 1 ; <-- записать MOV AL,1; RET
.text:00401FEE call sub_40C4A4
.text:00401FF3 pop ecx
.text:00401FF4 test al, al
.text:00401FF6 jz short loc_402010
.text:00401FF8 push 2
.text:00401FFA call sub_40C4A4
.text:00401FFF pop ecx
.text:00402000 test al, al
.text:00402002 jz short loc_402010
.text:00402004 push 3
.text:00402006 call sub_40C4A4
.text:0040200B pop ecx
.text:0040200C test al, al
.text:0040200E jnz short loc_402014
.text:00402010 loc_402010:
; Данные регистрации неправильные или отсутствуют. Вернуть EAX=0
.text:00402010 xor eax, eax
.text:00402012 jmp short locret_402019
.text:00402014 loc_402014:
; Данные регистрации корректные. Вернуть EAX=1
.text:00402014 mov eax, 1
.text:00402019 locret_402019:
.text:00402019 retn
.text:00402019 sub_401FEC endp
Если посмотреть по перекрестным ссылкам откуда еще вызывается процедура проверки регистрации, то можно увидеть следуюший код:
...
; Вызвать процедуру проверки регистрации
.text:004027A6 call sub_401FEC
.text:004027AB xor edx, edx
.text:004027AD mov dl, al
.text:004027AF cmp edx, 1
.text:004027B2 sbb edx, edx
.text:004027B4 neg edx
.text:004027B6 mov eax, [ebx+3E8h]
; По ее результатам включить или выключить триальный 10-минутный таймер
.text:004027BC call @Ibutils@TIBTimer@SetEnabled$qqro_0
.text:004027C1 xor ecx, ecx
.text:004027C3 lea eax, [ebp+var_50]
...
А 10 минут на время работы - это и есть основное триальное ограничение программы. Значит после патча оно будет успешно нейтрализовано. Окно About тоже заметно преображается:

Программа успешно "зарегистрирована"
Чтобы не было абсурдной надписи "Register to Unregistered", можно найти строку "Unregistered" и заменить ее, например, на ваш ник:

Строка "Unregistered" для замены
Хотя можно оставить и так, пусть это будет своеобразная "фишка" релиза. Если вы собираетесь попробовать ввести левый регистрационный код и имя через меню программы, то делать этого не надо, так как после этого программа будет вылетать с ошибкой. Чтобы устранить эту ошибку, удалите файл Register.ini в папке с установленной программой. По этой же схеме снимается защита и с других продуктов ViVi Software, среди которых есть действительно полезные программы.