Rambler's
Top100

Исследование защиты программы System Mechanic 3.6g

Автор: crage Digital Daemons
Дата: .01.2003
Раздел: Reverse Engineering

Сегодня мы займемся изучением программы System Mechanic. Данная программа является Shareware. У программы множество полезных функций, в частности она может отслеживать изменения произошедшие в реестре и в файлах после запуска определенных программ, например инсталяторов. System Mechanic можно использовать 30 дней, потом, если он не зарегистрирован, некоторые возможности программы будут задизаблены. При первом запуске программа предлагает нам либо начать триальный период использования, либо ввести User ID и Serial Number, либо сходить на сайт производителя и зарегистрировать ее. Для начала я выбрал триальный период использования и вошел в программу. В дальнейшем при запуске программы появляется Nag-Screen, отличный от начального, но суть его та же. Как обычно перевожу системное время, чтобы проверить реакцию программы, программа запускается, написано, что триальный период закончился, но некоторые функции задизаблены. Лезу в реестр и смотрю, что там есть связанного с программой. Помимо прочего есть параметр FirstRun, который равен нулю, меняем значение на единицу. Запускаем программу, и .... программа думает, что ее запускают первый раз:). Надо же, программа стоит 60 баксов, а триальный период так легко продлить. Ну что же, можно было на этом остановиться, но нас же не устраивает каждый раз после окончания триал периода лазить в реестр и менять параметры:). Поэтому займемся дальнейшим исследованием программы. Попробуем ввести User ID и Serial Number, программа нам выдает мессагу о том, что введенная нами лицензионная информация неправильна. Надо каким то образом поймать данное сообщение, чтобы проверить после чего оно вызывается. Прога написана на Borland Delphi и для мессаги используется своя функция поэтому данное сообщение не поймаешь на стандартные функции WinApi. Я поступил следующим образом. Распаковал программу. Для этого можно воспользоваться как специальными распаковщиком, так и универсальным. Можно и вручную, но это уже тема отдельного разговора. Запакована она ASPack' ом, который не является протектором, поэтому сложностей с распаковкой не возникает.

Распакованную программ открываем в Hiew'e ищем мессагу, которая выскакивает, если, введены неправильные данные. Это сообщение начинается с адреса 00490B64. Поменяем порядок байт и поищем комбинацию цифр 640B4900. Она встречается один раз по адресу 00490B50, где заносится в регистр eax, затем по адресу 00490B55 происходит вызов функции: call 000441FEB. Эта функция и вызвает искомое нами сообщению. Далее я использовал отладчик TRW2000. Загрузим программу в отладчик. Поставим на адрес 00490B55 точку останова, выйдем по F5, введем User ID и Serial Number. Жмем ОК и вываливаемся в отладчик. Теперь нам надо найти где сравнивается веденные нами данные с правильными. Для начала я решил найти первую функция которая запускается после нажатия кнопки ОК, и которая, по идеи, считывает введенные мной данные. Ставя точки останова на функции расположенные выше, той которая выдала нам мессагу, я дошел до функции расположенной по адресу 004914EF. Видимо этой функцией считываются мои данные. Итак, поставим точку останова на адрес 004914EF и введем USER ID и Serial Number. Нажав кнопку ОК, вываливаемся в отладчик.

:004914EF E8401FF9FF             call 00423434 
:004914F4 8B45E8                 mov eax, dword ptr [ebp-18] 
:004914F7 8D4DF8                 lea ecx, dword ptr [ebp-08] 
 Теперь потрассируем программу по F10.  
:004914FA BA01000000             mov edx, 00000001 
:004914FF E8C4FF0600             call 005014C8 
:00491504 8B45F8                 mov eax, dword ptr [ebp-08] 
:00491507 8B55FC                 mov edx, dword ptr [ebp-04] 
:0049150A E87D2AF7FF             call 00403F8C 
:0049150F 7505                   jne 00491516 

По адресу 004914FF программой генерируется серийный номер. Остановимся на адресе 0049150А и посмотрим содержимое регистров eax и edx. Команды d eax и d edx соответсвенно. В регистре edx будет содержаться сгенерированный программой серийный номер, а в eax введенный тобой. Трассируем дальше.

:0049152A BA02000000             mov edx, 00000002 
:0049152F E894FF0600             call 005014C8 
:00491534 8B45F8                 mov eax, dword ptr [ebp-08] 
:00491537 8B55FC                 mov edx, dword ptr [ebp-04] 
:0049153A E84D2AF7FF             call 00403F8C 
:0049153F 7505                   jne 00491546 

По адресу 0049152F также генерируется серийник, но уже для другой редакции. Остановимся на адресе 0049153А. В регистре edx будет содержаться сгенерированный программой серийный номер, а в eax введенный тобой. Трассируем дальше.

:0049155A BA03000000            mov edx, 00000003 
:0049155F E864FF0600            call 005014C8 
:00491564 8B45F8                mov eax, dword ptr [ebp-08] 
:00491567 8B55FC                mov edx, dword ptr [ebp-04] 
:0049156A E81D2AF7FF            call 00403F8C 
:0049156F 7505                  jne 00491576 

По адресу 0049155F генерируется серийник еще для одной редакции System Mechanic.Остановимся по адресу 0049156А. В регистре edx будет содержаться сгенерированный программой серийный номер, а в eax введенный тобой. Все три серийника будут подходить. Первый предназначен для Standard Edition. Второй для Professional Edition. Третий для Industrial Edition.

Лучше взять серийный номер Industrial Edition, потому что некоторые функции System Mechanic действуют только в этой редакции.

Да, нам повезло, сгенерированный серийник находился в памяти программы в открытом виде, поэтому не было необходимости изучать процедуру его генерации. Хотя он там генерируется несложно.

Warning!!! Данный материал публикуется исключительно в ознакомительных целях и для указания разработчикам программ на дыры в защитах. Использование этой информации в противозаконных целях запрещено



Rambler's Top100