2010-04-23 23 views
9

Próbuję zrozumieć, jak działa oprogramowanie takie jak App-V i piaskownica (http://www.sandboxie.com/). Ale w moim życiu nie mogę wymyślić niczego, co mogłoby to uczynić możliwym. W jaki sposób przechwytują wywołania API i oszukują oprogramowanie docelowe? Gdyby ktoś powiedział, że to tylko magiczny pył i kurz, uwierzyłbym im. Poważnie jednak, czy są jakieś białe księgi, które omawiają rozwiązania tego problemu?W jaki sposób jest wdrażana wirtualizacja aplikacji?

Jeśli jest to możliwe na poziomie CLR, byłoby to dobre, ale jeśli to konieczne, chcę natywnie.

+1

powinieneś szukać http://boxedapp.com/ to SDK dla wirtualizacji aplikacji dla programistów. – MastAvalons

Odpowiedz

3

Sandboxie robi to przez zasadniczo wstrzykiwanie kodu do podstawowego API Windows, w taki sam sposób jak wirus (dlatego Vista x64 uniemożliwia to zachowanie i dlaczego Sandboxie nie działa w tym systemie operacyjnym).

Here to projekt wyjaśniający zaczepianie interfejsu API. Nauczyłem się, jak to wszystko działa, studiując kod źródłowy dla Metamod:Source (używane dla SourceMod dla CounterStrike: Source :))

+0

Cool! Przyjrzę się temu. Czy mam rację zakładając, że funkcja API hooking nie jest dozwolona w 64-bitowych wersjach systemów Windows Vista i 7?Dzięki! –

+1

To samo określenie dla dwóch różnych rzeczy; możesz "zaczepić" o tyle, o ile możesz wywoływać swój kod, gdy nastąpi określone zdarzenie (zahaczanie "debuggowania" lub "środowiska wykonawczego" - działa tylko z wydarzeniami, które system operacyjny pozwala na hakowanie). Nie można jednak nadpisać bibliotek dll, które implementują specyfikę faktycznego zdarzenia, które jest tym, czego potrzebuje sandboxie. Zobacz [tutaj] (http://en.wikipedia.org/wiki/Hooking) –

0

Nie wiem, jak to zrobiło MS, ale tutaj jest podstawowa teoria jednego sposobu, aby to zrobić. ..

Co chcesz zrobić, to podłączyć się do wywołań systemowych (podobnie jak w łańcuchu do przerwania).

  1. Wywołanie systemowe.
  2. Własne przechwycenie zostanie wykonane.
  3. Jeśli ta karta systemowa nie wymaga specjalnego przetwarzania, kontynuuj. W przeciwnym razie wymaga specjalnego przetwarzania i przejdź do kroku 4.
  4. Uzyskaj wskaźnik stosu, wskaźnik instrukcji i cały ten jazz ze stosu i utwórz nową ramkę stosu, aby odesłać cię z powrotem do niestandardowego kodu w user-land.
  5. Wykonuj masowanie danych, ścieżek i innych elementów w obszarze użytkownika. W ten sposób, jeśli podstawowy system operacyjny ulegnie zmianie, ten kod nie musi być aktualizowany [tak często].
  6. Po zakończeniu masowania danych ponownie wykonaj wywołanie systemowe.
  7. Własne przerwanie wykonuje się ponownie, ale powinno wykryć, że dzwonisz z poziomu warstwy pomocniczej dla użytkownika i przekazać połączenie. Do skonfigurowania prawidłowych adresów zwrotnych może być wymagana pewna manipulacja ramkami stosu.
  8. Wykonywane jest standardowe wywołanie systemowe.
  9. Gdy wywołanie systemowe zostanie zwrócone, ramka stosu powinna wysłać cię z powrotem do regularnego przepływu programu.

Mam nadzieję, że to pomoże.

0

Wyjazd strony Wikipedia na X86 Virtualization który omawia zarówno wirtualizację oprogramowania (wczesne VMWare, wino, Sandboxie i do pewnego stopnia App-V) i bardziej nowoczesnej wirtualizacji sprzętowej (Hyper-V, VMware, inne) .

Przyjmuję, że szukasz konkretnie do wirtualizacji oprogramowania jak przy użyciu .NET (lub dowolnego CLR) już jesteś abstrakcyjne się z dala od architektury procesora w stopniu, szczególnie z celem "AnyCPU" .

Powiązane problemy