Próbowałem, ale nigdy nie wracał.
A jakieś inne pomysły/porady?
Nie wracał dlatego że autoryzacja się nie powiodła.
Nie można się autoryzować nie inicjując komunikacji, wszystko o czym wspomina @szopenfx wynika właśnie z komunikacji.
Zabezpieczenie podane przez @-123oho podejrzewam, że łatwo byłoby ominąć (z tak zdawkowego opisu) - podmieniając komunikację z serwerem i uciszając klienta trefnymi logami.
Ale które moje zabezpieczenie? Chodzi o mój schemat anticheata mojego? Tam wszystko opierało się na trudności RE biblioteki anticheata (dużo antidebugów, własny packer etc.), logowaniu w dwa miejsca (serwer zdalny, dysk lokalny - szyfrowane) i kluczu który był emitowany przez serwer w trakcie gry. Dodatkowo z gry można było każdego klienta odpytać o różne parametry połączenia, więc raczej trudno byłoby zdławić podejrzenia podając fałszywe dane (anticheat logował dużo informacji o komputerze i środowisku). Łatwiej już było zmodyfikować bibliotekę anticheata, ale tutaj znów się kłaniają utrudnienia RE.
P.S. Teraz jestem -321oho.
Z tym, że nie rób specjalnej aplikacji klienckiej do klienckiego PROXY tylko hook'uj funkcje WinSock'a, wyelminuje to pokonanie cię swoją własną bronią poprzez podpięcie się w sposób jaki opisałem w 1 poście.
Bo akurat to dużo trudniej się podpiąć pod winsock już w twojej bibliotece anticheata... Można też złamać bibliotekę gry i hookować wywołania winsocka z kodu gry.
Dzięki szyfrowaniu komunikacji do serwera wymusisz stosowanie własnej aplikacji bo tylko Ty tak naprawdę będziesz wiedział jak komunikować się z serwerem PROXY.
I osoby które odtworzą algorytm komunikacyjny. Zupełnie podobnie do mojego rozwiązania:
-321oho napisał(a)
Jeżeli chcesz autoryzować, to najlepiej od razu po ustanowieniu połączenia które będzie potem stanowiło łącze gry wysłać z serwera losowy numer na który klient odpowie numerem który będzie przyporządkowany temu od serwera jakimś algorytmem. Potem możesz całą transmisję szyfrować.
Tylko problem leży w tym że pytacz nie rozumie po polsku i nie jest w stanie do niego dotrzeć, że komunikacja jest potrzebna, żeby być w stanie autoryzować klienta. Inaczej nie wiesz czy klient do ciebie wysyła śmieci czy coś zaszyfrowane i możesz tylko to usiłować odszyfrować.
W grze KalOnline komunikacja była szyfrowana AES'em po 128 bitowych blokach z hasłem zmienianym co przychodzący pakiet. Pierwszy WelcomePacket zawierał 1 klucz. Możesz to osiągnąć przez komponenty ClientSocket i ServerSocket. Niestety komponenty te pozostawiają wiele do życzenia jeśli chodzi o wydajność i proponowałbym użycie czystego WinSock'a. Co do autoryzacji innej niż symetryczna to jest to dość trudne zagadnienie. Może podczas rejestracji mógłbyś wysyłać klientowi zestaw kluczy, z których mógłbyś później skorzystać, ale wprowadza to wiele zamieszania. A i tak kiedyś musisz ich użyć więc to tylko kwestia czasu aż zostaną przechwycone.
Czyli dochodzi do typowej konkluzji: nie ma zabezpieczenia idealnego.