|
Исследование защиты Manus Pad v1.01.
Сегодня мы будем
исследовать защиту программы ManusPad
v1.01. Программа позволяет работать с
текстами и различными базами данных.
Но нас интересуют другие особенности
программы: каким образом можно
заставить её считать себя
зарегистрированной или работать без
регистрации дольше отведенных 30 дней.
Ну, второй вопрос решается очень
просто: каждые 30 дней запускаете что-нибудь
типа RegCleaner и вычищаете из реестра все,
что связано с этой прогой. Но есть
способ лучше ;-).
Посмотрим, что говорится в
справке к программе. Авторы
разрешают пользоваться прогой в
течение тридцати дней, причем,
предоставляются полные возможности
программы, но на протяжении всего
испытательного срока при каждом
запуске ManusPad'a появляется сообщение,
напоминающее о скором окончании
пробного периода, после чего
отключатся некоторые возможности
программы.
Для регистрации программы
требуется ввести серийный номер,
полученный у разработчика. При
неправильном серийнике появляется
соответствующее предупреждение, мол
"Invalid serial number!.Try again."
Дизассемблируем ManusPad.exe в нашем
любимом W32dsm и найдем это дурацкое
сообщение:
* Referenced by a (U)nconditional or (C)onditional
Jump at Address:
|:004B2FE3(C)
|
:004B2FEF C3
ret
:004B2FF0 55
push ebp
:004B2FF1 8BEC mov
ebp, esp
:004B2FF3 6A00 push
00000000
:004B2FF5 53
push ebx
:004B2FF6 8BD8 mov
ebx, eax
:004B2FF8 33C0 xor
eax, eax
:004B2FFA 55
push ebp
:004B2FFB 687F304B00 push 004B307F
:004B3000 64FF30 push dword ptr
fs:[eax]
:004B3003 648920 mov dword ptr
fs:[eax], esp
:004B3006 8D55FC lea edx, dword
ptr [ebp-04]
:004B3009 8B83E4010000 mov eax, dword ptr [ebx+000001E4]
:004B300F E844ECF6FF call 00421C58
:004B3014 8B55FC mov edx, dword
ptr [ebp-04]
:004B3017 A1009D4B00 mov eax, dword ptr [004B9D00]
:004B301C 8B00 mov
eax, dword ptr [eax]
:004B301E E81D450000 call 004B7540
:004B3023 84C0 test
al, al
:004B3025 740C je
004B3033
* Possible StringData Ref from Code Obj ->"Invallid serial
number !. Try "
->"again"
|
:004B3027 B894304B00 mov eax, 004B3094
:004B302C E897BFF8FF call 0043EFC8
:004B3031 EB36 jmp
004B3069
Как видим, по адресу 004B3023 стоит
явная проверка на равность al нулю.
Если в al ноль, то прога благодарит нас
за регистрацию. Откроем ManusPad.exe в HEX-
редакторе HIEW (это можно сделать,
перетащив мышью ManusPad.exe на ярлык HIEW),
включим режим отображения
ассемблерного кода (два раза ENTER или
сначала F4, а потом выбрать нужный
режим отображения) и перейдем по
адресу 004B3025 (жмем F5, пишем .4B3025 и жмем
ENTER, причем, точку перед вводимым
адресом нужно ставить обязательно).
Сделаем так, чтобы переход на адрес
4B3033 происходил при любом условии, т.е.
заменим je 004B3033 на jmp 004B3033. Для этого
жмем F3, TAB, и в появившемся окне
производим нужные исправления. Жмем
ESC, F9 (для сохранения внесенных
изменений) и выходим из HEX - редактора
(F10).
Теперь программа принимает любой
код, но при перезапуске опять
появляется сообщение о том, что
программа не зарегистрирована.
Будем копать дальше. Смотрим список
String Data References в W32dsm (меню->Refs-> String Data
References) и натыкаемся на строку "The
evaluation period is expired". Идем туда (два
раза левой кнопкой на строке). Видим
следующий код:
* Referenced by a (U)nconditional or (C)onditional
Jump at Address:
|:004B4087(U)
|
:004B4090 8B9358030000 mov edx, dword ptr [ebx+00000358]
:004B4096 8BC3 mov
eax, ebx
:004B4098 E8A3340000 call 004B7540
:004B409D 84C0 test
al, al
:004B409F 7477 je
004B4118
:004B40A1 8D4DFC lea ecx, dword
ptr [ebp-04]
:004B40A4 8B935C030000 mov edx, dword ptr [ebx+0000035C]
:004B40AA 8BC3 mov
eax, ebx
:004B40AC E8E3330000 call 004B7494
:004B40B1 84C0 test
al, al
:004B40B3 7431 je
004B40E6
* Possible StringData Ref from Code Obj ->"Expires "
|
:004B40B5 682C424B00 push 004B422C
:004B40BA FF75FC push [ebp-04]
* Possible StringData Ref from Code Obj ->" Days from now"
|
:004B40BD 6840424B00 push 004B4240
:004B40C2 8D45F8 lea eax, dword ptr [ebp-08]
:004B40C5 BA03000000 mov edx, 00000003
:004B40CA E8C1FDF4FF call 00403E90
:004B40CF 8B55F8 mov edx, dword ptr [ebp-08]
:004B40D2 A138A04B00 mov eax, dword ptr [004BA038]
:004B40D7 8B00 mov
eax, dword ptr [eax]
:004B40D9 8B80E4010000 mov eax, dword ptr [eax+000001E4]
:004B40DF E8A4DBF6FF call 00421C88
:004B40E4 EB24 jmp
004B410A
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B40B3(C)
|
:004B40E6 A138A04B00 mov eax, dword ptr [004BA038]
:004B40EB 8B00 mov
eax, dword ptr [eax]
:004B40ED 8B80E4010000 mov eax, dword ptr [eax+000001E4]
* Possible StringData Ref from Code Obj ->"The evaluation
period is expired"
|
:004B40F3 BA58424B00 mov edx, 004B4258
:004B40F8 E88BDBF6FF call 00421C88
:004B40FD B201 mov
dl, 01
:004B40FF 8B8300030000 mov eax, dword ptr [ebx+00000300]
:004B4105 E8E653FFFF call 004A94F0
Это и есть для нас самое важное
место. Здесь проверяется при запуске
зарегистрированность программы (посмотрите,
что происходит по адресу 004B409D), и если
обнаруживается, что прога все еще не
куплена, то происходит подсчет
количества дней до отключения
некоторых функций. Если
испытательный срок истек, мы увидим
предупреждение:"The evaluation period is expired"
.
Ну, теперь все стало совсем ясно:
нужно просто поменять по адресу
:004B409Fh je 004B4118 на jmp 004B4118. Кстати, к
данному пункту можно было добраться
куда проще, чем сделали мы ;-).
После всех проведенных операций
по исправлению je 004B4118 на jmp 004B4118, мы
получим полностью рабочую программу,
считающую себя зарегистрированой в
любой ситуации ;-).
Информация предоставлена
исключительно для ознакомления и ее
применение в незаконных целях
категорически запрещается.
© BioCyborG, 2002
|