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


Скриншот программы 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, среди которых есть действительно полезные программы.
Теги:
защита, взлом
Добавлено: 21 Сентября 2013 02:36:13 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...