Wie wird die Anwendungsvirtualisierung implementiert?

9

Ich versuche zu verstehen, wie Software App-V und Sandboxie ( Ссылка ) arbeiten. Aber für das Leben von mir kann ich mir nichts vorstellen, was das möglich machen könnte. Wie fangen sie API-Aufrufe ab und überlisten die Zielsoftware? Wenn jemand sagen würde, dass es nur Magie und Feenstaub ist, würde ich ihnen glauben. Im Ernst, gibt es irgendwelche Whitepaper, die Lösungen für dieses Problem diskutieren?

Wenn das auf der CLR-Ebene möglich ist, dann wäre das gut, aber ich bin bereit, nativ zu werden, wenn ich muss.

    
Ilian Pinzon 23.04.2010, 14:40
quelle

3 Antworten

3

Sandboxie tut dies, indem er Code in die Kern-Windows-API einfügt, genau wie ein Virus (weshalb Vista x64 dieses Verhalten verhindert und warum Sandboxie unter diesem Betriebssystem nicht funktioniert).

Hier ist ein Projekt, das das API-Hooking erklärt. Ich habe gelernt, wie all das funktioniert, indem ich den Quellcode für Metamod: Source (verwendet für SourceMod for CounterStrike: Source :)) lese / p>     

BlueRaja - Danny Pflughoeft 23.04.2010, 14:52
quelle
0

Ich weiß nicht, wie MS es gemacht hat, aber hier ist die grundlegende Theorie von einem Weg, es zu tun ...

Sie wollen sich in die Systemaufrufe einklinken (ähnlich wie beim Interrupt).

  1. Systemaufruf erfolgt.
  2. Ihr benutzerdefinierter Abfang wird ausgeführt.
  3. Wenn dieser Syscall keine spezielle Verarbeitung benötigt, fahren Sie fort. Andernfalls müssen Sie eine spezielle Verarbeitung durchführen und mit Schritt 4 fortfahren.
  4. Holen Sie den Stapelzeiger, den Befehlszeiger und all diesen Jazz vom Stapel und erstellen Sie einen neuen Stapelrahmen, um Sie zu Ihrem benutzerdefinierten Code im Benutzerland zu schicken.
  5. Massieren Sie Ihre Daten und Pfade und Dinge im Benutzerland. Auf diese Weise muss dieser Code, wenn sich das zugrunde liegende Betriebssystem ändert, nicht [wie häufig] aktualisiert werden.
  6. Nach der Datenbereinigung führen Sie den Systemaufruf erneut aus.
  7. Ihr benutzerdefinierter Interrupt wird erneut ausgeführt, sollte jedoch erkennen, dass Sie von Ihrer Benutzer-Land-Helper-Schicht aus anrufen und den Anruf weiterleiten. Möglicherweise ist eine Manipulation des Stack-Frames erforderlich, um die richtigen Rückgabeadressen einzurichten.
  8. Regelmäßiger Systemaufruf wird ausgeführt.
  9. Wenn der Systemaufruf zurückkehrt, sollte der Stack-Frame Sie zu Ihrem normalen Programmablauf zurückschicken.

Hoffe, das hilft.

    
Sparky 23.04.2010 16:47
quelle
0

Schauen Sie sich die Wikipedia-Seite auf X86 Virtualization an, in der sowohl die Software-Virtualisierung (frühe VMWare , Wine, Sandboxie und in gewissem Maße App-V) und die modernere Hardware-Virtualisierung (Hyper-V, VMWare, andere).

Ich gehe davon aus, dass Sie speziell nach Software-Virtualisierung suchen. Wenn Sie .NET (oder eine beliebige CLR) verwenden, abstrahieren Sie sich bereits etwas von der CPU-Architektur, insbesondere mit der 'AnyCPU' Ziel.

    
saschabeaumont 27.04.2010 06:34
quelle

Tags und Links