2010-04-23 18 views
9

Estoy tratando de entender cómo funcionan los programas como App-V y sandboxie (http://www.sandboxie.com/). Pero por mi vida, no puedo pensar en nada que pueda hacer esto posible. ¿Cómo interceptan las llamadas API y engañan al software objetivo? Si alguien dijera que es magia y polvo de duendes, los creería. En serio, ¿hay documentos que discutan las soluciones a este problema?¿Cómo se implementa la virtualización de aplicaciones?

Si esto es posible en el nivel CLR, sería bueno, pero estoy dispuesto a convertirme en nativo si fuera necesario.

+1

debe mirar http://boxedapp.com/ es SDK para la virtualización de aplicaciones para desarrolladores. – MastAvalons

Respuesta

3

Sandboxie lo hace básicamente inyectando código en la API principal de Windows, de la misma manera que lo haría un virus (razón por la cual Vista x64 evita este comportamiento y por qué Sandboxie no funciona en ese sistema operativo).

Here es un proyecto que explica el enganche API. Aprendí cómo todo este trabajo estudiando el código fuente para Metamod:Source (usado para SourceMod para CounterStrike: Source :))

+0

¡Genial! Veremos eso. ¿Estoy en lo cierto al suponer que el enganche API no está permitido en las versiones de 64 bits de Windows Vista y 7?¡Gracias! –

+1

Mismo término para dos cosas diferentes; puede "enganchar" en la medida en que puede hacer que se invoque su código cuando ocurre un evento específico (enganche de "depuración" o "tiempo de ejecución"; solo funciona con los eventos que el sistema operativo le permite enganchar). Sin embargo, no puede sobrescribir los DLL que implementan los detalles del evento real, que es lo que sandboxie necesita. Ver [aquí] (http://en.wikipedia.org/wiki/Hooking) –

0

No sé cómo lo hizo MS, pero aquí está la teoría básica de una forma de hacerlo. ..

Lo que quiere hacer es conectar las llamadas al sistema (similar al encadenamiento en interrupción).

  1. Se produce una llamada al sistema.
  2. Se ejecuta su intercepción personalizada.
  3. Si este syscall no necesita un procesamiento especial, continúe. De lo contrario, necesita un procesamiento especial y vaya al paso 4.
  4. Obtenga el puntero de pila, el puntero de instrucción y todo ese jazz de la pila, y cree un nuevo marco de pila para devolverlo a su código personalizado en user-land.
  5. Haga su masaje de datos y rutas y cosas en el terreno del usuario. De esta forma, si el sistema operativo subyacente cambia, este código no tiene que actualizarse [con la frecuencia].
  6. Después de todos los datos de masaje, ejecute de nuevo la llamada al sistema.
  7. Tu interrupción personalizada se ejecuta nuevamente, pero debe detectar que estás llamando desde tu capa de ayuda de usuario y transmitir la llamada. Es posible que se requiera cierta manipulación de cuadros de pila para configurar las direcciones de devolución adecuadas.
  8. Se ejecuta la llamada al sistema regularmente.
  9. Cuando la llamada al sistema retorna, el marco de pila debe enviarlo nuevamente a su flujo de programa normal.

Espero que esto ayude.

0

Mira la página de Wikipedia sobre X86 Virtualization que analiza tanto el software virtualización (a principios de VMWare, vino, Sandboxie y en una medida de App-V) y el más moderno de virtualización hardware (Hyper-V, VMware, otros) .

Estoy asumiendo que usted está buscando específicamente para software de virtualización como mediante el uso de .NET (o cualquier CLR) ya está abstrayendo a sí mismo fuera de la arquitectura de la CPU a un grado, sobre todo con el objetivo de 'Cualquier CPU' .