2009-07-06 16 views
5

Jakie są Twoje zalecenia dotyczące biblioteki lub kodu API do zahaczania w aplikacji komercyjnej?Jaki jest zalecany sposób przechwytywania interfejsów API Win32 dla aplikacji komercyjnych?

Spojrzałem na Microsoft Detours, który wydaje się być bardzo dobry, ale zdecydowanie nie ma budżetu na zysk, którego oczekuję od mojego wniosku.

Czy istnieje biblioteka, która zapewnia kompatybilność w WinXP i Vista (i Windows 7, jeśli nie za dużo, aby zapytać!)? Czy jest ktoś z doświadczeniem w używaniu takiej biblioteki w produkcie komercyjnym?

+0

Może być pomocne, jeśli możesz określić, jakie API chciałeś podłączyć i dlaczego. – Michael

+0

Objazdy to pakiet instrumentów. Czy to jest to, co chcesz zrobić, instrumentować biblioteki DLL Win32? –

+0

Po pierwsze, naprawdę przepraszam, że nie odpowiedziałem na czas, byłem na długim urlopie. Wracając do tematu, chcę podłączyć funkcję CreateProcess i obsługę plików w systemie Windows. Zasadniczo chcę, aby moja aplikacja przejęła kontrolę, zanim system operacyjny Windows mógłby dotknąć pliku (prawdopodobnie pliku EXE). –

Odpowiedz

0

Możesz spróbować EasyHook, wygląda na użyteczny. Nie można zaszyfrować "całego systemu", ale potrzebowałbyś czegoś takiego jak Proxy DLL.

http://www.codeplex.com/easyhook

+0

EasyHook został przeniesiony na https://github.com/EasyHook/EasyHook – brewmanz

15

Zahaczanie API w Win32 nie jest tak naprawdę możliwe w sensie ogólnosystemowym. Możesz to przybliżyć, wstrzykując bibliotekę DLL do każdego procesu, a następnie łatając każdy proces od wewnątrz. Możesz użyć łaty IAT (w której łatasz wywołującą wersję binarną) lub łatki w stylu objazdu (gdzie łatasz adresata).

Łatka osoby dzwoniącej (łatanie IAT) oznacza, że ​​należy wyliczyć każdą bibliotekę DLL, która jest załadowana w procesie i załatać osobno każdą z nich. Będziesz również musiał podłączyć LoadLibrary, aby załączyć nowe biblioteki DLL, które są wczytywane w locie.

Krosowanie wywoływacza (objazdy) ma tę zaletę, że wystarczy załączyć tylko jedno miejsce, aby hak miał zastosowanie do całego procesu.

Musisz wykonać łatanie dla każdego procesu, nawet jeśli łączysz API z udostępnionymi systemowymi bibliotekami DLL; system operacyjny wywoła funkcję "kopiuj przy zapisie", podczas której podczas łatania biblioteki systemowej proces otrzymuje prywatną kopię, którą należy załatać.

DLL wstrzykiwanie staje się nieco nieprzyjemny, i znowu istnieje kilka technik: AppInit_DLLs, które działa tylko dla procesów, które ładują USER32.DLL (i ma kilka nowych ograniczeń w Vista i Windows 7), przy użyciu SetWindowsHookEx lub używając CreateRemoteThread . Integrity levels w systemach Vista i Windows 7 utrudnia wprowadzanie do procesów w całym systemie. Twoja aplikacja będzie musiała działać z uprawnieniami administratora i wysokim poziomem integralności, aby móc ją skutecznie usunąć.

Inną techniką jest przechwytywanie usług systemowych w trybie jądra. Wymaga to napisania sterownika urządzenia, ale jest to w zasadzie technika, z której korzysta Sysinternals Process Monitor (lub przynajmniej raz). Jest to problem w 64-bitowych systemach Vista i Win7 ze względu na PatchGuard i wymagania dotyczące podpisywania sterowników. Możesz monitorować niektóre działania systemu plików przy użyciu sterowników file system filter.

+0

Doskonała odpowiedź. – blez

2

Polecam MinHook. To zdecydowanie najlepsza bezpłatna biblioteka, jaką można znaleźć, i nie jest gorsza od Microsoft Detours.

+0

Użyłem minhook przy wielu okazjach z wielkim sukcesem. Zdecydowanie zalecane. – Qix

0

Czy próbował Deviare API Hook ...

Deviare jest na licencji komercyjnej i licencji open source, (GNU General Public License version 3).