Zaxz napisał(a):
Problem w tym,że ruchy postaci zgadzają się z ruchami myszki, bo ruch(nakierowanie) jest generowany przez Windowsowe API a dokładnie przez procedurę Mouse_Event(MOUSEEVENTF_MOVE, X, Y, 0, 0). Ruch myszą zmienia koordynaty w grze o przesunięcie X,Y. Więc jeżeli wywołasz tą procedurę to ruch kursora się poruszy o podany parametr X,Y(koordynaty się zmienią) i wszystko jest cacy jakbyś machał myszką. Jedynie można by wykrywać czy ta procedura jest wywoływana, ale to nie jest zabronione bo to jest API Windows. Więc chyba marne szanse.
Mouse_event oraz SendInput są komunikatami windowsowymi, do których doczepiony jest kontekst, m.in. HWND nadawcy. Jeśli wykryję w systemie latające komunikaty symulujące ruchy myszki pochodzące od nieznanej aplikacji, lub od dwóch dowolnych, ale różnych aplikacji, to mam pewność, że ktoś coś kombinuje. To jedna metoda, ale nie jedyna z uwagi na zunifokowaną architekturę przetwarzania wejścia przez DInput - jeśli event pojawia się z zewnątrz, wskakuje do chaina później. Wystarczy wsadzić hooka niżej i na końcu i porównywać czy coś nie wpada. W ogóle można założyć objazd na sendinput i moseevent, a następnie sprawdzać czy ktoś z tym hookiem nie kombinuje. Oczywiście, wszystko da się obejść, ale obejścia można również wykrywać i tak dalej, zgodnie z zasadami rywalizacji tarczy i włóczni

Nie twierdzę, że ta metoda pomoże na 1337arnego hackera, których tak wielu nie ma, ale pomoże na tych co sobie sklejają tutoriale, którzy produkują komercyjne cheaty (bo im więcej trzeba przechwycić, tym trudniej zrobić to komercyjne i dostatecznie polimorficzne zarazem). I tak dalej. Nie mówię, żeby od razu wygrać, tylko żeby poważnie utrudnić i ograniczyć dostęp dla znakomitej większości programistów. Zwiększyć poważnie ryzyko wykrycia.
Zaxz napisał(a):
ognacy napisał(a):
Druga oczywista metoda to sprawdzenie, czy gracz nie wgapia się przypadkiem w innego gracza mimo iż nie jest w jego polu widzenia (np. jest przysłonięty teksturą). Jeśli robi to częściej, niż przelotnie, to engine
Raczej ciężko to wykonać ze względu na:
1. Czasochłonność algorytmu
Bynajmniej! Engine BF2 wie, czy gracze się nawzajem widzą, czy nie - więc już to jest wyliczane. A algorytm przecięcia sfery z prostą wyznaczoną przez wektor to 3 funkcje trygonometczyne (obrót; 2 cosinusy 1 sinus), 1 dzielenie, 1 pierwiastkowanie. To jest kompletnie pomijalne wobec ilości tego samego rodzaju wyliczeń wykonywanych co klatkę przez serwer dla każdego projectile'a, gracza i tego co robi klient.
Cytuj:
2. Algorytm inteligentny i skomplikowany
Ok, czyli godzisz się na totalną bylejakość bo programiscie nie chce się ruszyć dupy i posiedzieć nad algorytmem 2 tygodnie?... Nie każdy rozumie algebrę wektorową, to fakt, ale nie każdy powinien być programistą zatrudnionym w evenbalance...
Cytuj:
3. Gapić można się gdzie chce i ile chce:)
Oczywiscie. Podobnie jak serwer może ile chce raportować, że gracz A statystycznie 1/25 czasu gry patrzy się na jakiegoś gracza poza zasięgiem widoku. A prawdopodobieństwo przypadkowego spojrzeia na niewidocznego gracza jest totalnie marginalna (ok, przez 1 klatkę to się zdarzy raz na pare minut, ale przez 200 klatek - zerowa).
Cytuj:
4. AIMBOT się włącza na żadanie(klawiszem), więc cheater sam wybiera cel, aktywuje AIMBOT'a i aplikacja robi małą korektę by nacelować.
Tak by było, gdyby użytkownicy aimbotów celowali wyłącznie w widoczne cele i używali ich jako wspomaganie celowania. Ale najwięcej cheaterów łapie się po tym, że gapią się ustawicznie w różne ściany żeby się zorientować, co się dzieje na mapie.
Cytuj:
5. Ograniczą obszar widoczności do faktycznego obszaru więc cheater będzie kasował przeciwników w polu widzenia.
Jeśli by tak było to już byłby to wielki sukces walki z cheaterstwem. Co więcej, połączenie tego z lepszą detekcją innych nadużyć dosłownie starłoby przewagę jaką dają cheaty nad wyskillowanymi, myślącymi graczami. Dodam jeszcze, że takie obcięcie listy wrogów jest bardziej ryzywkowne dla autora cheata, ponieważ wymaga ścisłej integracji z enginem, a im więcej interakcji, tym łatwiej wykryć...
Cytuj:
6. Wgapianie się przez tekstury ominą tym, że nie będą się wgapiać bezpośrednio ale pod pewnym kątem, jak przeciwnik wyjdzie zza ściany to go namierzy AIMBOT'em i trach.
Znowu - będzie to sukces, bo taki aimbote będzie mniej efektywny. W walce z dobrym klanowiczem zawodnik ma mniej niż sekundę, żeby wpakować heada. W przeciwnym wypadku taki wyskillowany koleś z przysłowiowej Wildy (powinni tego zabronić

) sam pakuje heada i podskakuje wesoło dalej. Aimbot który wymagałby korekty byłby bez porównania mniej efektywny wobec refleksu, jaki jest wymagany w fpp. Już nie mówię o tym, że tego rodzaju zabawę też można algorytmicznie wykryć, ale nie chce mi się robić z tego wątku forum programistycznego

Już i tak czuję, że zaśmiecam.
Cytuj:
ognacy napisał(a):
Są też inne metody, jak np sprawdzenie czy celownik gracza po napotkaniu na wroga zatrzymuje się natychmiast, jak to zrobi komputer, czy też drga i oscyluje, jak to ma miejsce w przypadku człowieka (który nie zatrzyma myszki w 1ms, bo jego własny czas reakcji to co najmniej 90ms). Do tego trzeba dodać jakąś dodatkową logikę, ale jest to kolejna wskazówka. Takich metod można wymyślić jeszcze kilka i wytępić całe klasy aimbotów prywatnych, publicznych, i nie wiem jak technicznie zabezpieczoncych, raz na zawsze. Czemu tego EvenBalance nie robi - nie wiem. Domyślam się, że im się nie chce.
Spróbuj napisać taki algorytm i będziesz miał odpowiedź

Czym bardziej wykombinowana metoda, tym więcej o pomyłkę...
Proste to nie jest, ale podałem to jako trzecią metodę, i wymagającą dodatkowych usprawnień. Można np. zastosować pętlę histerezy. Jeśli wektor celującego wpada w sferę powiezmy fi 85 cm opinającą cel, następnie zatrzymuje się w sferze o fi, powiedzmy, 30 cm wewnątrz tej pierwszej i nie opuszcza wewnętrznej sfery przez dłuższy czas przy założeniu określonego minimalnego dystansu między celami i minimalnej prędkości względnej - to mamy warning. Bo mało który człowiek jest w stanie utrzymać celownik w dokładnie tym samym miejscu wroga - a aimbot celuje w głowę, brzch, cokolwiek - ale generalnie w te samo miejsce, z dokładnością do wahań latency itp. Rocket science to to nie jest.
Cytuj:
By powstał taki program, musi być spełniony prosty warunek: "musi być konkretnie dedykowany do danej gry".
Każda gra ma inną strukturę w pamięci dla gracza, sposób wysyłania pakietów(BF2 używa zmienną strukturę pakietów co oznacza, że te same polecenia np ruch gracza za każdym razem jest innaczej umieszczany w pakiecie) itp. programiści musieli by się skupić nad konkretną grą, konkretnymi zagadnieniami.
To o czym rozmawiamy to na razie uniwersalna algebra wektorowa i zdrowy rozsądek. Wyciągnięcie koordynatów z engine'u to nie jest wielki problem dla narzędzia AC (EA endorsed lub i nie). Co się tyczy edycji pakietów i cheatów bazujących na tej ściśle elitarnej zabawie to oczywiście zaczynaja się schody, ale na razie nie z tym są problemy, tylko z aimbotami prymitywniejszymi.
pozdrawiam,
Ognacy
p.s. czy dostanę baretkę za najdłuższy posting?