Podłączanie DirectX EndScene do wstrzykniętej biblioteki DLL

Chcę odjechaćEndScene z dowolnej aplikacji DirectX 9, aby utworzyć małą nakładkę. Jako przykład możesz wziąć nakładkę FRAPS na licznik klatek, która jest wyświetlana w grach po aktywacji.

Znam następujące metody:

Tworzenie nowegod3d9.dll, który jest następnie kopiowany do ścieżki gier. Ponieważ bieżący folder jest najpierw przeszukiwany, przed przejściem do systemu32 itp., Ładowana jest moja zmodyfikowana biblioteka DLL, wykonująca mój dodatkowy kod.

Minus: Musisz go tam umieścić przed rozpoczęciem gry.

Podobnie jak w pierwszej metodzie, ale zastąpienie biblioteki DLL w systemie32 bezpośrednio.

Minus: Nie możesz dodać specyficznego kodu gry. Nie można wykluczyć aplikacji, w których nie chcesz ładować swojej biblioteki DLL.

Uzyskanie przesunięcia EndScene bezpośrednio z biblioteki DLL przy użyciu narzędzi takich jak IDA Pro 4.9 Free. Ponieważ biblioteka DLL jest ładowana tak, jak jest, możesz po prostu dodać to przesunięcie do adresu początkowego biblioteki DLL, gdy zostanie zmapowany do gry, aby uzyskać rzeczywiste przesunięcie, a następnie zaczepić go.

Minus: Przesunięcie nie jest takie samo w każdym systemie.

HookingDirect3DCreate9 zdobyć D3D9, a następnie podłączyćD3D9-> Utwórz urządzenie aby uzyskać wskaźnik urządzenia, a następnie zaczepićUrządzenie-> EndScene przez wirtualny stół.

Minus: DLL nie może zostać wstrzyknięty, gdy proces jest już uruchomiony. Musisz rozpocząć proces odCREATE_SUSPENDED flaga do zaczepienia inicjałuDirect3DCreate9.

Tworzenie nowego urządzenia w nowym oknie, gdy tylko biblioteka DLL zostanie wstrzyknięta. Potem otrzymujęEndScene odsunąć od tego urządzenia i zaczepić go, co spowoduje zaczepienie urządzenia używanego przez grę.

Minus: co do niektórych informacji, które przeczytałem, utworzenie drugiego urządzenia może zakłócać istniejące urządzenie i może powodować błędy w trybie okienkowym lub pełnoekranowym itp.

Tak samo jak trzecia metoda. Aby jednak to zrobić, wykonasz skanowanie wzoruEndScene.

Minus: nie wygląda na wiarygodnego.

Jak mogę zaczepićEndScene z wstrzykniętej biblioteki DLL, która może zostać załadowana, gdy gra jest już uruchomiona, bez konieczności radzenia sobie z innymid3d9.dlljest w innych systemach i za pomocą niezawodnej metody? Jak na przykład FRAPS wykonuje haczyki DirectX? Biblioteka DLL nie powinna mieć zastosowania do wszystkich gier, tylko do określonych procesów, w których wprowadzam je za pośrednictwemCreateRemoteThread.

questionAnswers(3)

yourAnswerToTheQuestion