Antiviral Toolkit Pro - как сделать из демо-версии рабочую

В этот раз потребуется внимание и усидчивость, а так же знание некотрых функций Win32 API. Заодно придется использовать дизассемблер.

Вступление

Наверное, всем известен "легендарный" Евгений Касперский и его антивирусный пакет Antiviral Toolkit Pro. Не буду рассматривать его антивирусные свойства - каждый может оценить их сам. Это дело вкуса. В этой статье рассматриваются свойства защиты этого самого AVP. В исследуемой демо-версии отключена возможность лечения зараженных файлов, анализатор кода, проверка архивов и сжатых файлов. Также отсутсвует возможность проверки писем и почтовых баз данных. Скопировать программу можно с сайта Kaspersky Lab.

Инструменты

  1. SoftICE 3.23 for Win95
  2. Любой шестнадцатиричный редактор файлов
  3. IDA Pro версии выше 3.74

Часть 1. Антивирус своими руками

Как я и говорил, для того, чтобы эту программу заставить заработать следует изучить функции Win32 API, связанные с отображением органов управления. Кроме того, сперва всегда следует выяснить, действительно ли перед нами урезанная и бесполезная демо-версия, или это полностью работоспособная программа с отключенными функциями. В данном случае для этого удобно использовать продукт The Customiser фирмы Wanga International.

Для проверки запустим AVP и посмотрим для начала закладку Обьекты. Сразу видно, что программа не проверяет архивы и упакованые исполняемые файлы. Выбрать эти пункты нельзя - они отключены (disabled) . Запустим The Customiser (который, кстати тоже защищен - возможно появится статья и о нем). Выберем Edit Windows... а там пометим Enable и нажмем кнопку ON. Теперь появившимся уродливым курсором щелкнем на затененном пункте Упакованные Файлы. Неожиданно он перестанет быть затененным и станет обычным, нормальным пунктом. То же проделайте со следующим пунктом (архивы). Теперь отключите Customiser и выберите эти возврещенные к жизни опции. Запустите антивирус, и убедитесь, что теперь он проверяет и архивы. Остановите проверку. Посмотрите на закладку Обьекты. Требуемые опции опять отключены. Ничего удивительного, с помощью Customiser'а мы лишь на время изменили их состояние.

Теперь, убедившись в том, что программа имеет требуемую функциональность продолжим исследование программы. Некоторые скажут, что мы проверили не все. Например мы не проверяли закладку Действия. Особенно пункт Лечить без запроса. Скажу сразу, лично я все это проверил. Попробуйте и Вы, поработайте немного самостоятельно.

Когда сомнения Вас покинут и Вы окончательно убедитесь, что программа в порядке, следует приниматься за более серьезные дела. Например запустить IDA Pro и дизассемблировать файл avp32.exe. Пока он дизассемблируется, откройте Win32 API Help и найдите функцию, отвечающую за состояние органов управления. Для тех, кто не знает такой функции, скажу - это EnableWindow. В файле помощи по API-функциям (Microsoft) эта функция описана так:

BOOL EnableWindow(

                  HWND hWnd, // указатель на окно (орган управления)

                  BOOL bEnable // флаг возможности ввода

		  )

В зависимости от значения bEnable компонент может быть в состоянии Включен/Отключен (Enabled/Disabled). В состоянии Отключен орган управления игнорирует сообщения, поступающие от мыши и клавиатуры. Нам требуется обратное. Если дизассемблирование закончилось, поищите, откуда вызывается функция EnableWindow. Таких мест в программе множество. Кстати, обратите внимание на типичные последовательности вызовов - при работе над другими программами с аналогичной защитой Вам это пригодится. Типичная последовательность такова:

  1. Вызывается функция GetDlgItem [в качестве аргументов - указатель на окно диалога и идентификатор органа управления]. Функция возвращает указатель на этот орган управления.
  2. Вызывается функция EnableWindow [в качестве аргументов - указатель на орган управления и флаг bEnable (0 - Отключен, 1 - Включен)]. Функция делает орган управления неактивным (т.к. bEnable = 0).

Теперь у вас есть вся информация, необходимая для взлома. Как именно это сделать - Вы должны решать сами. Тем более, что взлом можно осуществить, минимум, пятью разными способами. Перечислю некоторые из них:

  1. Найти функцию, в которой отключаются требуемые пункты меню, и сделать так, чтобы они включились. Сводится к поиску EnableWindow и замене предшествующей ей команды push 00 на push 01. Подсказка: так как при отключении требуется заносить в стек 0, в этой программе обнуляется регистр ebx и выполняется команда push ebx. Все, что требуется - записать в ebx 1.
    Преимущества - быстрота.
    Недостатки - недостаточно корректный взлом (об этом позже).
  2. Исследовать алгоритм, проверяющий ключевой файл avp.key, и попытаться на основе этого алгоритма вычислить, какая информация в avp.key должна быть.
    Преимущества - в случае успеха вы становитесь "зарегистрированным" пользователем этой, а возможно и будущих версий программы без всяких побочных эффектов.
    Недостатки - медленно и сложно.

Есть еще и другие варианты. Вы можете выбрать любой из них.

После того, как Вы все это сделали, осталась небольшая проблемка - при запуске появляется окно с напоминанием о том, что программу необходимо зарегистрировать. Решение: создайте в директории, в которой установлен AVP, файл avp.key с любым содержанием и все проблемы исчезнут.

Часть 2. Монитор, и как с ним бороться

Вторая важная часть системы AVP - это монитор. Он проверяет все файлы,  которые открываются во время вашей работы, и если обнаруживается вирус, то имеется возможность предварительно его (вирус) обезвредить и продолжить работу. Лично я монитором не пользовался и не собираюсь - лучше один раз проверить, то что приносишь, чем постоянно сидеть под наблюдением, результатом чего является снижение производительности. Но надо довести начатое дело до конца. Получить рабочую версия AVP из нерабочей демо-версии. Вообще-то, ничего нового здесь нет. Функциональность монитора урезана точно так же, как и антивируса. Я сделал так. С помощью Borland Resource Workshop открыл файл avpm.exe и посмотрел на ресурсы. В данном случае меня интересовали окна диалогов. Например ресурс с номером 113, соответсвующий окну Действия. Дважды щелкнув на нем, попадаем в окно редактировани диалога. Но редактировать ничего не будем. Двойным щелчком на RadioButton с текстом Disinifect Automatically откроем окно Button Style. В этом окне содержится некоторая необходимая информация. А именно Control ID . Для упомянутого элемента это значение равно 406h. Запомните это число - оно пригодится. Откроем IDA Pro и запустим дизассемблирование файла AVPM.EXE(если вы сами этого еще не сделали). Нажмем Alt+T для поиска текста и зададим 406h. После нескольких попыток мы обнаружим такой участок кода:

loc_4023CE: ; CODE XREF: .text:004023C0

                       ; .text:004023C7

xor ebx, ebx

cmp dword_4122EC, ebx

jz short loc_40240E

push ebx

push 405h               ; ID Number нашего компонента

push dword ptr [ebp+8]

call esi

push eax

call ds:EnableWindow	; Enable/disable mouse and keyboard input

push ebx

push 406h               ; ID Number нашего компонента

push dword ptr [ebp+8]

call esi

push eax

call ds:EnableWindow	; Enable/disable mouse and keyboard input

push ebx

push 407h               ; ID Number нашего компонента

push dword ptr [ebp+8]

call esi

push eax

call ds:EnableWindow	; Enable/disable mouse and keyboard input

loc_40240E:

Надеюсь, всем ясно, что делает этот код. В общих чертах - обнуляется регистр EBX, сравнивается с некоторой переменной. В результате сравнение осуществляется переход на ту часть программы, где блокируются соответсвующие визуальные элементы(сторого говоря, не осуществляется переход на ту часть программы, котрая продолжает работу без блокировки). Вариантов взлома - множество. Я вданном случае заменил переход jz short loc_40240E на jmp short loc_40240E. Для этого следует поменять байт 074h(jz) на 0EBh(jmp).

Самостоятельно изучите листинг программы, найдите соответсвующие инструкции. С помощью IDA внесите изменения там, где посчитаете нужным. Запустите модифицированный файл. Посмотрите, работает ли то,что не работало. Если вы все сделали правильно, то вы должны получить возможность выбора лечения зараженных файлов. Остается проделать тот же трюк с закладкой Обьекты и Настройки. Это вы вполне можете сделать сами. Так же, в качестве упражения уберите собщение о том, что отсутсвует ключевой файл(наличие этого собщения наводит на мысли - для антивируса достаточно создать файл AVP.KEY как он сразу перестает выбрасывать это же сообщение, хотя и работать от этого не начинает. Для монитора этот номер не проходит. Может монитор все-таки использует информацию из ключевого файла - проверьте сами). Побочным эффектом данного метода является то, что устанавливаемые опции не сохраняются, и в следующей сессии их приходится устанавливать еще раз. Эта проблема тоже имеет решение. Но мне хватило того, что сделал себе рабочую версию.

Заключение

Перед началом работы, всегда следует проанализировать и попытаться представить, как именно программа защищена. Это может сильно облегчить жизнь.

Для связи с автором пишите ze_tty@yahoo.com . Если вы с помощью этой статьи не смогли сделать для себя работающую версию то пишите, и посмотрю, и скажу в чем ваша проблема. Учтите, что я никогда не буду заниматься взломом программ по заказу. Меня интересует лишь внутренняя работа программы.

Легально ли это?

Я даже не хочу напоминать(вы должны знать и помнить это сами), что данный материал публикуется только в образовательных целях. Если вы хотите использовать этот програмный продукт, то вы обязаны купить его. Если же вы не желаете покупать его, то для этого вам достаточно поискать на серверах распространяющих пиратские программы. Для этого вовсе не надо понимать механизм работы программы и схему ее защиты. Ответственность за веши действия несете только вы сами.


Дальше


Образование на Куличках