ZF

                   Описание вируса CABANAS
                        by Jacky Qwerty

              ( Вольный перевод - DrMad, 1998 )

    Я очень горд представить первый "резидентный" вирус для WinNT/Win95
/Win32s.  Это не только первый вирус,  остающийся резидентно на NT,  но
также первый невидимый вирус с антитрассировочными и антиэвристическими
возможностями.  Короче,  этот малыш  -  "внутрипроцессный"  резидент  в
памяти,  вирус,  инфицирующий  PE-файлы  во  всех  основанных  на Win32
системах.  Для  тех,  кто  не  знает,  что   такое   "внутрипроцессный"
резидентный   вирус,   скажу,   что   это  означает  вирус,  остающийся
резидентным   в   приватной    области    главного    Win32-приложения,
контролирующего  файловую  систему  и инфицирующий открываемые РЕ-файлы
или те, к кому обращается Win32-приложение.

    Цель этого вируса  состоит  в  том,  чтобы  доказать  новые  методы
резидентности,  которые могут использоваться в настоящих Win32-вирусах,
без всяких трудностей,  специфичных для написания драйверов  для  Win95
(VxDs)  и  WinNT.  Подлинный Win32-вирус способен работать одинаково на
всех доступных Win32-платформах:  Win95,  WinNT и любой другой  будущей
платформе,  поддерживающей  интерфейс  Win32 API.  Пока были обнаружены
только  специфичные  для  Win95  вирусы,  они  не  являются  настоящими
Win32-вирусами. Удостоверитесь, что вы прочитали полное описание Win32.
Cabanas, написанное PВter SsФr, и доступное на http: //www.avp.ch/avpve
/newexe/win32/cabanas.stm.   Вы   можете   также   прочитать  описание,
выполненное Igor Daniloff из DrWeb, доступное на http://www.dials.ccas.
ru/inf/cabanas.htm.

    После прочтения  описания PВter SsФr относительно Win32.Cabanas,  я
понял,  что действительно должен был проделать очень  серьезную  работу
профессионала.  Настолько  хорошую,  что он,  кажется,  не пропустил ни
одной внутренней детали вируса,  как будто бы он  сам  сделал  все  эти
ошибки или как будто бы он был фактически мной,  хе-хе! Понятно, что ни
то,  ни другое не верно.  Но, однако, я думаю, стоит принять его работу
во внимание даже для VX.  Действительно я не знаю, что еще остается мне
добавить после такого описания,  так что я буду  просто  добавлять  мой
собственные  персональные  комментарии  к  словам PВter-а.  Гм..  между
прочим, почему бы Вам не присоединиться к нам? Хе-хе >8P

----------------------------------------------------------- >8

1.Техническое Описание
----------------------

    Win32. Cabanas - первый известный 32-битный вирус, который работает
на Windows NT Server,  Windows NT workstation, Windows 95 и Windows 3.x
с подсистемой Win32s. Он был обнаружен в конце 1997.

    Win32. Cabanas  - резидент в памяти процесса, быстроразмножающийся,
антиотладочный,  частично упакованный/зашифрованный, антиэвристический,
полу-невидимый   вирус.   Приставка   "Win32"   не   должна  вводить  в
заблуждение,  поскольку вирус также способен распространиться  во  всех
основанных на Win32 системах:  Windows NT,  Windows 95 и Win32s.  Автор
вируса - член группы 29А,  тот же самый юный  вирмер,  который  написал
позорный вирус CAP.A.

1.1. Запуск инфицированных PE-файлов
------------------------------------

    Когда Win32.Cabanas запускает инфицированный файл, исполнение будет
начинаться  в  точке входа хозяина.  Неожиданно,  Cabanas не исправляет
поле точки входа в  заголовке  файла.  Вместо  этого  патчит  программу
хозяина  в точке входа.  Пять байтов в точке входа замененяются длинным
JMP на адрес,  где оригинальная программа  кончается.  Это  может  быть
рассмотрено как антиэвристическая особенность,  поскольку значение поля
точки входа хозяина в заголовке PE-формате  содержит  обращение  внутрь
кодовой секции,  и это, возможно, предотвращает некоторые эвристические
флаги.

    Таким образом, первый JMP указывает на реальную точку входа. Первая
функция в Cabanas распаковывает и расшифровывает таблицу строк, которая
состоит из  имен  KERNEL  Win32  API.  Механизм  распаковки  прост,  но
достаточно эффективен.  Cabanas - также защищенный вирус. Он использует
"Структурированную  Обработку  Исключений"  (аббревиатура  "SEH")   как
антиотладочный  трюка.  Это  предотвращает  отладку  при  помощи любого
отладчика уровня приложений, типа TD32.

    Когда функция   распаковки/расшифровки   готова,   вирус   вызывает
процедуру,   чтобы   получить  базовый  адрес  KERNEL32.DLL.  Во  время
инфицирования вирус ищет  GetModuleHandleA  и  GetModuleHandleW  API  в
Таблице  Импорта,  соответственно.  Когда  он находит их,  то сохраняет
указатель на фактический DWORD  в  списке  .idata.  Так  как  загрузчик
помещает  адреса в эту таблицу прежде,  чем выполняется вирус,  Cabanas
получает их легко.

    Если приложение не имеет импорта GetModuleHandleA/ GetModuleHandleW
API,  то  вирус  использует  третий  недокументированный способ,  чтобы
получить Базовый Адрес KERNEL32.DLL, вынимая его из поля ForwarderChain
в импорте KERNEL32.  Фактически,  это не будет работать под Windows, но
только под Win95. Когда вирус имеет Базовый Адрес Обработчика KERNEL32.
DLL,  он  вызывает собственную процедуру,  чтобы получить адрес функции
GetProcAddress. Первый метод основан на поиске Таблицы Импорта во время
инфицирования.  Вирус  сохраняет указатель на секцию .idata всякий раз,
когда он находит импорт GetProcAddress в хозяине. В большинстве случаев
приложения  Win32s импортируют GetProcAddress API,  таким образом вирус
не должен использовать вторичную процедуру, чтобы получить тот же самый
результат.  Если  первый  метод  терпит неудачу,  вирус вызывает другую
функцию,  которая способна искать экспорт  GetProcAddress  в  KERNEL32.
Такая       функция       могла      бы      быть      названа      как
GetProcAddress-From-ExportsTable. Эта функция способна искать в Таблице
Экспорта KERNEL32 и находить адрес GetProcAddress API.

    Эта функция  -  одна из наиболее важных с вирусной точки зрения,  и
она   совместима   со   всеми   Win32-системами.   Если   точка   входа
GetProcAddress            была            возвращена           функцией
GetProcAddress-From-ExportsTable,  вирус   сохраняет   этот   адрес   и
использует        его        позже.       Иначе       же,       функция
GetProcAddress-From-ExportsTable будет  использоваться  несколько  раз.
Эта   функция   также   сохраняется   с  "Структурированной  Обработкой
Исключений," чтобы избежать возможных  исключений.  После  этого  вирус
берет все адреса API,  которые хочет использовать в цикле. Когда адреса
доступны,  Cabanas  готов  размножаться   и   вызвать   непосредственно
процедуру инфицирования.

1.2. Непосредственно инфицирование
----------------------------------

    Часть, занимающаяся  непосредственно  инфицированием  -  неожиданно
быстрая.  Даже  если вирус проходит через все файлы в каталоге Windows,
каталоге System и  в  текущем  каталоге  соответственно,  инфицирование
файлов  достаточно  быстро,  чтобы проходить незамеченным в большинстве
систем.  Это все потому, что вирус работает с "картой файлов в памяти",
и  это  новая особенность в Win32-системах,  которая упрощает обработку
файлов и производительность системы.

    Сначала вирус получает имя каталога  Windows,  потом  получает  имя
каталога  System  и  вызывает  функцию,  которая  ищет неинфицированные
программы.  Она ищет не файлы в  каталоге,  но  вхождения  и  проверяет
размеры найденных файлов.

    Файлы с   длиной,   делящейся   на   101   без  остатка,  считаются
инфицированными.  Другие файлы,  которые являются слишком огромными, не
будут  инфицированы  также.  После  этого  вирус  проверяет  расширения
файлов,  и если они соответствует EXE или SCR (файлы хранителя экрана),
вирус  открывает  и  помещает  в  карту файл.  Еслирассматриваемый файл
слишком короток,  файл закрывается.  Потом вирус проверяет  MZ-метку  в
начале   образа   файла.  Затем  он  перемещается  на  возможную  точку
идентификатора PE-формата и проверяет сигнатуру PE. Он также проверяет,
что  программы  были  сделаны  для  исполнения  386+ машинах и ищут тип
файла. DLL-файлы не инфицируются.

    После этого вирус вычисляет специальную контрольную  сумму, которая
использует  поле  контрольной  суммы  Заголовка PE головой и поле метки
файла в Заголовке Образа.  Если файл кажется уже инфицированным,  вирус
закрывает  файл.  Если  нет,  то  файл  выбирается  для инфекцирования.
Cabanas  тогда  закрывает  файл,  очищает  атрибут  файла  при   помощи
API-функции  SetFileAttributeA  и сохраняет первоначальные атрибуты для
более позднего использования.  Это означает,  что  вирус  не  оставляет
атрибут  ReadOnly.  Затем  файл снова открывается и помещается в карту,
как возможный host-файл в ркжиме Read/Write.

    Затем он ищет импорт API-функций GetModuleHandleA, GetModuleHandleW
и  GetProcAddress  в Таблице Импорта оригинальной программы и вычисляет
указатели на  секцию  .idata.  Затем  он  вызывает  процедуру,  которая
внедряет образ вируса в файл.

    Эта процедура   сперва   проверяет,   что   секция   .idata   имеет
характеристики MEM_WRITE.  Если это не так,  он устанавливает этот флаг
на  секции,  но  только,  если  эта  секция  не  расположена  в области
исполнения.   Это   предотвращает   вирус   от   включения    некотрыми
эвристическими сканерами флагов при проверке кодовой секции.

    Затем вирус  идет  переходит  на точку входа образа и заменяет пять
байтов инструкцией FAR JMP,  которая будет указывать на  первоначальный
конец хозяина.  После того он проверяет таблицу перемещения. Это потому
что некоторые релокейшены могут перекрыть FAR JMP в точке входа. Если у
таблицы   релокейшенов  длина  ненулевая,  вирус  вызывает  специальную
процедуру,  чтобы искать такие вхождения релокейшенов в области .reloc.
Он  очищает  релокейшен,  если тот указывает на FAR JMP,  таким образом
этот релокейшен не будет приниматься во внимание загрузчиком. Процедура
также   помечает  релокейшен,  таким  образом  Cabanas  будет  способен
повторно восстановть  релокейшен  в  носителе.  Затем  он  шифрует  всю
информацию,  которая нужно зашифровать в теле вируса.  Включая таблицу,
которая  содержит  первоначальные   5   байтов   точки   входа   и   ее
местоположение.

    Затем вирус  вычисляет  специальную  контрольную  сумму  для  целей
самопроверки и сохраняет ее в  поле  времени  PE-заголовка.  Когда  все
готово, вирус вычисляет полный новый размер файла и делает это значение
кратным 101.  Реальный код вируса - около 3000 байтов,  но файлы  будут
вырастать на большее количество байтов из-за этого. Cabanas имеет здесь
очень  важный  трюк.  Вирус  не  создает  новый  заголовок  секции  для
содержания кода, но исправляет старый заголовок в файле (обычно .reloc)
чтобы увеличить размер секции настолько,  чтобы хранить код вируса. Это
делает инфицирование менее опасным и менее заметным.

    Потом вирус  модифицирует  поле  SiseOfImage в PE-заголовке,  чтобы
отразить  изменения,  сделанные  к  последней  секции  в  файле,  потом
исключаетиз   карты  и  закрывает  файл.  Затем  он  обрезает  файл  до
предварительно рассчитанного размера и  восстанавливает  первоначальное
время  и  метку  даты.  Наконец  Cabanas восстанавливает первоначальные
атрибуты файла.  Когда все возможные файлы инфицированы,  Cabanas готов
стать резидентным в памяти.

    1.3. Восстановление  хозяина,  Перехват  API-функций  и резидентная
установка в памяти
--------------------------------------------------------------

    Следующая стадия   должна  восстановить  программу  хозяина.  Вирус
располагает   внутренний   блок   параметра,   который    состоит    из
предварительно зашифрованного кода хозяина (5 байтов) и и пишет назад 5
первоначальных  байтов  в  точку  входа.  После  этого   это   повторно
распределяет область кода,  если необходимо,  ища в секции в .reloc для
отмеченных вхождений редокейшены. Затем вирус перехватывает API-функции
и остается резидентно в памяти.

    Техника перехвата  API основана на обработке Таблицы Импорта.  Т ак
как программа хозяина содержит адреса импортированных функций  в секции
.idata,  все,  что вирус должен делать - это заменить эти адреса, чтобы
они указывали на собственные API-обработчики.

    Чтобы делать эти вычисления легкими,  вирус открывает и помещает  в
карту  инфицированную  программу.  Затем  он  распределяет  память  для
процесса.  Вирус распределяет блок в 12232 байта и копирует себя в  эту
новую распределенную область. Потом он ищет имена всевозможных функций,
которых   хочет   перехватить:   GetProcAddress,    GetFileAttributesA,
GetFileAttributesW,   MoveFileExA,   MoveFileExW,   _lopen,  CopyFileA,
CopyFileW,    OpenFile,    MoveFileA,    MoveFileW,     CreateProcessA,
CreateProcessW,  CreateFileA,  CreateFileW,  FindClose, FindFirstFileA,
FindFirstFileW,     FindNextFileA,     FindNextFileW,     SetFileAttrA,
SetFileAttrW.  Всякий  раз,  когда  он  находит  одну  из этих API,  он
сохраняет первоначальный адрес в собственной  таблице  JMP  и  замещает
DWORD-ы  в  секции  .idata (которая содержит первоначальные адреса API)
указателем на собственные API-обработчики.  Наконец,  вирус закрывает и
удаляет   из   карты   хозяина   и  запускает  приложение  переходом  в
первоначальную точку входа в кодовой секции.

    Некоторые Win32-приложения,  однако,  могут не иметь  импортов  для
некоторых  API,  в  этом  случае  можно  получить их адреса,  используя
GetProcAddress и вызывать их непосредственно,  таким образом вирус  был
бы  неспособен  перехватывать  эти вызовы.  Не так быстро.  Вирус также
перехватывает  GetProcAddress  для  специальной  цели.   GetProcAddress
используется   большинством   приложений.   Когда  приложение  называет
GetProcAddress,  вирусный обработчик первым делом вызывает оригинальный
GetProcAddress,   чтобы   получить  адрес  требуемого  API.  Тогда  это
проверяет,  - действительно ли параметр Handle  Module  из  KERNEL32  и
действительно  ли  функция - одна из KERNEL32 API,  которую вирус хотел
перехватить.  Если так, вирус возвращает новый адрес API, который будет
указывать в NewJMPTable. Таким образом приложение будет и в этом случае
по-прежнему получать адрес от вирусного обработчика.

1.4. Стелсирование и быстрое инфицирование
------------------------------------------

    Cabanas -  полуневидимый  вирус:  во  время  работы FindFirstFileA,
FindFirstFileW,  FindNextFileA и FindNextFileW вирусные  проверяет  уже
инфицированные программы.  Если программа не инфицирована,  вирус будет
инфицировать  ее,  иначе  он  скрывает  различие   в   размере   файла,
восстанавливая оригинальную длину программы- хозяина. В это время вирус
может видеть все  имена  файлов,  доступные  приложению,  и  инфицирует
каждый отдельный здоровый файл.

    Так как  CMD.EXE  (Командный  интерперетатор  для  NT)  и спользует
вышеупомянутые API во время работы команды DIR, каждый неинфицированная
файл  будет  инфицирован  (если  CMD.EXE был инфицирован предварительно
Win32.Cabanas-ом). Вирус также будет инфицировать файлы во время работы
каждого другого перехваченного запроса к API.

    В противоположность зашифрованным именам API,  вирус также содержит
следующий строковый копирайт:

(C) Win32. Cabanas v1.0 jqwerty/29A.

1.5. Выводы
-----------

    Win32. Cabanas  -  очень сложный вирус с несколькими особенностями,
новыми  для  основанных  на  Win32  систем.  Он  демонстрирует   весьма
интересные методы, которые могут использоваться в ближайшем будущем. Он
демонстрирует,  что  Windows  NT-вирус  не  обязательно  должен   иметь
раздельные функции для работы в Win95 и Win NT,  и вллбще - работать на
любой Win32-системе.  Техника  "внутрипроцессной  резидентности"  также
показывает  переносимое жизнеспособное решение - как избежать известных
проблем совместимости между Win 95 и Win NT,  касающихся низкоуровневой
реализации резидентных драйверов. Авторы вирусов могут использовать эти
методы и их знание,  которое они имели для Win 95, для использования на
более  продвинутых платформах.  Пока Win32.  Cabanas cделал этот первый
шаг.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - > 8

2. Закладки
------------

(*) http://www.dials.ccas.ru/inf/cabanas.htm

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > 8

Win32. Cabanas: краткое описание
----------------------------------
Igor A. Daniloff

    (***> Прим. переводчика: иностранец хренов; сдохну, а переводить не
буду - просто выдеру из virlist.web,  тем более,  что это один и тот же
текст. <***)

    Win32.Cabanas является  первым  из  известных  вирусов,  поражающих
файлы семейства  32хразрядных  операционных  систем  Microsoft  Windows
(Win32s/Windows  95/Windows NT).  Данный вирус умеет не только заражать
файлы в формате PortableExecutable, но оставаться резидентно на текущий
сеанс  работы  инфицированной  программы  в любой из перечисленных выше
операционных систем.

    Все существовавшие до сих пор вирусы, написанные для Windows 95, не
умели  корректно  заражать файлы,  предназначенные для работы в Windows
NT,  т.к., хотя файлы для Windows 95 и Windows NT и имеют одинаковый PE
-  формат,  но  все же некоторые поля в заголовке PE у них различаются.
Поэтому  при  заражении   файлов   Windows   NT,   вирусам   необходимо
предпринимать   дополнительные   действия  для  корректной  модификации
PEзаголовка.  Иначе система Windows NT выдаст ошибку на этапе  загрузки
данного   файла.   Также   представляется  определенной  проблемой  для
вирусовэто определение базовых адресов WIN32 KERNEL API  в памяти,т.к.,
Windows  95  и  Windows  NT  располагают  модуль  KERNEL32.DLL в разных
адресах  памяти.  Но  Win32.Cabanas  прекрасно  справляется  с  данными
проблемами. При старте инфицированного файла вирус получает управление,
распаковывает и расшифровывает собственную  таблицу  WIN32  KERNEL  API
имен  процедур,  необходимых  ему для последующей работы и приступает к
определению базового адреса KERNEL32.DLL и  адресов  всех  интересующих
его функций WIN32 KERNEL API.

    Во время  заражения  файла  вирус анализирует таблицу импортируемых
функций   (Import   Table)   с   целью    нахождения    имен    функций
GetModuleHandleA,  GetModuleHandleW  и  GetProcAddress.  При нахождении
данных имен вирус запоминает  в  своем  коде  смещения  адресов  данных
процедур,  находящихся в Import Table (как правило, в сегменте .idata).
Если  имена  перечисленных  процедур  вирусом  не  будут  найдены,   то
Win32.Cabanas  в дальнейшем,  при запуске инфицированного файла,  будет
использовать  другой  недокументированный  способ  нахождения  базового
адреса KERNEL32 и адресов WIN32 KERNEL API. Но этот недокументированный
способ содержит ошибки и работает некорректно в среде Windows NT. Итак,
если адреса импортируемых функций GetModuleHandleA или GetModuleHandleW
имеются в Import Table инфицированного файла,  то вирус без проблем,  с
помощью  процедуры  GetProcAddress,  определяет все адреса WIN32 KERNEL
API. Если адресов интересующих его функций в Import Table нет, то вирус
с  помощью некоторых ухищрений пытается определить адрес GetProcAddress
в таблице экспортируемых функций KERNEL32. Но, как уже отмечалось выше,
для  Windows  NT данный вирусный механизм не работает из-за ошибок,  и,
как   следствие,   нормальная   "жизнедеятельность"   вируса   окажется
невозможной.  Это  единственная  серьезная ошибка Win32.Cabanas,  из-за
которой у него возникают проблемы при распространении в  среде  Windows
NT.  Зато в Windows 95 чувствует себя,  "как рыба в воде" и безо всяких
трудностей (в случае отсутствия адресов  функций  GetModuleHandleA  или
GetModuleHandleW)  определяет  базовый  адрес  KERNEL32.DLL  и  функции
GetProcAddress другим недокументированным способом.  При помощи функции
GetProcAddress  вирус  может  получить  адрес  любой  интересующей  его
процедуры WIN32  KERNEL  API.  Что  он  и  делает:  получает  адреса  и
запоминает их.

    Далее вирус  запускает свою процедуру заражения PE-файлов,  имеющих
расширения EXE и SCR в каталогах \WINDOWS,  \WINDOWS\SYSTEM и в текущем
директории.   При  заражении  файлов  вирус  проверяет  наличие  в  них
собственной копии по некоторым полям в заголовке PE и по  длине  файла,
которая при заражении вирусом Win32.Cabanas должна быть кратна 101. Как
уже   отмечалось   выше   вирус   производит   поиск    имен    функций
GetModuleHandleA,   GetModuleHandleW   или   GetProcAddress  в  таблице
импортируемых функций (Import Table) и запоминание ссылок на их адреса.
Затем  вирус  записывает  свой  код в конец файла,  в область последней
сегментной секции  (обычно  .reloc),  изменив  характеристики  и  длину
данной  секции.  После  того,  как  тело вируса записано в конец файла,
вирус изменяет пять начальных байт  оригинальной  точки  входа  кодовой
секции  (обычно  .text  или  CODE)  на  команду  передачи управления на
вирусный код,  находящийся в последней сегментной секции (.reloc).  Для
этих  целей  вирус  производит  анализ  таблицы  перемещаемых элементов
(.reloc) с целью возможного нахождения какого-нибудь элемента в области
измененных  вирусом  байт.  Если  такая ссылка будет найдена,  то вирус
"выключает" ее и  запоминает  ее  адрес  и  значение  для  того,  чтобы
впоследствии при передаче управления программе-вирусоносителю не забыть
восстановить  исходные  байты  точки  входа  и,  если  необходимо,   то
соответствующим  образом  настроить  перемещаемый элемент (relocation).
После того,  как вирус заразит все "пригодные" для этой  цели  файлы  в
указанных  выше  каталогах,  он  приступает к установке в систему своей
резидентной копии и "перехвату" интересующих его системных  функций.  С
помощью  функции VirtualAlloc вирус выделяет себе область памяти длиной
12232 байт и перемещает свой код в данную область. Далее вирус пытается
"перехватить"  следующие  функции  WIN32  KERNEL  API:  GetProcAddress,
GetFileAttributesA,                                 GetFileAttributesW,
MoveFileExA,MoveFileExW,_loopen,    CopyFileA,   CopyFileW,   OpenFile,
MoveFileA,  MoveFileW,  CreateProcessA,  CreateProcessW,   CreateFileA,
CreateFileW,  FindClose, FindFirstFileA, FindFirstFileW, FindNextFileA,
FindNextFileW,  SetFileAttrA,  SetFileAttrW.  Адреса этих функций вирус
"забирает"  из  Import Table,  а в поля Import Table подставляет адреса
собственных  обработчиков.  Если  некоторые  интересующие  его  функции
вирусу "перехватить" не удалось,  то в дальнейшем при вызове программой
функции GetProcAddress,  вирус проверяет  нужен  ли  ему  адрес  данной
функции  и  при  необходимости  возвращает  программе адрес собственной
процедуры.  При вызове программами  некоторых  "перехваченных"  вирусом
функций   запускается   процедура   заражения  файлов  и\или  процедуру
стелс-режима  для  инфицированных  файлов.  Так  при   вызове   функций
FindFirstFileA,  FindFirstFileW,  FindNextFileA или FindNextFileW вирус
может заразить файл,  поиск которого производится,  после чего сразу же
скрыть приращение длины в данном файле.

    Таким образом,     Win32.Cabanas    нельзя    назвать    "полностью
резидентным" вирусом,  т.к.,  "перехват" системных функций и  установка
вирусной копии в выделенный системой участок памяти производится только
на текущий сеанс работы инфицированной программы.  Но,  что  произойдет
если пользователь запустит,  например,  инфицированный Norton Commander
for Windows 95 или Command Interpreter for Windows NT?  Или  программу,
которая  остается  в  памяти  резидентно?  Правильно  -  вместе с такой
программой,  до тех пор пока данная программа не будет завершена, будет
"трудиться" и Win32.Cabanas.

    Win32.Cabanas содержит    зашифрованный     текст     "(c)
Win32.Cabanas v1.0 by jqwerty/29A".

(C) в 1997 DialogueScience, Компания, Москва, Россия. Все права
зарезервированы.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  >8

3. Главные особенности
-----------------------

    * Платформы:  WindowsNT,  Windows95,  Win32s,  то-есть все
Win32 платформы.
    * Резидентность:  Да, "внутрипроцессная", работает на всех
Win32 системах.
    * Не-резидентность:   Да,   непосредственная,   инфицирует
PE-файлы прежде, чем стать резидентом.
    * Стелсирование:  Да,  сокрытие размера для инфицированных
файлов (F-Potatoe95 обманут).
    * Антиотладка: Да, TD32 или любой другой отладчик уровня приложения
производит исключение,  когда отлаживает инфицированное приложение. Это
пока не работает для WinICE, большого монстра.
    * Антиэвристика:  Да,  инфицированные  файлы   не   имеют   никаких
очевидных  признаков  инфекции.  Другие  Win95-вирусы  имеют  тенденцию
"помечать" PE-заголовок,  так что  они  легко  различимы.  См.:  Другие
особенности (e).
    * AntiAntivirus:  Да,  дезинфекция инфицированных  файлов  -  почти
*невозможна*.
    * Быстрая инфекция:  Да,  файлы инфицируются,  когда к ним
обращаются по любой причине.
    * Полиморфизм: Нет, полиморфный движок был исключен.
    * Другие особенности:
    (A) поле EntryPoint в PE-заголовке не изменяется.
    (B) Win32  функции API перехватываются для инфицирования и
стелсирования, но также для совместимости платформ.
    (C) Использование  Win32-функций  API  "картографирования"  файлов,
котрые используются для файлов в памяти.  Не  надо  больше  "ReadFile",
"SetFilePointer", "WriteFile" ... это было давно.
    (D) Абсолютно не используются абсолютные адреса для совместимости с
другим будущими Win32-операционками.
    (E) SHAPE AV отсосала, но к сожалению она эвристически обнаруживает
инфицированные  файлы.  Хорошо уже и то,  что она не выставляет хотя бы
один флаг на виреJ
    (f) Использование  "Структурированной Обработки Исключений" (SEH) в
тех  критических  фрагментах  кода,  которые   могли   бы   производить
GP-ошибки,  то  есть  исключения,  перехвачены и обрабатываются должным
образом.
    (G) Поддержка Unicode.  Эта фигня действительно работает в
NT. Никаких подколок.

4. Кто был Cabanas?
-------------------

    Gonsalo Cabanas  имел  обыкновение  быть  прирожденным лентяем.  Мы
делили с  ним  многое,  слушали  один  и  тот  же  R.E.M-музон,  носили
одинаковую  синюю джинсу,  и вели себя подобно детям,  везде мы шлялись
вместе,  подкладывали  кнопки  на   стул   препода,   пи$дили   завтрак
одноклассника  и  т.д.  Мы  даже любили одних и тех же девчонок,  и это
объясняет,  почему мы время от времени пи$дили друг  друга  по  е$лищу.
Однако,  Вы  могли бы обнаружить нас на следующий день во время курения
за школой,  как будто ничего не случилось.  Мы были самые лучшие друзья
всегда.  Я знаю,  что этот вирус не сможет вернуть его назад к жизни, и
не "восстановит закон и  справедливость",  однако,  я  все  равно  хочу
посвятить эту программу его памяти.

5. Дискляймер
-------------

Спасибушки, которые надо сказать:

    Gonso Cabanas..........
    Надеюсь, что мы еще увидимся... старина!

    Murkry.................
    Whoa... я тащусь от твоих заумных идей, чувак!

    VirusBuster/29A .......
    Ты мой Инетовсий корефан... продолжай!

    Vecna/29A..............
    Поддерживал меня в работе... увидимся!

    L- ....................
    Ты заслуживаешь несколько пи$дюлей, маленькая дрянь? X-D

    Int13 .................
    Эй, приятель... ты тоже южноамериканский рокер! ;)

    Peter/F-Potatoe .......
    Описание ее правил... Боже милосердный!

    DV8 (H8), kdkd, и т.д .
    Эй, чуваки... куда вы подевались?

    GriYo, Sandy/29A ......
    Благодарю за ваше терпение, гы X-D

6. Правовая оговорка.
--------------------

    Этот исходный код - только для образовательных целей.  Ав-
тор не отвечает за любые проблемы, вызванные этими файлами.

7. Компиляция
-------------

Tasm32 -ml -m5 -q -zn cabanas.asm
Tlink32 -Tpe -c -x -aa cabanas,,, import32 pewrsec cabanas.exe

(C) в 1997 Jacky Qwerty/29A.


(C) NF, 1998-2004