15.03.2000 DrWeb 4.16 Преобразование ознакомительной версии в полную [Madd-Maxx]

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,
словленный где-то в сети ...... :-)) Шутка !!!
Времени у меня ушло на все про все минут 30. Вам думаю не больше
понадобится, если вы хоть чуть-чуть знакомы с отладчиком.
Свои отзывы и предложения можно присылать на [email protected]


Только убедительная просьба мусором мыло не засорять !!!!
P.S. Модуль Spider.exe мною не изучался, хотя и имеет точно такие же
ограничения без регистрационного ключа, в силу того, чтобы экономить память.
Вам также не советую вешать эту штуку в память машины, тем более, если у вас
ее мало. Лучше каждый стрёмный файл проверить сканером, и его же запускать
скажем раз в неделю на проверку всего винта.
Удачи и весёлого времяпровождения !!!
- Madd Maxx -
Moscow
Russia