Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [Opgelost]Client/server model: Officiële client onderscheiden  (gelezen 1490 keer)

Hallo,

Ik ben bezig met een typisch client/server model te bouwen. Nu heb ik geen problemen mee dat m'n protocol gereversed engineered wordt, en daarop een unofficial client gebouwd wordt, maar, ik zou graag een manier weten waardoor ik kan weten of request van de officiële client komen, of van een custom made.

(Het is geen echte programmeervraag, maar het leunt er wel bij aan dacht ik...)

Iemand een idee hierover?

Dank!
« Laatst bewerkt op: 2011/09/06, 13:01:32 door Carharttguy »

Re: Client/server model: Officiële client onderscheiden
« Reactie #1 Gepost op: 2011/09/06, 11:33:51 »
Hier heb ik al wat informatie over gezocht, dus ik kan je wel wat vertellen.

Kort antwoord: Nee.

Langer antwoord: Ja, maar. In theorie is het onmogelijk om jouw officiële client en een perfect nagemaakte van elkaar te onderscheiden. In praktijk kan je het gewoon moeilijk maken om een client perfect na te maken:
  • Schrijf je client bij voorkeur in C of C++, dat is moeilijker te decompileren.
  • Gebruik een challenge-responsesysteem. De server stuurt een willekeurig getal, de client moet daar dan een algoritme op uitvoeren en het gegenereerde getal terugsturen naar de server. Als dat getal niet klopt, mag de client niet verbinden. De truc is een zo complex mogelijk algoritme te vinden en er voor te zorgen dat anderen het niet direct door decompilatie (zie boven) weten af te leiden.
  • Gebruik een deel van de checksum van de binary van je client in één van die algorithmes. Dit zorgt ervoor dat je officiële client aanpassen moeilijker wordt.
  • Versleutel de verbinding met SSL. Dan wordt het moeilijker om je verbinding af te luisteren. Verander liefst nog regelmatig je sleutel.
  • Verander regelmatig (of als je denkt dat er met je client geknoeid wordt) je protocol met kleine beetjes. BV. laat de officïele client iedere 10 seconden een bepaald pakket sturen. Clients die dat niet sturen, zijn dan gewijzigde versies. Tegen dat ze dit doorhebben, verander het naar 15 seconden, etc... Maak regelmatig kleine aanpassingen, zodat het moeilijk wordt om gehackte clients up-to-date te houden met je nieuwe maatregelen.

Zoals je ziet, zijn alle methodes te omzeilen op één of andere manier... Het gaat er alleen om hoeveel tijd jij wil spenderen vs hoeveel tijd iemand anders wil spenderen.

De énige manier om echt zeker te zijn is met trusted hardware (TPM) en DRM...

Als je onofficiële clients toelaat tot op zekere hoogte, en je vertrouwt diegenen die ze schrijven, kan je gewoon vragen dat ze een soort versiestring meesturen om te laten zien dat ze een aangepaste client zijn. Zo doen ze het ook o.a. met webbrowsers. Maar dat hangt uiteraard af van de goodwill van diegene die de custom client schrijft.

- SeySayux
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Re: Client/server model: Officiële client onderscheiden
« Reactie #2 Gepost op: 2011/09/06, 13:01:16 »
Aha ok, zo'n antwoord vreesde ik al een klein beetje.

Maar je hebt me wel goede tips gegeven, vooral die van de checksum vind ik een heel goed idee.
Dank voor de goede tips, je hebt me zeker weer wat inzichten gegeven over hoe ik het nog zou kunnen doen.

Solved naar mijn idee :)

Re: [Opgelost]Client/server model: Officiële client onderscheiden
« Reactie #3 Gepost op: 2011/09/06, 17:03:44 »
Die checksum-methode is eigenlijk vrij gemakkelijk te breken... Alles wat je nodig hebt is een kopie van de originele client. En bovendien gaat dat nog variëren van OS tot OS, dus daar moet je rekening mee houden...
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Re: [Opgelost]Client/server model: Officiële client onderscheiden
« Reactie #4 Gepost op: 2011/09/06, 22:51:46 »
Ja dat is wel waar, maar alle andere methodes preventen mensen van hun eigen client te kunnen schrijven. En op zich heb ik daar niets tegen (hun client kan beter zijn dan de onze..)

Dus het is een beetje een tweestrijd, ofwel begin ik aan een strijd tegen het reversen, en weet ik toch, dat als iemand echt wilt, met genoeg geduld perfect zijn eigen client kan schrijven. Ofwel doe ik niets, en doen ze alsof ze de originele client zijn.

Niet gemakkelijk..

Re: [Opgelost]Client/server model: Officiële client onderscheiden
« Reactie #5 Gepost op: 2011/09/07, 00:23:32 »
Ik zou er niet aan beginnen als ik jou was. Het levert bar weinig op meestal, behalve veelal toch een negatieve gebruikservaring (hoewel nep clients dat ook kunnen geven) en kost veel moeite. Als men custom clients wil komen die er toch wel leert de praktijd.

Het enige wat ik zo kan bedenken wat enigszins betrouwbaar is zijn gebruik maken dongels of iets dergelijks (hardware dus) maar dat maakt distributie via internet weer zo lastig.

Wat op zich nog wel zou kunnen is dat je van de actie/reactie patronen van de client probeert af te leiden of het een echte of nep client is. (bijv als iemand een 100% zuivere aim heeft zal het wel een bot zijn en geen menselijke speler), dat kan op zich best aardig werken, maar is zeker niet waterdicht en wel behoorlijk arbeidsintensief.
URD - http://www.urdland.com - Usenet Resource Downloader

Re: [Opgelost]Client/server model: Officiële client onderscheiden
« Reactie #6 Gepost op: 2011/09/09, 17:15:21 »
Bedankt voor jullie input zoiezo!

Maar het probleem is, ik heb an sich niets tegen mijn protocol vrijgeven, maar als ze m'n protocol kennen, kunnen ze de server beginnen namaken, en zo onze client gebruiken om er zelf geld uit te slaan. (uit onze efforts), en dat zie ik iets minder zitten.

Het is geen first person shooter, dus in principe zou een soort botten zoiezo niet mogelijk zijn, mits er genoeg controles zijn, serverside dan.