[CRACKING] [MISCELLANEOUS] [DOWNLOADS] [LINKS] [CONTACTS]

Взлом и защита программного обеспечения

 

Исследование защиты 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

 

 © BioCyborG
www.biocyborg.narod.ru

Hosted by uCoz