|
|
Прямой доступ к макросам в документах MS WORD
|
|
Страница 1 из 5 Иногда хочется посмотреть на исходный текст макросов, живущих внутри документов MS Word, особенно когда имеется подозрение на наличие в них какого-то злонамеренного кода - вируса или троянца. В данной статье будет рассмотрено несколько способов, как это можно сделать для документов MS Word версий 97, 2000 и XP, и как автоматизировать этот процесс.
1. "Правильный" способ Вообще-то, Microsoft дает пользователю возможность посмотреть на исходный текст макроса, написанный на VBA: - в меню "Сервис" выбрать пункт "Макрос";
- потом выбрать "Макросы";
- затем в появившемся списке выбрать желаемую строчку (например, "AutoOpen");
- нажать на кнопку "Изменить";
- и в окне редактора Visual Basic for Application узреть, наконец, вожделенный исходник.
Существуют ряд модификаций этого способа, связанных с использованием Организатора, с копированием макросов из документа в шаблон, с прямым вызовом редактора VBA по Alt-F11 и т.п. Но подобно дверям некрасовского "парадного подъезда", которые открывались далеко не для всех, этот способ не гарантирует успеха никому. Некоторые "привилегированные" макросы (например, большинство современных вирусов) таким образом увидеть невозможно. Но ведь есть и другие подходы, которые 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).
Характерной особенностью всех таких потоков является сигнатура 01 16h 01. Exe-code живет в потоках с именами "__srp_0", "__srp_1" и т.п.
|
|
-
Visual C++,
Работа с СУБД Oracle через интерфейс OCCI
OCCI - расшифровывается как Oracle C++ Call Interface и представляет собой специализированное апи для работы с СУБД Oracle используя C++ что в общем то явствует из названия. Для использования необходимо подключить заголовочный файл "occi.h"....
-
Visual C++,
Задача Майхилла для Microsoft Visual C++
О синхронизации процессов в среде Windows. Задача Майхилла - еще один (наряду с задачей RS-триггера) пример решения нетривиальных проблем создания сложных систем. Справившись с ней, мы научимся организовывать взаимодействие параллельно работающих компонентов сложных программных комплексов в жестких условиях. ...
-
Visual C++,
Использование ODBC в Visual C++
Класс CDatabase представляет собой класс, который обеспечивает связь с источником данных. Под источником данных может пониматься как непосредсвенно файл, в котором находится таблица, например dBase, так и файл с многими таблицами, например Microsoft Access или сервер баз данных Oracle, MS SQL Server и т.д. Для связи с источником данных используется интерфейс ODBC. У данного класса есть папа в виде класса
-
Visual C++,
Создание простого приложения с плагинами
В этой статье описываются принципы и решения, применяемые при проектировании приложений, которые будут использовать внешние, динамически подключаемые, модули. Эта статья более ориентирована на тех, кто хочет использовать механизмы подключения/отключения функциональности приложения, наподобии механизма Aobe Photoshop или Far, а не просто многократного использования кода в разных приложениях....
-
Visual C++,
Работа с 1C Предприятие из Visual C++
В данной статье показано, как можно работать с 1С Предприятием из С++ с помощью OLE DB. Так же она будет интересна тем, кто не пользуется C++, но хочет узнать подробности "а как оно устроено внутри 1С". В данной статье речь пойдет об 1С Предприятии версии 7.7. Полагаю, что в версии 8 мало что изменилось. Предполагается, что читатель хотя бы чуть-чуть знаком с 1С Предприятием. Так же предполагается, что вы изучали официальное руководство 1С по вопросам OLE DB (часть вторая описани...
-
Visual C++,
Как самому сделать plug-in к FAR на Visual C++
Трудно найти человека, которые не знает или не использует Far - IMHO лучший клон NC для Windows. Кроме того, что это просто очень хороший файл менеджер, к нему есть огромное количество plug-in модулей. Plug-in модуль это DLL-файл, который вместо стандартных Windows функций по работе с монитором, клавиатурой и т.д. обращается к функциям Far-а. Far поддерживает весь набор функций для работы в текстовом режиме. Установка plug-in модуля происходит предельно просто - DLL файл и файлы данных коп...
-
Visual C++,
Использование директивы #import в Visual C++
В данной статье я попытаюсь объяснить то, как работает эта директива и привести несколько примеров её использования. Надеюсь, после этого вы тоже найдёте её полезной. Директива #import введена в Visual C++, начиная с версии 5.0. Её основное назначение облегчить подключение и использование интерфейсов COM, описание которых реализовано в библиотеках типов....
-
Visual C++,
Создание VxD на Visual C++ без ассемблерных модулей
Виртуальные драйверы устройств (VxD) в Windows во многих случаях являются единственным «честным» способом обхода ограничений, установленных системой для приложений Win32: невозможности прямого доступа к портам ввода-вывода и служебной памяти, эффективной обработки аппаратных прерываний, использования сервисных функций существующих VxD и т.п. Кроме того, без VxD не обходится практически ни один полноценный драйвер физического или виртуального устройства....
|
|
|