Главная » Статьи » Крэкинг

DrWeb 4.16 Преобразование ознакомительной версии в полную

30 января в свет появилась новая версия DrWeb - 4.16. Недавно я слил его себе и установил на винт.

Запустил, и обнаружил, что программа является ознакомительной версией и без регистрационного ключа имеет функциональные ограничения, в том числе одни, на мой взгляд, из самых важных - проверка архивов, включение опции "эвристический анализ" и лечение зараженных объектов, о чем в свою очередь и предупреждает, выводя сообщение при начальной загрузке.

Вас не раздражает вывод подобных сообщений, каждый раз при новой загрузке ? Меня безумно.

Поэтому я отправился на кухню, заварил себе кофе ( благородный напиток ), запасся табаком ( время то уже было 2 ночи ) и решил подправить прогу и включить все и вся.

Итак, если у вас все нужное под рукой, приступим.


А что нам надо :
SoftIce - любой версии
Hiew - тоже любой версии или любой другой правщик файлов
WDasm or IDA Pro

Где найти DrWeb 4.16 :
ftp://ftp.dials.ru/

Для начала попробуем убрать сообщение об ознакомительной версии. ( Сразу скажу, что может и есть более короткий путь для изменения кода, но я опишу тот, по которому прошел сам).

Для этого залезаем в отладчик ( Ctl+D ) и ставим брекпоинт на сообщение -

bpx MessageBoxA
bpx MessageBoxExA

Запускаем прогу и что мы видим? Айс вывалился на " MessageBoxA". F12 - выходим из айса, ok - обратно в айс, в вызывающую функцию. Стираем все брекпоинты - bc * и смотрим код. 

:0044EE74 FF7778 push [edi+78]
:0044EE77 FF7508 push [ebp+08]
:0044EE7A 50 push eax

* Reference To: USER32.MessageBoxA, Ord:0195h

:0044EE7B FF1534AA4700 Call dword ptr [0047AA34]
--------> вывод сообщения
:0044EE81 891E mov dword ptr [esi], ebx
:0044EE83 837DFC00 cmp dword ptr [ebp-04], 00000000
:0044EE87 89450C mov dword ptr [ebp+0C], eax


Ничего интересного, кроме каких-то проверок и подготовки самого сообщения для вывода на экран.Нажимаем опять F12 и опять попадаем в вызывающую процедуру.

:0044EEBC 8B10 mov edx, dword ptr [eax]
:0044EEBE FF74240C push [esp+0C]
:0044EEC2 FF9294000000 call dword ptr [edx+00000094]
------------> процедура, описанная выше
:0044EEC8 C20C00 ret 000C
--------> сюда возвращается айс.


Теперь F10 и снова попадаем в вызывающую процедуру.

:00403ED9 6A30 push 00000030
:00403EDB 50 push eax
:00403EDC E8C9AF0400 call 0044EEAA
:00403EE1 8D4C2418 lea ecx, dword ptr [esp+18]
----------------> сюда мы вернулись
:00403EE5 C684240402000007 mov byte ptr [esp+00000204], 07


Опять смотрим код чуть-чуть выше места, куда нас вернул айс. И по адресу 00403E82 находим переход, обходящий сообщение:

:00403E71 3BF3 cmp esi, ebx
:00403E73 750F jne 00403E84
:00403E75 A194524700 mov eax, dword ptr [00475294]
:00403E7A 8A8818020000 mov cl, byte ptr [eax+00000218]
:00403E80 84C9 test cl, cl
:00403E82 746E je 00403EF2
------------------> Обходим сообщение
:00403E84 8D4C2418 lea ecx, dword ptr [esp+18]
:00403E88 E825610400 call 00449FB2


Но если быть более внимательным, то можно увидеть, что на 15 байт выше есть переход, который может нам испортить все. Он находится по адресу 00403E73.

Поэтому именно и на него мы ставим очередной брекпоинт. Загружаем заново программу и видим, что отладчик вывалился на нашем брекпоинте. Условие перехода - если регистры ESI и EBX не равны. Что мы имеем ? Флаг ЗЕРО опущен, потому-что в EBX - 0 , а в ESI - 4. Этот переход все нам и портит. Поэтому делаем условие не выполнимо. Есть 3 варианта :

1. меняем CMP ESI, EBX на CMP ESI, ESI или CMP EBX, EBX
2. делаем переход на следующую строчку ( JNE 00403E84 меняем на JNE 00403E75 ) - что я и сделал
3. забиваем переход командой NOP

Далее трассируем и видим, что по адресу 00403E7A в CL копируется 0 и условие нужного нам перехода положительное. Нажимаем F5 и ........ Сообщение исчезло. Первый этап выполнен. Но чтобы быть точно уверенным, можно и здесь поставить безусловный переход. Продолжаем ... Лезим в DrWeb, в настройки, и пробуем включить опцию скажем " Эвристический анализ". Ну как вышло ? Не хочет он совсем включатся ..... :-(( Опять ставим брекпоинт на MessageBoxA.

bpx MessageBoxA
bpx MessageBoxExA


F5 - выходим из отладчика и снова пробуем включить эту опцию. Выскакивает айс, --> F12, --> messagebox, --> OK, --> мы в айсе, в модуле DrWeb32w.exe.

Все та же функция для сообщения (0044EE7B ), все тот же выход на команду RET по адресу 0044EEC8 ( см. выше ). Еще раз F10 и мы выходим в нужные нам просторы ...... :-)) Снова и снова прокручиваем чуть-чуть вверх и смотрим код. Вот вся процедура с момента входа в неё

:0041A970 A194524700 mov eax, dword ptr [00475294]
:0041A975 56 push esi
:0041A976 8BF1 mov esi, ecx
:0041A978 8A8820020000 mov cl, byte ptr [eax+00000220]
:0041A97E 84C9 test cl, cl
-----------------------------> проверка условия перехода
:0041A980 7521 jne 0041A9A3
---------------------------> нужный нам переход
:0041A982 8B0D18524700 mov ecx, dword ptr [00475218]
:0041A988 6A00 push 00000000
:0041A98A 6A30 push 00000030
:0041A98C 8B91B4060000 mov edx, dword ptr [ecx+000006B4]
:0041A992 52 push edx
:0041A993 E812450300 call 0044EEAA
-----------------> MessageBox о недоступной опции
:0041A998 6A00 push 00000000
:0041A99A 8BCE mov ecx, esi
:0041A99C E8A0E60200 call 00449041
:0041A9A1 5E pop esi
:0041A9A2 C3 ret


Можно конечно было бы по адресу 0041A980 поставить безусловный переход, выйти из функции, посмотреть результат, и изменить еще переход или переходы, что бы все включилось, но я пошел по другому пути. Ведь без регистрационного ключа очень много опций недоступно, поэтому каждая может иметь подобный участок проверки и вывода сообщения. Менять каждую долго, хотя здесь кому как нравится ......Итак, я сделал вот как ... По адресу 0041A978 в регистр CL заносится число из стека с адресом [eax+00000220] ....
Ставим брекпоинт на строчку -

0041A976 8BF1 mov esi, ecx

и снова пробуем включить опцию .... Выскакивает Айс, мы делаем шаг на следующую строчку ( F10 ) и смотрим адрес, из которого происходит занос числа в CL. Это - 0070F298. Адрес этот запомним или лучше запишем .... В дальнейшем наверняка пригодится, если придётся ставить брекпоинт, на участок памяти, по этому адресу .... Теперь попробуем узнать, где и в каком месте программа заносит сюда 0 и при каких условиях....Для начала дизассемблируем файл drweb32w.exe и поищем, нет ли еще где-то в файле строчки - byte ptr [eax+00000220] и не заносится ли где 0 при не выполнении определенных условий.... Включаем поиск и ищем .....Сразу, после первого же нажатия, программа показывает код :

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
:00403B3A(C)
:00403CA3 3BF3 cmp esi, ebx
:00403CA5 7465 je 00403D0C
:00403CA7 8B1594524700 mov edx, dword ptr [00475294]
--------> в EDX адрес
:00403CAD C6821902000000 mov byte ptr [edx+00000219], 00
-------------> по адресу из EDX+00000219 занести 0
:00403CB4 A194524700 mov eax, dword ptr [00475294]
---------> снова адрес
:00403CB9 C6801A02000000 mov byte ptr [eax+0000021A], 00
----------------> и снова занести 0
:00403CC0 8B0D94524700 mov ecx, dword ptr [00475294]
-----------> и так далее ...
:00403CC6 C6811B02000000 mov byte ptr [ecx+0000021B], 00
:00403CCD 8B1594524700 mov edx, dword ptr [00475294]
:00403CD3 C6821C02000000 mov byte ptr [edx+0000021C], 00
:00403CDA A194524700 mov eax, dword ptr [00475294]
:00403CDF C6801D02000000 mov byte ptr [eax+0000021D], 00
:00403CE6 8B0D94524700 mov ecx, dword ptr [00475294]
:00403CEC C6811E02000000 mov byte ptr [ecx+0000021E], 00
:00403CF3 8B1594524700 mov edx, dword ptr [00475294]
:00403CF9 C6821F02000000 mov byte ptr [edx+0000021F], 00
:00403D00 A194524700 mov eax, dword ptr [00475294]
:00403D05 C6802002000000 mov byte ptr [eax+00000220], 00
-----------> а вот и заносится 0, для дальнейшей проверки на опцию "эвристический анализ"
:00403D05 C6802002000000 mov byte ptr [eax+00000220], 00
:00403D0C 8B0D94524700 mov ecx, dword ptr [00475294]
:00403D12 8A8119020000 mov al, byte ptr [ecx+00000219]
:00403D18 84C0 test al, al
:00403D1A A198454700 mov eax, dword ptr [00474598]


Но нам надо просмотреть все места, поэтому продолжаем поиск ... Еще одно место, где есть такая строчка - адрес -0041A978. Ну как знакомое число ? Конечно !!! Это то место, где выполняется проверка, и в зависимости от результата становится доступен или нет "эвристический анализ". Больше в файле подобных мест нет. Если взять любой другой адрес, скажем 00403CEC, то узнаем, повторив все выше перечисленное, что этот адрес отвечает за возможность "проверки архивов".

Итак, место, что все нам портит и не дает нормально настроить DrWEB найдено.Теперь записываем адрес ( 00403CAC - на него мы поставим брекпоинт ), и загружаем drweb32w.exe. Далее, как вам угодно, попадите в отладчик и поставьте брекпоинт на 00403CAC.

Выпав при загрузке drweb32w.exe на этом месте, мы увидим, что программа не переходит на следующей строчке по адресу 00403D0C, а продолжает выполнять процедуру, записывая нули по знакомым нам уже адресам. Итак, все, что нам надо было, найдено ! Теперь мы по адресу 00403CA5 делаем безусловный переход ( забиваем командой NOP или меняем на je 00403CA7 ) и далее каждый 00 меняем на 01.
Снимаем все брекпоинты (bc * ) и запускаем программу заново. Лезем в настройки и ...........
WOW ! Все включается и работает на все 100%.Ну чтож, задача решена !!!Запускайте DrWEB 4.16 и принимайтесь искать какой-нибудь Windows CIH,словленный где-то в сети ......:-)) Шутка !!!

Модуль Spider.exe мною не изучался, хотя и имеет точно такие же ограничения без регистрационного ключа, в силу того, чтобы экономить память. Вам также не советую вешать эту штуку в память машины, тем более, если у вас ее мало. Лучше каждый стрёмный файл проверить сканером, и его же запускать скажем раз в неделю на проверку всего винта. Удачи и весёлого времяпровождения !!!
Категория: Крэкинг | Добавил: -=Hellsing=- (17.06.2009)
Просмотров: 1808 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]