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.
Może być pomocne, jeśli możesz określić, jakie API chciałeś podłączyć i dlaczego. – Michael
Objazdy to pakiet instrumentów. Czy to jest to, co chcesz zrobić, instrumentować biblioteki DLL Win32? –
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). –