KnigaRead.com/

Антон Орлов - Тайны и секреты компьютера

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Антон Орлов, "Тайны и секреты компьютера" бесплатно, без регистрации.
Перейти на страницу:

Хранение скрытой информации в документе

Иногда автору программы необходимо записать в документ информацию "для внутреннего пользования": например, чтобы при следующей обработке документа программой использовать определенные предыдущие данные.

Можно, конечно, использовать Свойства документа (объект "Dialogs(wdDialogFileSummaryInfo). Comments"), но лучше сделать такую запись с помощью добавления специальной переменной прямо в документ Word:

ActiveDocument.Variables.Add Name:="x1", Value:="Текст"

ActiveDocument.Variables.Add Name:="x2", Value:=12

Прочитать эти переменные можно будет с помощью похожей функции:

y1 = ActiveDocument.Variables("x1"). Value

y2 = ActiveDocument.Variables("x2"). Value

Кроме как с помощью этой функции, значения заданных в документе переменных узнать нельзя никак! Таким способом можно помещать в документ служебную информацию для макросов: сохраненные параметры, скрытые комментарии и и.д. Но не думайте, что для надежного сокрытия секретной информации достаточно поместить ее в переменные документа — с помощью функции

For Each per In ActiveDocument.Variables

Debug.Print per.Name + " " + per.Value

Next per

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


Немного о панелях, шаблонах и макросах

Панель инструментов Microsoft Word 97/2000/XP — то есть ее название, набор кнопок, расположенных на ней, связь этих кнопок с командами и макросами — может храниться либо в шаблоне Microsoft Word 97/2000/XP (*.dot), либо в документе Word (*.doc). При этом имеет место быть следующее:

1. Если панель инструментов сохранена в Normal.dot, то она доступна всегда, когда открыт Word.

2. Если панель инструментов сохранена в шаблоне, который загружен как глобальный — то есть помещен в папку автозагружаемых файлов Word, то она также доступна всегда, когда открыт Word, но ее можно убрать, выгрузив шаблон с помощью диалогового окна "Сервис-Шаблоны и надстройки".

3. Если панель инструментов сохранена в шаблоне, на котором основаны документы, например, в одном из шаблонов, находящихся в папке шаблонов пользователя Word[14] и ее подпапках, то она доступна тогда, когда этот шаблон присутствует на компьютере и активен документ, созданный на его основе.

4. Если панель инструментов сохранена в каком-либо документе, то она доступна тогда, когда активен этот документ.

Панели инструментов можно копировать из одного шаблона или документа в другой с помощью диалогового окна «Организатор» (Сервис — Шаблоны и надстройки — Организатор).

Информация о том, какие панели при предыдущем выходе из Word'а были видимы, а какие нет, как они располагались и где находились на экране (чтобы восстановить эти их параметры при новой загрузке Word), сохраняется в системном реестре. Информация же о том, как должны располагаться панели при самой первой загрузке шаблона, находится в самом шаблоне и используется при отсутствии нужной информации в реестре.

Каждой кнопке панели инструментов, вызывающей макрос, ставится в соответствие имя вызываемого ею макроса, которое состоит из имени модуля, содержащего этот макрос, и имени макроса в модуле.

Узнать имена модуля и макроса в модуле можно в редакторе VBA. При изменении любого компонента имени кнопка становится неработоспособной.

Несмотря на то, что в параметрах кнопки при назначении ей макроса указывается, где этот макрос находится — в Normal.dot, в каком-либо шаблоне или документе, этот параметр Word'ом не учитывается. Поэтому если в глобально загруженном шаблоне (то есть помещенном в папку автозагружаемых файлов Word) есть макрос с таким же названием и именем, что и в Normal.dot, то при нажатии кнопки, вызывающей этот макрос (расположенной на любой панели), выполняется макрос из Normal.dot, а не из глобального шаблона.

Если при запуске Word в папке Шаблоны не оказывается шаблона Normal.dot, то он создается Word'ом на основании стандартов по умолчанию. В него помещается изначальный набор панелей инструментов.

Поиск модуля и имени макроса при нажатии кнопки (при этом не имеет значения, где панель сохранена) идет в следующем порядке: "Активный документ" — "Шаблон, на котором основан документ" — "Normal.dot" — "Шаблон, загруженный глобально через папку автозагружаемых файлов Word или окно "Шаблоны и надстройки".

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


Немного о паролировании и шифровании

Защита доступа с помощью пароля — самый распространенный способ хранения всяческих секретов на компьютере. Однако о принципах такой защиты большинству пользователей известно плохо. В чем же ее основы? И как можно преодолеть такую защиту? Ниже рассказывается об этом.

Кроме того, вы узнаете, как можно сделать на VBA простейшую программу для шифрования и расшифровывания простых текстовых сообщений.

Среди математических логических функций, таких, как И, Или и других, есть весьма примечательная функция Xor. Команда, выполняющая эту функцию, есть практически во всех языках программирования. Ее действие отражено в следующей таблице:



Иными словами, это некое подобие функции Или,[15] которая в отличие от настоящей Или возвращает 0, если на входы было подано сразу две единицы.

А теперь — приглядитесь повнимательнее и обратите внимание на интереснейшую вещь: если на вход функции Xor подать значение 1 входа и результат, то получится значение 2-го входа! И то же самое — со значением 2 входа и результатом: получается значение 1-го входа. Следовательно, зная итог функции Xor и значение на любом из входов, можно получить значение на другом входе, то есть функция Xor обратима.

А отсюда вытекает и принцип парольного шифрования. Берем некий текст, который должен быть зашифрован и некое слово, служащее паролем. Любой текст — это последовательность букв-байтов, а любой байт равен восьми битам, что позволяет представить текст как последовательность битов — нулей и единиц:

11010101010110101001101010111110101010111110101010001…

Представляем так же пароль:

10010101010011

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

11010101010110101001101010111110101010111110101010001…

10010101010011100101010100111001010101001110010101010…

И теперь — шифруем: применяем к этим двум последовательностям функцию Xor:

01000000000101001100111110000111111111110000111111011…

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

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

Функция Xor, разумеется, присутствует и в VBA. Вот пример кода, реализующего возможности шифрования с ее помощью.

Sub encrypt()

Dim a, b, c, d As String

Исходный текст для шифрования — запрашивается от пользователя, к примеру:

a = "secret text from kgb agent from newyork rezidentura…"

Пароль: может запрашиваться от пользователя:

b = «password»

Итог шифрования:

c = ""

Узнаем длины каждой из строк — пароля и исходного текста:

lentext = Len(a)

lenpass = Len(b)

Собственно шифрование:

For cn = 1 To lentext

В этой строке попробуйте разобраться самостоятельно. Здесь выполняется функция Xor с каждым символом исходной строки и соответствующим символом пароля, как бы «повторенным» на всю длину исходного текста. Mid берет из середины строки символ, Asc — превращает его в ASCII-код, Str — превращает число в строку, Trim — удаляет пробелы:

d = Trim(Str(Asc(Mid(a, cn, 1)) Xor Asc(Mid(b, ((cn — 1) Mod lenpass) + 1, 1))))

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*