Как виртуализация приложений реализована?

Я пытаюсь понять, как программное обеспечение как Приложение-V и sandboxie (http://www.sandboxie.com/) работает. Но ни за что в жизни, я не могу думать ни о чем, что могло сделать это возможным. Как они прерывают вызовы API и обманывают целевое программное обеспечение? Если кто-то сказал бы, что это просто волшебно и пыль эльфа, я верил бы им. Серьезно, хотя, там какие-либо отчеты, которые обсуждают решения этой проблемы?

Если бы это возможно на уровне CLR затем, это было бы хорошо, но я готов пойти собственный компонент, если я имею к.

9
задан Ilian 23 April 2010 в 14:40
поделиться

3 ответа

Sandboxie делает это, по сути, внедряя код в ядро ​​Windows API, точно так же, как это сделал бы вирус (вот почему Vista x64 предотвращает такое поведение и почему Sandboxie не работает в этой ОС).

Здесь - проект, объясняющий перехват API. Я узнал, как все это работает, изучив исходный код для Metamod: Source (используется для SourceMod для CounterStrike: Source :))

3
ответ дан 5 December 2019 в 01:42
поделиться

Я не знаю, как это сделала MS, но вот основная теория одного из способов сделать это ...

Что вы хотите сделать, так это подключиться к системным вызовам (аналогично объединению в прерывание).

  1. Произошел системный вызов.
  2. Ваш пользовательский перехват будет выполнен.
  3. Если этот системный вызов не требует специальной обработки, продолжайте. В противном случае требуется специальная обработка и переход к шагу 4.
  4. Получите указатель стека, указатель инструкций и все остальное из стека и создайте новый фрейм стека, чтобы отправить вас обратно к вашему пользовательскому коду в пользовательском пространстве.
  5. Проведите массирование данных, путей и прочего на земле пользователя. Таким образом, если базовая ОС изменяется, этот код не нужно обновлять [так часто].
  6. После обработки всех данных снова выполните системный вызов.
  7. Ваше настраиваемое прерывание выполняется снова, но оно должно определить, что вы вызываете со своего вспомогательного уровня пользователя, и передать вызов через него. Для установки правильных адресов возврата могут потребоваться некоторые манипуляции с кадрами стека.
  8. Выполняется обычный системный вызов.
  9. Когда системный вызов возвращается, кадр стека должен отправить вас обратно в обычный поток программы.

Надеюсь, это поможет.

0
ответ дан 5 December 2019 в 01:42
поделиться

Посетите страницу Википедии на Виртуализация X86 , где обсуждаются как виртуализация программного обеспечения (ранние версии VMWare, Wine, Sandboxie и, в некоторой степени, App-V), так и более современные аппаратная виртуализация (Hyper-V, VMWare, другие).

Я предполагаю, что вы ищете конкретно виртуализацию программного обеспечения , поскольку, используя .NET (или любую среду CLR), вы уже в некоторой степени абстрагируетесь от архитектуры ЦП, особенно с помощью ' Цель AnyCPU.

0
ответ дан 5 December 2019 в 01:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: