ZF

                     НЕМНОЖКО КРИПТОЛОГИИ
                            by DrMAD

                          Оглавление

    Введение
    1. WM.Concept - "прост как правда"
    2. Вопросы и ответы
    3. Расшифровываем макросы
    4. Программа DisMacro
    Заключение

                                  Введение

    Милостивые государи!  Приходилось ли Вам выходить ночью  на  кухню?
Какие  именно  эмоции  испытывали Вы при виде многочисленных черных или
рыжих существ,  суетливо ощупывающих чуткими  усиками  засохшие  корки,
бросающихся врассыпную по щелям при малейшей угрозе и вновь выползающих
при отсутствии оной?  Нет от них  особого  вреда,  несложно  догнать  и
раздавить одного-другого. Но несть им числа и на смену одному погибшему
выползают десять вновь родившихся...

    ...И воспылал  я  жуткой  ненавистью  к  макровирусам   и   захотел
посмотреть, как же они устроены внутри...

                     1. WM.Concept - "прост как правда"

    WM.Concept -  вирус,  с  которого,  собственно  говоря,  и началась
мировая история макровирусов.  Если кто утверждает,  что еще раньше был
WM.DMV, - спорить не буду. "Смех не в том".

    Залезаем в  отвратительно  воняющую мышами оболочку Вындоуз поганой
фирмы Мокрософт и запускаем противный Ворд.  Пусть это будет до сих пор
еще   достаточно   широко  распространенная  гадкая  версия  6.0  этого
безобразного продукта.

    При помощи опций меню Файл/Шаблоны/Организатор/Закрыть файл/Открыть
файл открываем документ,  зараженный WM.Concept, выбираем вкладку Макро
и видим столбец имен макросов:

                            AAAZAO
                            AAAZFS
                            FileSaveAs
                            PayLoad

    Мы можем   их   Удалить   (в   общем-то,  так  и  надо  сделать  ),
Переименовать,  но вместо этого мы Копируем их в NORMAL.DOT. Макросы из
NORMAL.DOT  доступны  для  просмотра и изменения.  Правда,  теперь Word
заражен, но макросы после экспериментов достаточно просто Удалить в том
же Организаторе.

    Лезем в  Сервис/Макрокоманды,  видим  окошко  со  знакомым столбцом
макросов.  Выбираем любой,  например,  AAAZAO и тычем мышкой  в  кнопку
Правка.

    Раскрывается новое окошко и мы можем наблюдать текст макроса (часть
пропущена):

Sub MAIN
 On Error Goto Abort
 iMacroCount = CountMacros(0, 0)
 'see if we're already installed
 For i = 1 To iMacroCount
  If MacroName$(i, 0, 0) = "PayLoad" Then
   bInstalled = - 1
  End If
  If MacroName$(i, 0, 0) = "FileSaveAs" Then
   bTooMuchTrouble = - 1
  End If
 Next i
 ......
End MAIN

    Мы видим,  что вирус чудовищно прост внутри,  как и полагается всем
членистоногим.  Мы  можем даже внести в текст свои небольшие изменения,
породив новую мутацию - какой-нибудь Concept.X,  Concept.Y и пр.  Буквы
A,  B  и  т.д.  давно  зарезервировали  за  собой  Ваши  более  шустрые
предшественники. J

    А что  касается  меня,  то  я  такие вири просто давлю без жалости.
Кнопка Удалить в Организаторе.

                            2. Вопросы и ответы

    Рассмотрим вирус  посложнее  -  WM.Cap.  По данным WildList Rus это
сейчас самый распространенный вирус на  территории  бывшего  СССР.  Тем
более интересно заглянуть ему в потроха.

    Проделываем вышеописанную последовательность действий,  залезаем  в
Сервис/Макрокоманды  и...  странно,  а где же кнопка Правка?  Хи-хи,  в
томто  и  дело!  Макросы  этого  вируса  имеют  атрибут  ExecuteOnly  и
недоступны для просмотра и редактирования.

    Как его сбросить,  как  расшифровать  макросы?  А  никак,  отвечает
Мелкомягкое отродье, не для того введена шифрация макросов, чтобы такие
-сякие-всякие-разные могли заглядывать туды, куды им не положено.

    Спросим авторов вирусов.  О-о-о!  Формат DOC-файлов ужасно  сложен,
отвечают  авторы  Slam  #4  и  им верят и вторят ламеры из SGWW в IV12.
Тайна сия великая есть. Ignoramus et ignorabimus.

    Ладно, спросим теперь авторов антивирусных программ.  Там все очень
просто  - заксорено побайтно,  отвечает Дм.  Грязнов из DrSolomon-а.  А
больше ничего не скажу - ищите да обрящете.

                         3. Расшифровываем макросы

    Что ж,  поищем... Формат WORD-документа найти в Интернете несложно.
Их несколько,  этих описаний формата - более или менее подробных, более
или менее понятных.  Но сложность в том, что WORD-документ не есть файл
с расширением DOC, торчащий на Вашем винчестере.

    Файл -  это  OLE2-объект MS Windows.  Его структура весьма сложна и
напоминает отдельную файловую систему со своими каталогами,  FAT-ами  и
файлами.  Разобрать  эту структуру,  вытащить WORD-объект на белый свет
можно при помощи  Windows  API  или  библиотеки  Elser,  написанной  на
Perl... долго, не слишком понятно, короче - просто противно. K

    "Но есть способ лучше  -  Рондо!..."  J  Пардон,  просто  я  хочу
предложить другой подход - очень прозрачный и легко применимый:

    а) OLE2-объект начинается со следующих байтов:  0D0H,  0CFH,  011H,
0H,  0A1H,  0B1H, 01AH, 0H. Если даже расширение DOC, но байты другие -
значит, это не файл WinWord 6.0.

    б) Внутри  файла  сплошным  линейным  поиском  будем  искать начало
заголовка WORD-документа.  Возможные варианты (не все, в русской версии
попадаются и другие):

    0065A5DCh
    0068A5DCh
    0068A697h
    0068A699h
    00C1A5ECh
    .........

    в) Для пущей надежности можно проконтролировать и следующие 4 байта
- внутренний код версии Word:

    0407C02Dh
    0407C035h
    0407C03Dh
    0409C033h
    0409C03Dh
    0409C03Fh
    0409C041h
    .........

    г) По смещению 0118h от начала WORD-заголовка лежит адрес следующей
структурки:

    Смещение   Длина    Значение
    (10-чн.)   (10-чн.)
    -------------------------------------------
    00             1    0FFh
    01             1    001h
    02             2    N - количество макросов

    04             1    Прочая информация
    05             1    Ключ шифрации макроса #1
    06            10    Прочая информация
    16             4    Длина макроса #1
    20             4    Прочая информация
    24             4    Адрес макроса #1
    .......

                   1    Прочая информация
                   1    Ключ шифрации макроса #N
                  10    Прочая информация
                   4    Длина макроса #N
                   4    Прочая информация
                   4    Адрес макроса #N

    Дальше просто.  В  цикле  расксориваем  все  N  макросов,  зная  их
местоположение, длину и ключ шифрации.

    Примечание: могут встретиться разные сложности при реализации идеи.
Например,  макросов может и не быть. Или файл может содержать несколько
WORD-документов.  Или  может встретиться "левый" заголовок,  ибо внутри
DOC-файлов нередки пустые фрагменты,  заполненные  всяким  мусором.  Но
разве все это сложно победить?

                           4. Программа DisMacro

    Если Вам влом писать свою программу для расшифровки макросов, я это
сделал  за  Вас.  Программа  DISMACRO  написана  в  течение 30 минут на
(довольно экзотическом,  но горячо мной любимом) языке Modula-2.  Умеет
расшифровывать макросы в небольших ( <64Kb ) документах, подготовленных
в WinWord 6.0 (и, возможно, в 7.0, но не в WinWord97).

    При помощи этой программы я, например, сумел увидеть потроха WM.CAP:

 Sub MAIN
 'C.A.P: Un virus social.. y ahora digital..
 '"j4cKy Qw3rTy" (jqw3rty@hotmail.com).
 'Venezuela, Maracay, Dic 1996.
 'P.D. Que haces gochito ? Nunca seras Simon Bolivar.. Bolsa !
 End Sub
 .............................................................

                                 Заключение

    Надеюсь, что  у  этой  программы  и этого алгоритма найдется немало
полезных применений,  кроме ковыряния в чужих макровирусах и  написания
своих.  По  крайней  мере,  можно  написать  свой антивирус.  Я это уже
сделал. Bolsa! J

P.S. Сам dismacro и исходник оного, находятся в каталоге Utils/Dismacro


(C) NF, 1998-2004