Что такое эмуляция? Программа эмуляции. Эмуляция вызова - что это? Эмуляция события вызова функции Смотреть что такое "Эмуляция" в других словарях

Изобретение относится к способам эмуляции вызовов системных функций для обхода средств противодействия эмуляции. Технический результат заключается в обеспечении возможности эмуляции вызовов системных функций. Результат достигается с помощью способа эмуляции вызовов системных функций для обхода средств противодействия эмуляции, при этом способ включает следующие этапы: получают исполняемый файл на вход эмулятора; проверяют условия требования эмуляции вызовов системных функций; при выполнении хотя бы одного вышеприведенного условия используют эмуляцию системных вызовов; эмулируют выполнение исполняемого файла согласно последовательному выполнению инструкций; при обнаружении вызова системной функции переключают процесс эмуляции на эмуляцию системных вызовов; производят эмуляцию вызова системной функции в виде цепочки низкоуровневых вызовов. 7 з.п. ф-лы, 6 ил., 1 табл.

Рисунки к патенту РФ 2514141

Область техники

Изобретение относится к антивирусным решениям, а более конкретно к способам эмуляции вызовов системных функций для обхода средств противодействия эмуляции.

Уровень техники

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

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

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

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

Вызов недокументированной или редко используемой API-функции.

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

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

Поиск в памяти определенных байт. Например, побайтовый поиск заголовка MZ в памяти после загрузки kernel32.dll при старте процесса. В ОС Vista 64 для kernel32.dll используется 64Кб выравнивание, и область между заголовком и первой секцией не будет отображена в адресное пространство процесса, и при попытке доступа к ней произойдет исключение. Если исключение не было зарегистрировано, то будет вызван стандартный обработчик исключений ОС, который завершит процесс.

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

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

Сущность изобретения

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

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

Согласно одному из частных вариантов реализации условием требования эмуляции вызовов системных функций является быстрое завершение эмуляции исполняемого файла.

Согласно другому частному варианту реализации условием требования эмуляции вызовов системных функций является отсутствие ограничения на время эмуляции.

Согласно еще одному из частных вариантов реализации условием требования эмуляции вызовов системных функций является отсутствие информации по неизвестному файла со стороны антивирусного приложения.

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

Согласно другому частному варианту реализации низкоуровневым вызовом является инструкция на языке ассемблера.

Согласно еще одному из частных вариантов реализации низкоуровневым вызовом является последовательный вызов всех связанных системных функций.

Согласно одному из частных вариантов реализации заканчивают эмуляцию вызова системной функции при переходе в режим ядра.

Краткое описание чертежей

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

Фиг.1 иллюстрирует пример работы классического эмулятора при обработке вызов API-функции.

Фиг.2 показывает пример выполнения API-функции в операционной среде Windows.

Фиг.3 иллюстрирует способ эмуляции вызовов API-функций в рамках настоящего изобретения.

Фиг.4 показывает систему, в рамках которой может быть реализовано настоящее изобретение.

Фиг.5 иллюстрирует способ реализации настоящего изобретения.

Фиг.6 представляет пример компьютерной системы общего назначения, на которой может быть реализовано настоящее изобретение.

Описание вариантов осуществления изобретения

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

Фиг.1 иллюстрирует пример работы классического эмулятора при обработке вызов API-функции. Когда при работе приложения в реальной ОС происходит вызов API-функции, ОС производит большое количество действий, что связано со сложной внутренней архитектурой ОС. Схематически вызов API-функции приводит к выполнению большого количества инструкций на процессоре, после чего приложению возвращается результат работы вызванной API-функции. При работе эмулятора вызов API-функции не приводит к такому же выполнению ряда инструкции, что и в реальной ОС, а вместо этого приложению возвращается сэмулированный результат работы API функции. Например, при попытке создать файл эмулятор вернет указатель на виртуальный файл. Однако несмотря на общий результат работы (например, возврат указателя на файл) результат работы вызванной API-функции может отличаться в ОС и эмуляторе, что связано с тем, что при вызове API-функции могут быть изменены, например, некоторые из регистров процессора, что не будет отражено при работе эмулятора. Данное расхождение может быть использовано для противодействия эмуляции и в первую очередь - вредоносными программами.

Фиг.2 показывает пример выполнения API-функции в операционной системе Windows. В качестве примера API-функции была выбрана WriteFile. На этапе 210 Windows приложение (например, Microsoft Word или Notepad) пытается записать данные в файл путем вызова соответствующей Win32 API функции WriteFile в Kernel32.dll. Затем на этапе 220 происходит вызов NtWriteFile в Ntdll.dll (т.е. происходит последовательный вызов всех связанных системных функций), что в свою очередь приводит к вызову системного прерывания на этапе 230 и поиску соответствующего обработчика (что делает функция KiSystemService в Ntoskrnl.dll) при вызове NtWriteFile. Отметим, что данный процесс происходит в режиме пользователя, а после вызова прерывания происходит переход в режим ядра. На этапе 240 происходит вызов NtWriteFile уже непосредственно в Ntoskrnl.dll и непосредственно выполнение записи в файл на этапе 250 (здесь также скрыты детали, связанные с работой драйвера файловой системы). Исходя из этого становится понятно, что при вызове даже одной API функции в современных ОС происходит большое количество операций (т.е. более низкоуровневых событий в рамках рассмотрения самой структуры ОС), в том числе и переход выполнения приложения из режима пользователя в режим ядра. При рассмотрении этих операций с точки зрения исполнения инструкций на языке ассемблера становится ясно, что корректно проэмулировать вызов API-функции очень тяжело ввиду необходимости учета состояния всех регистров процессора и состояния всех внутренних структур ОС.

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

Фиг.3 иллюстрирует способ эмуляции вызовов API-функций в рамках настоящего изобретения. На этапе 310 происходит классическая эмуляция приложения, как, например, в случае эмуляции приложения Notepad (приведен небольшой фрагмент кода приложения при его отладке в отладчике OllyDbg):

Такие инструкции, как MOV, PUSH, SUB, LEA и подобные будут эмулироваться как есть, т.е. путем эмуляции ассемблерных инструкций с помощью виртуального процессора в эмуляторе. Как только происходит вызов API функции (что определяется на этапе 320), такой как

то эмуляция подобного вызова будет происходить по машинным инструкциям (этап 330) с учетом всех вложенных вызовов, как представлено, например, на Фиг.2. При достижении перехода в режим ядра при выполнении API-функции, что будет проверено на этапе 340, эмуляция будет переведена в стандартный (обычный, классический) режим, т.е. дальнейшие вызовы не будут обработаны последовательно по каждой инструкции, а лишь будет возвращен результат вызова функции. После этого способ возвращается с этапа 350 на этап 310 для дальнейшей эмуляции.

Фиг.4 показывает систему, в рамках которой может быть реализовано настоящее изобретение. Допустим, на компьютере пользователя имеется неизвестный исполняемый файл 410, который следует проэмулировать для определения факта его возможной вредоносности. Следует уточнить, что под исполняемым файлом следует понимать не только исполняемые файлы, имеющие РЕ или ELF формат, но также и другие файлы, содержащие различный код, такие как файлы.class или.jar (для выполнения в виртуальной машине Java), различные файлы сценариев, такие как.vbs и многие другие. Сам файл 410 содержит инструкции 420, последовательная эмуляция которых воспроизводит выполнение файла 410. Отметим, что последовательная эмуляция подразумевает в том числе и выполнение всех переходов как условных, так и безусловных, а также вызов различных функций внутри исполняемого файла 410. При последовательной эмуляции каждая инструкция 420 попадает на вход модуля разбора инструкций 430 внутри эмулятора 405, при этом данный модуль определяет, является ли инструкция вызовом системной API-функции и в случае положительного ответа эмулятор 405 производит эмуляцию вызова данной функции (отображено как 450) в виде цепочки более низкоуровневых событий, таких какие показаны, например, на Фиг.2 (т.е. этапы 210-230 на Фиг.2 до перехода в режим ядра). В противном случае эмулятор 405 эмулирует ее исполнение в рамках классической эмуляции (отображено как 440), т.е. возвращает проэмулированный результат работы функции (т.е. без эмуляции всех этапов отмеченных на Фиг.2). В некоторых случаях инструкция вызова API-функции может быть проэмулирована, так же, как это бы сделано в случае классической эмуляции 440. Например, функция URLDownloadToFile в низкоуровневом представлении содержит сложную цепочку обращений к драйверу TCP/IP, и последовательная эмуляция подобной цепочки может быть нецелесообразна. В одном из вариантов реализации целесообразность использования эмуляции системных вызовов определяет модуль разбора инструкций 430, например, на основании известной информации о скорости проведения эмуляции тех или иных вызовов.

Фиг.5 иллюстрирует способ реализации настоящего изобретения. На этапе 510 происходит попытка эмуляции исполняемого файла 410 на компьютере пользователя. На этапе 520 проверяется, требуется ли выполнение эмуляции системных API-функций.

Требования для эмуляции системных функций:

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

Требуется провести более глубокую эмуляцию исполняемого файла 410. Это происходит в том случае, если исполняемый файл 410 не встречался ранее, что означает отсутствие информации по неизвестному файлу со стороны антивирусного приложения, в рамках которого работает эмулятор (т.е. не классифицирован и не находится в базах антивирусного приложения как вредоносное или безопасное приложение).

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

Обнаружение применения приемов самораспаковки или самозащиты (пакеры и протекторы).

Необходимость эмуляции потенциально вредоносного приложения в составе ОС пользователя со всеми присутствующими библиотеками и интерпретаторами (например, .NET или Java). Также предложенный способ эмуляции позволяет производить эмуляцию пакетных и управляющих файлов, таких как пакетный файл (batch file) с расширением.bat или.cmd, powershell-сценариев, reg-файлов для внесения данных в реестр и других типов файлов, запуск которых приводит к исполнению кода на компьютере пользователя.

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

Выполнение хотя бы одного из подобных требований приводит к эмуляции системных вызовов 450 на этапе 530 для эмуляции API-функций по машинным инструкциям, как это показано на Фиг.4. В ином случае на этапе 540 происходит использование лишь классической эмуляции 440. Использование подобных требований позволяет более гибко подходить к процессу эмуляции в рамках антивирусного приложения, не вызывая недовольства пользователя, что связано с дополнительной нагрузкой из-за необходимости эмулировать API-функции по машинным инструкциям.

Фиг.6 представляет пример компьютерной системы общего назначения, персональный компьютер или сервер 20, содержащий центральный процессор 21, системную память 22 и системную шину 23, которая содержит разные системные компоненты, в том числе память, связанную с центральным процессором 21. Системная шина 23 реализована, как любая известная из уровня техники шинная структура, содержащая в свою очередь память шины или контроллер памяти шины, периферийную шину и локальную шину, которая способна взаимодействовать с любой другой шинной архитектурой. Системная память содержит постоянное запоминающее устройство (ПЗУ) 24, память с произвольным доступом (ОЗУ) 25. Основная система ввода/вывода (BIOS) 26, содержит основные процедуры, которые обеспечивают передачу информации между элементами персонального компьютера 20, например, в момент загрузки операционной системы с использованием ПЗУ 24.

Персональный компьютер 20 в свою очередь содержит жесткий диск 27 для чтения и записи данных, привод магнитных дисков 28 для чтения и записи на сменные магнитные диски 29 и оптический привод 30 для чтения и записи на сменные оптические диски 31, такие как CD-ROM, DVD-ROM и иные оптические носители информации. Жесткий диск 27, привод магнитных дисков 28, оптический привод 30 соединены с системной шиной 23 через интерфейс жесткого диска 32, интерфейс магнитных дисков 33 и интерфейс оптического привода 34 соответственно. Приводы и соответствующие компьютерные носители информации представляют собой энергонезависимые средства хранения компьютерных инструкций, структур данных, программных модулей и прочих данных персонального компьютера 20.

Настоящее описание раскрывает реализацию системы, которая использует жесткий диск 27, сменный магнитный диск 29 и сменный оптический диск 31, но следует понимать, что возможно применение иных типов компьютерных носителей информации 56, которые способны хранить данные в доступной для чтения компьютером форме (твердотельные накопители, флеш-карты памяти, цифровые диски, память с произвольным доступом (ОЗУ) и т.п.), которые подключены к системной шине 23 через контроллер 55.

Компьютер 20 имеет файловую систему 36, где хранится записанная операционная система 35, а также дополнительные программные приложения 37, другие программные модули 38 и данные программ 39. Пользователь имеет возможность вводить команды и информацию в персональный компьютер 20 посредством устройств ввода (клавиатуры 40, манипулятора «мышь» 42). Могут использоваться другие устройства ввода (не отображены): микрофон, джойстик, игровая консоль, сканнер и т.п. Подобные устройства ввода по своему обычаю подключают к компьютерной системе 20 через последовательный порт 46, который в свою очередь подсоединен к системной шине, но могут быть подключены иным способом, например при помощи параллельного порта, игрового порта или универсальной последовательной шины (USB). Монитор 47 или иной тип устройства отображения также подсоединен к системной шине 23 через интерфейс, такой как видеоадаптер 48. В дополнение к монитору 47 персональный компьютер может быть оснащен другими периферийными устройствами вывода (не отображены), например колонками, принтером и т.п.

Персональный компьютер 20 способен работать в сетевом окружении, при этом используется сетевое соединение с другим или несколькими удаленными компьютерами 49. Удаленный компьютер (или компьютеры) 49 являются такими же персональными компьютерами или серверами, которые имеют большинство или все упомянутые элементы, отмеченные ранее при описании существа персонального компьютера 20, представленного на Фиг.6. В вычислительной сети могут присутствовать также и другие устройства, например маршрутизаторы, сетевые станции, пиринговые устройства или иные сетевые узлы.

Сетевые соединения могут образовывать локальную вычислительную сеть (LAN) 50 и глобальную вычислительную сеть (WAN). Такие сети применяются в корпоративных компьютерных сетях, внутренних сетях компаний и, как правило, имеют доступ к сети Интернет. В LAN- или WAN-сетях персональный компьютер 20 подключен к локальной сети 50 через сетевой адаптер или сетевой интерфейс 51. При использовании сетей персональный компьютер 20 может использовать модем 54 или иные средства обеспечения связи с глобальной вычислительной сетью, такой как Интернет. Модем 54, который является внутренним или внешним устройством, подключен к системной шине 23 посредством последовательного порта 46. Следует уточнить, что сетевые соединения являются лишь примерными и не обязаны отображать точную конфигурацию сети, т.е. в действительности существуют иные способы установления соединения техническими средствами связи одного компьютера с другим.

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

ФОРМУЛА ИЗОБРЕТЕНИЯ

1. Способ эмуляции вызовов системных функций для обхода средств противодействия эмуляции, в котором:

а) получают исполняемый файл на вход эмулятора;

б) проверяют условия требования эмуляции вызовов системных функций;

в) при выполнении хотя бы одного вышеприведенного условия используют эмуляцию системных вызовов;

г) эмулируют выполнение исполняемого файла согласно последовательному выполнению инструкций;

д) при обнаружении вызова системной функции переключают процесс эмуляции на эмуляцию системных вызовов;

е) производят эмуляцию вызова системной функции в виде цепочки низкоуровневых вызовов.

2. Способ по п.1, в котором условием требования эмуляции вызовов системных функций является быстрое завершение эмуляции исполняемого файла.

3. Способ по п.1, в котором условием требования эмуляции вызовов системных функций является отсутствие ограничения на время эмуляции.

4. Способ по п.1, в котором условием требования эмуляции вызовов системных функций является отсутствие информации по неизвестному файла со стороны антивирусного приложения.

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

6. Способ по п.1, в котором низкоуровневым вызовом является инструкция на языке ассемблера.

7. Способ по п.1, в котором низкоуровневым вызовом является последовательный вызов всех связанных системных функций.

8. Способ по п.1, в котором заканчивают эмуляцию вызова системной функции при переходе в режим ядра.

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

Вычислительная техника

Проще всего рассказать о том, как работает имитирование на ЭВМ, ведь именно на компьютерах, планшетах и другой технике это используется чаще всего. Допустим, у вас есть сканирующее устройство компании Canon, а вы хотите эмулировать работу HP. Устанавливается специальный софт и программы, предназначенные для оригинальных устройств HP, которые могут без проблем работать на том же Canon. Точно такая же ситуация и с большинством лицензионных дисков, которые должны присутствовать в приводе вашего компьютера или ноутбука во время работы.

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

Программа эмуляции, или чем воспользоваться для создания образа

В настоящее время проблема заключается только в том, какую именно программу выбрать. Их существует огромное количество, и большинство достойных вариантов размещены в сети совершенно бесплатно. К примеру, DaemonTools - действительно эффективная утилита, которая работает без сбоев и не занимает много места на жестком диске. Такого плана софт позволяет эмулировать сразу несколько дисков, в большинстве случаев можно создавать 3-5 приводов, что зависит от версии программы. Русскоязычный интерфейс достаточно простой и понятный даже начинающему. В главное окно нужно добавить ранее созданный образ и эмулировать его. Есть и другие хорошие программы, такие как GizmoDrive, Alcohol 52% и т. д. Несмотря на большой выбор, принцип работы всех утилит примерно одинаков, главная цель - это заставить систему думать, что в приводе находится настоящий, лицензионный диск.

Эмуляция дисков: краткий обзор GizmoDrive

Основное назначение утилиты заключается в монтировании файлов, имеющих расширение ISO. Помимо этого, может быть использован и другой формат, который вам подходит. Утилита автоматически создает привод и вставляет туда образ, который отображается, как настоящий Тут для вас доступны самые популярные расширения, такие как ISO, BIN, MDS, MDF и другие. Также стоит отметить достаточно большое количество приводов, максимум 26 штук. Для упрощения создания образов предусмотрен специальный менеджер, который поможет даже новичку разобраться в работе. Также Gizmo позволяет пользователю создавать образ GDrive для эмуляции жесткого диска вашего устройства. Здесь предусмотрены даже сжатие и что повышает не только производительность, но и уровень безопасности файлов. В принципе, разобраться, что такое эмуляция, вместе с такой простой утилитой, как GizmoDrive, будет предельно просто.

О преимуществах имитирования

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

Классификация эмуляции

В настоящее время практически всегда используется аппаратная платформа. Но тут есть один важный момент - сначала нужно получить или эмулировать операционную систему или оборудование. Такое проделывается всего лишь один раз. Следовательно, такие имитаторы имеют практически неограниченный доступ к оборудованию. Зачастую это обычные слои совместимости, которые позволяют получить доступ к определенному софту или оборудованию. Опять же, для операционной системы «Виндовс» это один слой, а для Linux - совсем другой.

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

Имитация нажатия клавиш

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

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

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

Немного об эмуляции COM-порта

Есть специальные программы, позволяющие имитировать устройства, находящиеся в вашем Com-порту. Основная задача заключается в работе с пакетами данных. Утилита их подстраивает под себя, используя форматы RS232, UPD и другие. Как показывает практика, эмуляция Com-порта используется разработчиками различных приложений с целью их тестирования и проверки на работоспособность. Крайне полезна функция и для людей, работающих по сети, например, для сетевых инженеров. Также значительно облегчается и системная интеграция. Опять же, если говорить простыми словами, то вы можете проверить свою систему или какую-либо программу, не имея реального устройства в порту. В принципе, эмуляция дисков чем-то похожа по смыслу, но некоторые отличия все же имеются. Если вы новичок, то рекомендуется воспользоваться утилитой под названием COMPortDataEmulator. Русскоязычный интерфейс и удобная навигация по меню помогают быстро разобраться, что к чему.

Несколько важных моментов

Конечно же, нельзя не сказать об эмуляции устройств, работающих на «Андроиде», так как в последнее время это крайне актуально. Вы можете использовать разные программы, например, Genymotion, которая является довольно простой, а также стабильной и удобной. "Фишка" от производителя в том, что поддерживается графики, а это увеличенная производительность.

После того как вы установите утилиту, ее нужно настроить, и можно приступать к работе. Эмуляция «Андроида» мало чем отличается от настоящей игры на этом устройстве, поэтому большинство пользователей используют такого рода имитацию. Когда вы первый раз запустите программу, то получите сообщение о том, что нет виртуальных устройств, поэтому нужно создать новое. Далее жмете Connect и авторизуете свой аккаунт, который вы ранее уже создали. Дальше нет ничего сложного, находите нужную игру и нажимаете Play.

Заключение

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

Теперь вы уже немного знаете о том, как работает эмуляция вызова, что это такое и как пользоваться. Главное - это разобраться в принципе действия. Не забывайте о том, что прежде чем или что-то в этом роде, нужно проверить компьютер на вирусы, ведь вредоносное ПО может полностью испортить образ. Записав образ, не выбрасывайте диск, ведь он вам может еще понадобиться.

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

Около полугода назад мне задали примерно такой вопрос: “Я использую крупный фреймворк, запускающий некую функцию по действию пользователя. Хочу, не меняя кода этой функции, выполнить по событию вызова этой функции свой код.”. Практика далеко не лучшая, события вызова функции не существует, я просто покрутил пальцем у виска и сказал, что это жуткий говнокод, так делать не стоит, да и это, просто-напросто, - невозможно.

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

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

  1. Результата выполнения
  2. Переданных аргументов
  3. Контекста вызова (что есть this при вызове)
  4. Количества вызовов функции после создания обработчика
(Этот список полностью соответствует аргументам, передающимся в обработчик)

addCallListener = function(func, callback){ var callNumber = 0; return function(){ var args = .slice.call(arguments); var result; try { result = func.apply(this, arguments); callNumber++; } catch (e) { callback(e, args, this, callNumber); throw e; } callback(result, args, this, callNumber); return result; } }

Очень просто и кратко, правда?

Затем, переопределяем какую-нибудь функцию следующим образом:

SomeFunct = addCallListener(someFunct, function(result, args, self, callNumber){ //Do Something }); // или Constructor.prototype.method = addCallListener(Constructor.prototype.method, function(result, args, self, callNumber){ //Do Something });

Очевидно, она должна быть «видна» в той части кода, где это происходит.

Несколько примеров
Для запуска примеров необходимо наличие открытой консоли (в хроме вызывается по Ctrl+Shift+i).

Спасибо товарищам с форума javascript.ru за критику и дополнения.

UPD
Немного расширил функцию: теперь вместо одного колбека вторым аргументом передается объект

  1. before (вызывается перед запуском функции)
  2. success (вызывается, если функция отработала успешно)
  3. error (если возникла ошибка)
  4. after (вызывается в любом случае, не зависимо от успешности выполнения)
Каждому обработчику передается объект
  1. self (контекст)
  2. name (имя функции)
  3. status («error» или «success»)
  4. successNumber (количество успешных вызовов)
  5. errorNumber (количество вызовов с ошибкой)
  6. result (результат, если есть)
  7. error (ошибка, если есть)
Кроме этого, функция addCallListener теперь является частью объекта конструктора Function, во избежание попадания в window или process.

Форкнуть и потестить можно здесь.

Всю жизнь пользовалась простенькими телефонами, и отдавала предпочтение только марке Nokia. Но жизнь не стоит на месте, однажды мне захотелось телефон с камерой и выходом в интернет - ведь это так удобно! В магазине сотовой связи модельный ряд кнопочных Nokia был не велик, но на вариант 301 Dual взгляд упал сразу. Люблю, чтобы было простенько, но со вкусом, без лишних раздражающих деталей. Этот телефон в плане внешнего вида удовлетворил меня на 100%. Попросила показать поближе - всё понравилось. Покупка обошлась мне в четыре тысячи. Дополнительно приобрела кожаный чехол.

О телефоне у меня осталось двоякое впечатление. Первое время, пока привыкала, всё казалось шикарным. Не так давно я поменяла свою старенькую Оку на Renault Logan - так вот, сравнение было аналогичным. Мне очень понравилось то, что в телефоне всё продумано до мелочей. Стильный и удобный. То, что надо. Но со временем, конечно, выявились и минусы, но обо всём по порядку.

Внешне телефон мне нравится. Стильный, аккуратный, тонкий. Очень хороший пластик. Размер телефона относительно большой, но в карман умещается. Экран у телефона большой, цветность не раздражает, оттенки мягкие и приятные для глаз. Кнопки удобные, плюс - со временем не сотрутся, но есть вероятность, что вспучатся (у меня уже был телефон с подобной "сплошной" клавиатурой, и она от регулярного использования вечно была вспученной, надеюсь, с этим телефоном такого не случится). Полифония у телефона чистая, но относительно тихая. На улице и даже иной раз дома я его не слышу и вечно пропускаю звонки. Это касается и "родных" сигналов, и загруженной музыки. Бесит. Но для прослушивания музыки, например, динамик идеальный. Иногда дома я слушаю радио по громкой связи - звучание как с хорошего магнитофона. Меню в телефоне мне очень нравится, удобное, в наличии есть различные приложения. Телефонная книга шикарная! Тут вам и графа под имя, и под фамилию. В контакт можно добавить кучу номеров, опций - море. Но нет главного, того, что, считаю, должно быть в каждом телефоне - чёрного списка. Беда усугубляется тем, что мой сотовый оператор не предоставляет услугу по блокировке номеров. Пробовала по подсказке знающего человека найти соответствующее приложение - но тщетно. Так и пришлось сменить номер и быть аккуратной в плане круга лиц, его знающего.

Интернет.... Это отдельный разговор. Достаточно примитивный. Если вы ищете телефон, который позволит вам с комфортом общаться в социальных сетях, забыв о компьютере - проходите мимо. С этого телефона только обновления просматривать. Пока страницы грузятся - все ногти сгрызёшь. А к постоянным глюкам я уже привыкла: действия очень часто уходят в никуда. Это касается и отправки сообщений, комментариев, и загрузки страниц (с первого раза, как правило, всё получается "в холостую"). Сообщения, прежде, чем отправить, я всегда копирую: если действие не пройдёт, весь текст коту под хвост. Бывает, и по сто раз одно и то же отправляется. А насчёт лайков отдельная история. Вот вы, когда просматриваете ленту, ставите лайки на то, что вам понравилось и листаете дальше, так? Тут всё сложно. Первый лайк, как правило, ставится, а второй отправляет вашу новостную ленту в самое начало. И так регулярно! В последнее время всё чаще подумываю о покупке нового телефона, сенсорного на базе андроид, так как эти все несовершенства меня стали порядком раздражать: отнимает много времени и нервов.

А ещё телефон часто глючит, чего от Нокии, я, честно сказать, не ожидала. Ни с того ни с сего белеет экран и вся система перезагружается заново. Не нравится то, что на солнышке не видно букв, когда набираешь текст, не нравится камера... Явно не 3.2! Максимум на 2 Мп тянет. Да и работает телефон как то слегка заторможено, хотя при этом у меня память практически пустая (загружена всего одна песня на звонок). В плане опций телефон вроде и умненький, но внутри очень много не понятных мне названий. Например, "Эмуляция вызова" - что это?

В общем, я разочарована. Ожидала лучшего. Дизайн мне нравится, всё остальное так себе. Со временем куплю другой. Оцениваю телефон на средние три балла, но к покупке рекомендую: соотношение "цена-качество" вполне адекватны.

Обновляю свой отзыв спустя полгода с момента покупки. Сегодня 3 января 2015 года. С телефоном так и хожу, хотя поначалу было дикое желание поменять его. Со временем привыкла, сейчас уже нравится и другого не хочется. Для работы в интернете установила себе браузер Опера, и всё теперь работает хорошо. И камера оказалась не такой уж и плохой. Я сказала бы, качество фотографий, пожалуй, будет получше, чем у других моделей телефонов данной ценовой категории, да и некоторых тех, что подороже. Их можно распечатывать и не стыдно выкладывать в соцсети. Единственный нюанс - в помещении почему то фотографирует лучше, чем на улице. Кнопки со временем не вспучились, зря я переживала. Да и сам телефон не потерял "товарного" вида. Периодически, как и прежде, он ловит глюки, но не часто. Пару раз было такое, что телефон сам по себе выключался и я долго не могла его включить. С чем это было связано - не знаю. Память у меня не заполнена вообще (не храню на нём фотографии и музыку, только смс и контакты). Меняю "тройку" на "четыре" балла. Не такой уж и плохой телефончик.