Antycheat używany w ramach projektu zleconego w 2018 roku. Wiele zachowań i funkcji jest okolicznościowych. Celem projektu było podłączenie antycheata po stronie klienta do starego prywatnego serwera gry, który już miał pewne moduły zabezpieczeń firm trzecich, co skutkowało antycheatem z zauważalnymi wyjątkami od dziwnego zachowania.
Podstawy
Sprawdzanie integralności pamięci Zbiera kolekcję stron pamięci początkowo w obrębie modułu gry (anticheat::cheat_monitor::init) i generuje skrót CRC32 na podstawie zawartości pamięci każdej strony (calc_vpt_hashes) - każdy zweryfikowany w każdym cyklu (anticheat::cheat_monitor::check_pages).
Blokowanie wątków
Przechwytuje funkcje RtlUserThreadStart i sprawdza, czy wyznaczony adres wykonania wątku mieści się w prawidłowych granicach pamięci. W tym przypadku jest to tzw. "tylko dla obrazu" (image-only execution), gdzie tylko wątki w głównym obrazie (oraz niektóre inne wyłączone obrazy, takie jak ucrtbased.dll) mogą być uruchamiane. Jeśli wątek działa poza tymi granicami, zostaje uznany za szkodliwy w nieprawidłowej przestrzeni wykonawczej. To również uniemożliwia dołączenie debuggerów do procesu, ponieważ funkcja RtlUserThreadStart jest wykonywana przed wywołaniem DbgUiRemoteBreakIn, które wykonuje się poza bezpiecznymi granicami.
Pułapki pamięciowe
Pułapki pamięciowe są tworzone w ramach rutyny inicjalizacyjnej, gdzie strony pamięci jeszcze nie są dostępne, ale gdy są (co nie powinno mieć miejsca), zostaje to wykryte. Zapobiega skanerom "oszustw".
Anty-Debugowanie
Sprawdza PEB bezpośrednio (zamiast korzystać z IsDebuggerPresent, które łatwo można sprawdzić) pod kątem wartości flagi BeingDebugged oraz wartości NtGlobalFlag. Jednak podatne na bezpośrednią modyfikację flagi BeingDebugged w celu obejścia tego sprawdzenia. DbgUiRemoteBreakIn jest blokowane, ponieważ wątki debugujące nie mogą być wykonane w procesie (DebugActiveProcess wykonuje wątek wewnątrz procesu, ale nasz proces ma sprawdzanie granic pamięci, uproszczone, gdy mowa o skanowaniu wątków.)
Chronione funkcje
Podobne koncepcyjnie do sprawdzania integralności pamięci, ale specjalnie wykrywa, czy rutyny Winsock oznaczone jako "chronione" są przechwytywane/modyfikowane, uniemożliwiając modyfikację pakietów w trybie użytkownika i odczyt przez oprogramowanie takie jak WPE Pro i rPE.
Skaner procesów
Skanuje każdy proces na podstawie zawartości (nazwa procesu, nazwa okna) i unikalnej sygnatury pamięci. Wiele z tych podstawowych informacji na temat zostało opisane tutaj:
AntiCheat - RudiAC 💯
______________________________________________________
Antycheat używany w ramach projektu zleconego w 2018 roku. Wiele zachowań i funkcji jest okolicznościowych. Celem projektu było podłączenie antycheata po stronie klienta do starego prywatnego serwera gry, który już miał pewne moduły zabezpieczeń firm trzecich, co skutkowało antycheatem z zauważalnymi wyjątkami od dziwnego zachowania.
Podstawy
Sprawdzanie integralności pamięci Zbiera kolekcję stron pamięci początkowo w obrębie modułu gry (anticheat::cheat_monitor::init) i generuje skrót CRC32 na podstawie zawartości pamięci każdej strony (calc_vpt_hashes) - każdy zweryfikowany w każdym cyklu (anticheat::cheat_monitor::check_pages).
Blokowanie wątków
Przechwytuje funkcje RtlUserThreadStart i sprawdza, czy wyznaczony adres wykonania wątku mieści się w prawidłowych granicach pamięci. W tym przypadku jest to tzw. "tylko dla obrazu" (image-only execution), gdzie tylko wątki w głównym obrazie (oraz niektóre inne wyłączone obrazy, takie jak ucrtbased.dll) mogą być uruchamiane. Jeśli wątek działa poza tymi granicami, zostaje uznany za szkodliwy w nieprawidłowej przestrzeni wykonawczej. To również uniemożliwia dołączenie debuggerów do procesu, ponieważ funkcja RtlUserThreadStart jest wykonywana przed wywołaniem DbgUiRemoteBreakIn, które wykonuje się poza bezpiecznymi granicami.
Pułapki pamięciowe
Pułapki pamięciowe są tworzone w ramach rutyny inicjalizacyjnej, gdzie strony pamięci jeszcze nie są dostępne, ale gdy są (co nie powinno mieć miejsca), zostaje to wykryte. Zapobiega skanerom "oszustw".
Anty-Debugowanie
Sprawdza PEB bezpośrednio (zamiast korzystać z IsDebuggerPresent, które łatwo można sprawdzić) pod kątem wartości flagi BeingDebugged oraz wartości NtGlobalFlag. Jednak podatne na bezpośrednią modyfikację flagi BeingDebugged w celu obejścia tego sprawdzenia. DbgUiRemoteBreakIn jest blokowane, ponieważ wątki debugujące nie mogą być wykonane w procesie (DebugActiveProcess wykonuje wątek wewnątrz procesu, ale nasz proces ma sprawdzanie granic pamięci, uproszczone, gdy mowa o skanowaniu wątków.)
Do zrobienia: Wykrywanie arbitralnego obsługiwania wyjątków wektorowych (TBA: Arbitrary Vectored Exception Handling Detection).
Chronione funkcje
Podobne koncepcyjnie do sprawdzania integralności pamięci, ale specjalnie wykrywa, czy rutyny Winsock oznaczone jako "chronione" są przechwytywane/modyfikowane, uniemożliwiając modyfikację pakietów w trybie użytkownika i odczyt przez oprogramowanie takie jak WPE Pro i rPE.
Skaner procesów
Skanuje każdy proces na podstawie zawartości (nazwa procesu, nazwa okna) i unikalnej sygnatury pamięci. Wiele z tych podstawowych informacji na temat zostało opisane tutaj:
Skaner modułów
Skanuje załadowane moduły w procesie pod kątem tych o zablokowanych nazwach.
_________________________________________________
W ZAŁĄCZNIKU ZAŁĄCZAM CAŁY PLIK !