Bob_Marley
Компетентный
Иногда хочется посмотреть на исходный текст макросов, живущих внутри документов MS Word, особенно когда имеется подозрение на наличие в них какого-то злонамеренного кода - вируса или троянца. В данной статье будет рассмотрено несколько способов, как это можно сделать для документов MS Word версий 97, 2000 и XP, и как автоматизировать этот процесс.
1. "Правильный" способ
Вообще-то, Microsoft дает пользователю возможность посмотреть на исходный текст макроса, написанный на VBA:
Но ведь есть и другие подходы, которые Microsoft принципиально не желает документировать...
2. Где живут макросы
Мы уже знаем, что файл MS Word - это сложный объект, имеющий формат структурированного хранилища (structured storage), а вся полезная информация хранится в нем в виде потоков (streams).
В MS Word 6.0/7.0 макросы находились вместе с текстом документа в одном общем потоке с именем "Word Document".
В более поздних версиях программные компоненты, живущие внутри документа, организованы уже не в виде множества отдельных макросов, а в виде так называемого VBA-проекта, который физически "размазан" по различным потокам.
Кроме того, внутри документа MS Word одновременно могут присутствовать стразу ТРИ формы представления одного и того же макроса.
Во-первых, это исходный текст макроса, так называемый s-code. Он не виден "на просвет" внутри файла, т.к. сжат алгоритмом LZNT1.
Во-вторых, это результ компиляции текстового исходника в двоичный образ - так называемый псевдокод (или p-code). Он может исполняться виртуальной машиной MS Word.
Наконец, это подготовленный к исполнению exe-code (или ex- code, или executable code). Он присутствует не всегда, но если присутствует, то исполняется виртуальной машиной MS Word именно он.
S-code и p-code живут в потоках:
Exe-code живет в потоках с именами "__srp_0", "__srp_1" и т.п.
1. "Правильный" способ
Вообще-то, Microsoft дает пользователю возможность посмотреть на исходный текст макроса, написанный на VBA:
- в меню "Сервис" выбрать пункт "Макрос";
- потом выбрать "Макросы";
- затем в появившемся списке выбрать желаемую строчку (например, "AutoOpen");
- нажать на кнопку "Изменить";
- и в окне редактора Visual Basic for Application узреть, наконец, вожделенный исходник.
Но ведь есть и другие подходы, которые Microsoft принципиально не желает документировать...
2. Где живут макросы
Мы уже знаем, что файл MS Word - это сложный объект, имеющий формат структурированного хранилища (structured storage), а вся полезная информация хранится в нем в виде потоков (streams).
В MS Word 6.0/7.0 макросы находились вместе с текстом документа в одном общем потоке с именем "Word Document".
В более поздних версиях программные компоненты, живущие внутри документа, организованы уже не в виде множества отдельных макросов, а в виде так называемого VBA-проекта, который физически "размазан" по различным потокам.
Кроме того, внутри документа MS Word одновременно могут присутствовать стразу ТРИ формы представления одного и того же макроса.
Во-первых, это исходный текст макроса, так называемый s-code. Он не виден "на просвет" внутри файла, т.к. сжат алгоритмом LZNT1.
Во-вторых, это результ компиляции текстового исходника в двоичный образ - так называемый псевдокод (или p-code). Он может исполняться виртуальной машиной MS Word.
Наконец, это подготовленный к исполнению exe-code (или ex- code, или executable code). Он присутствует не всегда, но если присутствует, то исполняется виртуальной машиной MS Word именно он.
S-code и p-code живут в потоках:
- "newmacros" (обычно, это "свежесозданные" пользователем макросы);
- "thisdocument" (обычно, это "служебные" макросы и вирусы, размножающиеся при помощи методов Import/Export);
- в потоках с именами макросных модулей (например, макросы вируса Macro.Word97.Emlitch, размножающегося при помощи OrganizerCopy, живут в потоке с именем sfc).
Exe-code живет в потоках с именами "__srp_0", "__srp_1" и т.п.
