Меню Рубрики

Что такое эмуляция вызова в телефоне. Что такое эмуляция? Программа эмуляции


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

Говоря простым языком, эмулятор - это то же самое, что и интерфейс нашего телефона, только отображенный на компьютере. Программа дает возможность проверить , не загружая их на телефон. К тому же, он позволяет увидеть swf, начиная с версии 1.1. и выше, которые не видит сама программа для создания тем оформления Nokia S40 ThemeStudio_2.2 (S40 3rd edition).

Чтобы полноценно работал эмулятор на компьютере, нужно скачать программу jre-1_5_0_16-windows-i586-p, которая находится .

Рассмотрим подробно, что мы сможем увидеть и проверить, непосредственно работая с эмулятором. Открыв тему оформления в программе, мы сможем подробно увидеть все элементы интерфейса телефона в новом оформлении. Эмулятор позволяет увидеть не только главный (основной) дисплей, но также подробно рассмотреть все вкладки и элементы оформления.

Для того чтобы загрузить нужную вам тему оформления в эмулятор, нажмите на главной панели программы на вкладку File и из выпавшего меню выберите вкладку Open .

Примечание . Не забывайте, что для корректной работы эмулятора название темы для Nokia должно быть на латинице или задано цифрами.

Эмулятор можно найти на forum.nokia , где вам нужно будет только выбрать нужную версию. Например, для новых телефонов Nokia выбираем Series 40 5th Edition SDK (47МВ).

Примечание : Перед тем, как загружать дополнительные компоненты, проверьте, на какой именно версии платформы S40 построен ваш телефон Nokia.

Регистрация программы происходит так же, как и регистрация программы Nokia S40 ThemeStudio_2.2 (S40 3rd edition). Как это делается, можно прочитать в статье

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

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

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

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

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

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

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

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

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

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

  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.

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

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

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

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

  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.

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


Владельцы патента RU 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, в котором заканчивают эмуляцию вызова системной функции при переходе в режим ядра.

Похожие патенты:

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

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

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

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

Изобретение касается системы, предназначенной для управления правами доступа пользователя к информации, связанной с полетом и безопасностью летательного аппарата. Технический результат заключается в обеспечении идентификации пользователей, получавших доступ к указанной информации. Предложены система управления правами доступа к бортовым прикладным программам и данным и способ, применяемый этой системой, а также летательный аппарат, содержащий эту систему. Система управления правами доступа к бортовой информации пользователя, находящегося на борту летательного аппарата, содержит, по меньшей мере, одно устройство (10) идентификации, выполненное с возможностью считывания информации о личности пользователя, содержащейся в его персональной карточке, и бортовой вычислитель (1), содержащий средства (11) управления правами доступа, выполненные с возможностью аутентификации пользователя и определения прав доступа к бортовой информации в зависимости от личности пользователя. 3 н. и 7 з.п. ф-лы, 2 ил.

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

Изобретение относится к распространению криптографического секретного ключа между передающей и принимающей сторонами. Технический результат заключается в возможности автоматического регулирования защиты и времени ожидания генерации криптографического секретного ключа за счет установки числа итераций, на основании которого управляют числом сообщений, обмен которыми должен быть выполнен в течение генерации криптографического секретного ключа. Устройство для приема и передачи данных защищенным образом содержит контроллер генерации ключа и блок предоставления числа итераций. 4 н. и 7 з.п. ф-лы, 17 ил.

Изобретение относится к устройству для отправки изображений, требующему аутентификации для использования данного устройства и обеспечиваемой в нем функции. Техническим результатом является обеспечение возможности установки наследования информации аутентификации для отправки изображений и отображения экрана для ввода информации аутентификации в соответствии со способом установки пункта назначения. Для этого в устройстве для отправки изображений выполняют обработку для первой аутентификации для аутентификации пользователя, сохраняют информацию аутентификации, используемую в случае, когда выполняется обработка для первой аутентификации, и устанавливают пункт назначения, к которому средство отправки отправляет данные изображения, посредством множества видов способов установки пункта назначения. Затем выполняют обработку для второй аутентификации, требуемой для средства отправки для отправки данных изображения к установленному пункту назначения, и определяют, использовать ли информацию аутентификации, сохраненную в средстве хранения информации, когда выполняется обработка для второй аутентификации, на основе способа установки пункта назначения. 3 н. и 5 з.п. ф-лы, 17 ил.

Изобретение относится к беспроводной связи, а именно к способу для безопасной передачи клиента управления доступом. Техническим результатом является повышение безопасности. Способ содержит запрос пользовательского клиента управления доступом из беспроводной сети, при этом запрос связан с первым подтверждающим сертификатом; прием пользовательского клиента управления доступом и второго подтверждающего сертификата, при этом первый и второй подтверждающий сертификаты выданы доверенной структурой; и сохранение пользовательского клиента управления доступом в безопасном элементе, если второй подтверждающий сертификат действителен; причем пользовательский клиент управления доступом сохраняют в индивидуальном сегменте из числа множества сегментов, из которых состоит безопасный элемент, и последующие модификации сохраненного пользовательского клиента управления доступом могут быть выполнены только с использованием второго подтверждающего сертификата; а доступ к беспроводной сети ограничен (i) доступом посредством пользовательского клиента управления доступом и (ii) запросами пользовательских клиентов управления доступом. 3 н. и 19 з.п. ф-лы, 8 ил.

Изобретение относится к вычислительной технике и электросвязи, предназначено для решения задач защиты компьютерной информации. Техническим результатом изобретения является повышение быстродействия за счет увеличения степени параллелизма. Способ выполнения трех раундов преобразования осуществляется вдоль осей х, у, z. В первом раунде выполняют N двухмерных преобразований замены слоев L x0, L x1, ..., L x(N-1) ; во втором раунде выполняют N двухмерных преобразований замены слоев L y0 , L y1 , ..., Ly (N-1); в третьем раунде выполняют N двухмерных преобразований замены слоев L z0, L z1, ..., L z(N-1) . 5 ил., 1 табл.

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

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

Изобретение относится к способу и устройству выполнения криптографического преобразования в электронном компоненте. Технический результат заключается в повышении безопасности установки соединений с аутентификацией пароля за счет повышения эффективности выполнения криптографического преобразования. В способе выполняют получение точки P(X,Y) исходя из параметра t на эллиптической кривой, удовлетворяющей выражению Y2=f(X), и исходя из многочленов X1(t), X2(t), Х3(t) и U(t), удовлетворяющих равенству f(X1(t)).f(X2(t)).f(X3(t))=U(t)2 в Fq, при этом q=3 mod 4, далее получают значение параметра t и определяют точку Р путем выполнения подэтапов, на которых (i) вычисляют Х1=X1(t), X2=X2(t), Х3=Х3(t) и U=U(t), (ii) если элемент f(X1).f(X2) является квадратом, то проверяют, является ли элемент f(X3) квадратом в Fq, и если является, то вычисляют квадратный корень из элемента f(X3), чтобы получить точку Р(Х3), (iii) иначе проверяют, является ли элемент f(X1) квадратом, и если является, вычисляют квадратный корень из f(X1), чтобы получить точку P(X1), (iv) иначе вычисляют квадратный корень элемента f(X2), чтобы получить точку P(X2), и далее эту точку Р используют в криптографическом приложении. 2 н. и 6 з.п. ф-лы, 3 ил.

Группа изобретений относится к средствам контроля по меньшей мере одного процесса, происходящего в системе, связанной с безопасностью. Технический результат заключается в обеспечении возможности гибкой и обобщенной сертификации связанных с безопасностью систем. Для этого предложен способ контроля связанной с безопасностью системы посредством устройства контроля, обеспеченного для контроля связанной с безопасностью системы, в котором осуществляется: выбор первого процесса из множества процессов, исполняемых на устройстве контроля, формирование вызова первым процессом; передачу вызова к устройству, формирующему по меньшей мере часть связанной с безопасностью системы; выбор второго процесса из множества процессов, исполняемых на связанной с безопасностью системе; вычисление, посредством второго процесса, результата обработки путем применения по меньшей мере одной предварительно определенной функции к вызову; передача, вторым процессом, результата обработки в первый процесс; проверку, первым процессом, результата обработки, вычисленного вторым процессом, с результатом обработки, вычисленным первым процессом, причем результат обработки, вычисленный первым процессом, применяет ту же самую по меньшей мере одну предопределенную функцию; и оценивание связанной с безопасностью системы как находящейся в безопасном состоянии, если результат обработки, вычисленный первым процессом, и результат обработки, вычисленный вторым процессом, согласуются. 3 н. и 8 з.п. ф-лы, 2 ил.

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