[PHP/Flash] lizenzierungssystem

ActionScripter

Scripter auf Abruf
ID: 141403
L
17 Oktober 2006
484
39
hallo zusammen,

ich mache mir seit einigen tagen gedanken über das lizensierungssystem, welches ich für meine slots verwenden will. ich habe mit einigen anderen programmierern gesprochen, um zu erfahren wie die das handhaben und habe zum teil haarsträubende methoden bzw. im allgemeinen nur fake-methoden erfahren. gibt es denn niemanden, der ein tatsächliches system benutzt bzw. bei dem eine lizenz halbwegs sicher ist?

was ich genau wissen möchte ist folgendes:

1. wie sicher soll/muss das system eurer meinung nach sein?
2. wie handhabt ihr das in der praxis?
3. was darf ich alles?

vielleicht meine gedanken dazu als erste antwort:

1. ich denke es sollte zumindest so sicher sein, dass nicht hinz und kunz den slot auf jeder seite einbauen kann. ausserdem möchte ich immer wissen, wer gerade eine lizenz besitzt und wo sie läuft. beim verkauf einer lizenz soll der neue inhaber auf meiner seite die daten ändern.

2. ich habe vor, meinen gateway (die kommunikation flash<->php ist über ein einzelnes swf gelöst) mit zwei schlüsseln zu verschlüsseln. der erste wird von mir erzeugt und dem lizenznehmer übergeben. der zweite wird schlicht und ergreifend aus der domain erstellt, auf der das script läuft. das flash läd den gateway über php nach und bekommt damit immer ein "neu entschlüsseltes" file geliefert.

3. prinzipiell darf ich natürlich alles, was der lizenznehmer unterschreibt (ganz grob gesagt). mich würde aber z.b. interessieren, ob mein gateway oder das php-script regelmässig an (m)einem server nach der gültigkeit der eingegebenen lizenz fragen darf. und wenn ja, was darf ich für massnahmen ergreifen, um identifizierten fakern zu schaden? dass der gateway nicht ausgeliefert wird ist klar, aber darf ich z.b. das flashfile dann automatisch löschen?

um ausufernde diskussionen zu vermeiden, möchte ich bitte nur mit den leuten sprechen, die tatsächlich ahnung davon haben und gescheite umsetzungen benutzen. sprüche ala "eigentlich prüf ich den code gar nicht" oder "ich schreib das nur auf ein blatt papier" helfen hier nicht wirklich weiter. ich möchte ein gutes, möglichst universelles system für mich (oder bei interesse auch für andere) entwickeln, bei dem sich zumindest die möchtegern-scriptkiddies ihre milchzähne ausbeissen ...
 
Zuletzt bearbeitet:
auch wenn ich davon keine ahnung habe:

wie wäre es, wenn beim initialisieren der flash-datei einfach ne anfrage an deinen server geschickt wird, inkl. der referer-url... dann kannst du überprüfen, ob die seite bei dir in der db gelistet ist und das ding verwenden darf oder nicht. dazu würde ich noch nen interface erstellen, wo sich die leute natürlich vorher anmelden müssen. so bekommen sie direkt von dir einen lizenzschlüssel. bei dieser anmeldung müssen sie auch angeben, von wem sie das script gekauft haben (händler-id), dann kann diese lizenz gleich dem entsprechenden händler vom kontingent abgezogen werden. natürlich müsste dann der händler dort auch ne oberfläche besitzen, wo er die lizenzen freigeben kann bzw. überprüfen kann, ob denn user a), der sich gerade ne lizenz von ihm freischalten lassen will, auch wirklich user a) ist, dem er die lizenz verkauft hat...

ist zwar alles nen bissl kompliziert und umständlich, der qualität wegen sollte es einem so etwas wert sein...
 
dann kann frei gezockt werden oder eben nicht...

das ding ist halt, dass man sowas nicht beeinflussen kann. wenn web.de down ist komm ich nicht mehr an meine emails ran, wenn klamm.de down ist kann ich keine lose auszahlen und wenn irgendwas.de down ist kann halt keine korrekte überprüfung der lizenz stattfinden...
 
ist zwar alles nen bissl kompliziert und umständlich, der qualität wegen sollte es einem so etwas wert sein...

also vorab, das hatte ich vergessen zu erwähnen: es gibt kein lizenzgemauschel mit resellerlizenzen oder solchen quark. wer kaufen will, der kauft eine einzelne lizenz und wer für mich weitere lizenzen verkauft, der bekommt provision. es gibt pro slot ein festes kontingent an lizenzen und wenn die aufgebraucht sind, dann wird nichts mehr verkauft. alle lizenzen kommen von mir - ganz simpel :)

wenn ich deinen beitrag richtig verstanden habe, dann willst du bei jedem einzelnen spielstart am lizenzserver anfragen lassen? wie flaschenkind schon sagt: wenn server down, dann problem. gut das könnte man scriptseitig abfangen, aber genau da liegt dann ein weiteres problem. das sandboxmodel von flash erlaubt nur zugriffe auf lokale oder fest definierte adressen. demnach ist der referrer eines fakers logischerweise nicht auf dem lizenzserver freigeschaltet, bekommt daher nie ein ok und hat somit freie bahn :(
 
Ich hab mit ein System aehnlich vprivates ueberlegt:

Jeder Slotkaeufer bekommt eine eindeutige Lizenz-ID, die dem Flash beim Start uebergeben wird, Flash fragt bei nem Lizenzserver an, ob die ID gueltig ist und wo das Backend-Script liegt. Ausfallsiche kriegt man das ganze durch RR-DNS oder mehrere Fallbacks, um das ganze zu knacken muss man schon das Flash decompilen und etwas rumbasteln... aber dagegen ist wohl nichts sicher.

Jeder Kaeufer kriegt zusaetzlich zu dem Lizenzkey auch die Logindaten zu einem Lizenzsystem, in dem er die Backend-URL einstellen kann und die Lizenz an andere Benutzer uebertragen kann.
 
lizenzsysteme in php und flash? hrhr... was sichers zu bauen ist unmöglich. (solang man keine extra module für php verwendet, zb nen bytecode compiler)

von daher würde ich ganz einfach an flash nen key übergeben, der aus der domain und wer weiß was besteht, den würde ich einfach in flash prüfen und fertig. wenn alles ok gehts los, wenn nicht pause... die key erzeugung sollte natürlich so gestalltet werden dass da kein schwein mehr durch sieht, am besten man selbst auch nicht mehr.
mal nen bsp für was ganz sinnloses... domain auslesen. 5 buchstaben von hinten der domain nehmen, davon den nummerischen wert nehmen und das mal die farbe aus _root.movie1.button.movie2.getPropertie('farbe') (bsp code hab schon ewigkeiten nix mehr mit flash am hut). usw... je blöder dass ganze wird desto weniger haben lust das zu durchschauen. damit hättest du schon mal nen mehr oder weniger gut schutzt damit die flash filme nur auf den von dir gewollten host laufen.

so um jetzt noch festzustellen welche lizenzen aktiv sind würde ich eventuell die key prüfung datums abhängig machen. so dass die lizenz nehmer jeden monat nen neuen key brauchen...

das würde ich jetzt als heilwegs sicher erachten... die meisten haben ja eh nur wenig bis keine ahnung von flash und flash kann man wirklich so richtig schön unübersichtlich gestallten *g*
 
...Flash fragt bei nem Lizenzserver an, ob die ID gueltig ist und wo das Backend-Script liegt...

stimmt, die idee, das comm.swf nur von meinem server an flash auszuliefern hatte ich auch schon. das scheint mir auch das einzig sinnvolle zu sein.

lizenzsysteme in php und flash? hrhr... was sichers zu bauen ist unmöglich. (solang man keine extra module für php verwendet, zb nen bytecode compiler)

drum sagte ich "möglichst sicher" ... dass man das nicht 100% hinbekommt ist mir klar.

...das würde ich jetzt als heilwegs sicher erachten... die meisten haben ja eh nur wenig bis keine ahnung von flash und flash kann man wirklich so richtig schön unübersichtlich gestallten *g*
naja die meisten hier haben auch keine ahnung von php *g*
das problem der lizensierung in flash ist aber dummerweise ganz leicht umgangen. swf-decompiler gibts wie sand am mehr und mit ner volltextsuche bekommt jeder recht schnell raus, wo das stop() für ne ungültige lizenz ist. auskommentiert, neu compiliert und fertig. da hilft die schönste idee nix. und das bekommt eigentlich jeder hin.

ich denke der "sicherste" weg ist, die kommunikation vom lizenzserver nachzuladen. hat man eben pech, wenn der server grad nicht erreichbar ist. wenn man hier noch ein bisschen mit dem datum und deiner property-idee herumspielt, dann nützt einem der gateway aus dem cache auch nichts mehr.

wäre sowas als fertiges paket interessant für euch?
 
@ ZeroCCC: Komisch, im ersten Satz steckt die wahre Aussage und später fängst du an dir selbst zu widersprechen. Code ist nun mal manipulierbar: Egal wie kompliziert deine flash-interne Prüfung ist - man streicht sie, und es passiert nix ;)
 
naja die meisten hier haben auch keine ahnung von php *g*
das problem der lizensierung in flash ist aber dummerweise ganz leicht umgangen. swf-decompiler gibts wie sand am mehr und mit ner volltextsuche bekommt jeder recht schnell raus, wo das stop() für ne ungültige lizenz ist. auskommentiert, neu compiliert und fertig. da hilft die schönste idee nix. und das bekommt eigentlich jeder hin.

wer sagt den das man mit stop arbeiten muss? wüsste genügend möglichkeiten wie ich nen script noch anders aus dem takt bringen kann... ;) wie gesagt die sicherheit erreichst du durch verschleierung, was anderes ist nicht drin. selbst dein flash nachladen, bringt im endeffekt auch nicht mehr punkte. das lad ich mir einfachmal runter, decomplieres und bau die sperren raus... dann bieg ich das php script um was die flash datein nachläd und fertig.

@ ZeroCCC: Komisch, im ersten Satz steckt die wahre Aussage und später fängst du an dir selbst zu widersprechen. Code ist nun mal manipulierbar: Egal wie kompliziert deine flash-interne Prüfung ist - man streicht sie, und es passiert nix
wo hab ich mir wiedersprochen... was sicheres zu bauen ist unmöglich. die einzige sicherheit erreicht man durch obfuscation, aber das ist nicht wirklich sicher (hab ich mir schon wieder wiedersprochen? :ugly:). und zum thema streichen... sämtliche lösungs ansätze sind dafür anfällig wenn der quellcode änderbar ist.
 
Da es sich aber um Slots handelt ist die Frage nach wie vor:

Fliegts nich vorher auf? Ich mein, um sonen Slot bei gewissen Sicherheitsmaßnahmen zu cracken braucht man schon etwas kriminelle Energie. Kann man es sich ueberhaupt leisten, auf einer groesseren Seite sowas einzusetzen? Eher nicht. Was bringt es kleinen Seiten, wenn sie den z.B. die SWF vom Dinoslot haben? Nix, wenn ich nen Programmierer habe der mir das Backend dazu schreiben kann, kann er mir auch nen neuen Slot bauen. (Preis ~ gleich) Wenn der Webmaster von $grosserseite jedoch $kleinerseite unter die Arme greifen will und denen das Backend gibt, ist man erstmal angemeiert. Was bleibt noch? User die es merken.

Die Idee find ich uebrigens garnicht so schlecht, man koennte ja einen "Ist dieser Slot lizenziert?" Button einbauen, der auf ein Script zeigt, das den Referer o.ae. auswertet.... unendliche Moeglichkeiten.

Btw, ein schoener Link: https://www.gotoandplay.it/_articles/2004/04/swfProtection.php
 
Zuletzt bearbeitet:
...das lad ich mir einfachmal runter, decomplieres und bau die sperren raus... dann bieg ich das php script um was die flash datein nachläd und fertig.
ja und den eigentlichen slot musst du auch noch umbauen ... sind schon 3 sachen. wie gesagt: 100% sicherheit gibts nicht, aber um diese 3 sachen zu machen muss man dann schon ein paar mehr kenntnisse haben.

Was bleibt noch? User die es merken.
ja auf die muss man sich in dem fall ohnehin verlassen. man könnte ja belohnungen ausschreiben :)

Btw, ein schoener Link...
ja, aber der hilft auch nichts. wie man an der entwicklung der decompiler sieht, lesen die auch solche websites und die dinger werden immer besser. die methoden, die heute funktionieren, sind morgen schon wieder geschichte. wirklich schwer kann man es den leuten nur machen, wenn man konfusen code schreibt und ihn unsinnig verteilt, so wie zeroccc sagte.
 
Nur in der Zeit hast du schon den naechsten Slot/sonstwas fertig und die Gewinneinbussen durch "Raubkopien" drin ;)

ach quatsch... durch raubkopieren gehen ihn mindestens 500% am umsatz verloren ;) ach neh das war ne andere branche... musikindustrie oder so :ugly: keine ahnung wie das bei klamm aussieht... aber normalerweise hält es sich mit raupkopien eher zurück. große seiten kaufen lizenzen (jedenfalls meistens) und irgend so ne kleine würstschen seite wo 1 besucher am tag drauf schaut interessiert mich eher weniger... aber vielleicht muss ich irgendwann mal meinen anwalt durchfüttern da sind solche kleine seiten nicht schlecht. da brauch ich nur 10 seiten und schon hat der anwalt innerhalb von 2stunden sein geld drine *g*
 
das sandboxmodel von flash erlaubt nur zugriffe auf lokale oder fest definierte adressen. demnach ist der referrer eines fakers logischerweise nicht auf dem lizenzserver freigeschaltet, bekommt daher nie ein ok und hat somit freie bahn :(

öhm, das sandbox-modell von flash erlaubt sehr wohl zugriff auf fremde server, ließ mal in deiner deko nach, man muss eine datei auf dem server hinterlegen. Wenn du nun auf eine andere als die lokale adresse zugreifst prüft flash das vorhandensein dieses files und erlaubt/verbietet den zugriff.

also ich würde von solch einem hintertürchen SEHR STARK ABRATEN, denn das kommt einfach nicht gut, und ich denke du wirst dir einige potenzielle Kunden vergraulen. Und rechtlich liegt das meine ich in so ner Grauzone.

Ich würde eher folgendes machen: ins Flash-File wird Klamm-ID, Seitenadresse (und realer Name) des Webbis schön sichtbar eingetragen. Dann hast du ein Seite, wo man diese Informationen gegenprüfen kann. Denn, solch eine Hintertür entferne ich mir einfach aus dem Code. Solch ein System wie oben genannt ermöglicht aber den ehrlichen Zockern die Lizenzen zu prüfen und ggf. dir zu melden, da die Betreiber mit ihren Spielen ja auch etwas verdienen wollen, müssen sie diese öffentlich zeigen. Hat jemand eine Raubkopie musst du eben mit voller Härte durchgreifen.

Edit: auch außerhalb von Klamm, hmm, dann Streich in den Infos die KlammId und bau gleich noch nen netten Link zu deiner Lizenzseite ein.
 
öhm, das sandbox-modell von flash erlaubt sehr wohl zugriff auf fremde server, ließ mal in deiner deko nach, man muss eine datei auf dem server hinterlegen. Wenn du nun auf eine andere als die lokale adresse zugreifst prüft flash das vorhandensein dieses files und erlaubt/verbietet den zugriff.
och mensch, es macht manchmal wirklich keinen spass mit dir :)
ja, man kann eine crossdomain.xml auf den server legen und in ihr definieren, von wo aus auf den server zugegriffen werden kann, ist mir bekannt ... aber für wie blöd hältst du denn die menschheit in dieser datei zugriff für alle freizugeben? bei dir muss man echt immer jeden einzelnen vorauszusetzenden schritt einzeln aufzählen *grml*

Solch ein System wie oben genannt ermöglicht aber den ehrlichen Zockern die Lizenzen zu prüfen und ggf. dir zu melden, da die Betreiber mit ihren Spielen ja auch etwas verdienen wollen, müssen sie diese öffentlich zeigen. Hat jemand eine Raubkopie musst du eben mit voller Härte durchgreifen.
woran erkennt ein user eine raubkopie? wenn ich mir so ein file klauen würde, dann trage ich natürlich meinen eigenen namen ein, anstatt nur zu löschen...
 
och mensch, es macht manchmal wirklich keinen spass mit dir :)
ja, man kann eine crossdomain.xml auf den server legen und in ihr definieren, von wo aus auf den server zugegriffen werden kann, ist mir bekannt ... aber für wie blöd hältst du denn die menschheit in dieser datei zugriff für alle freizugeben? bei dir muss man echt immer jeden einzelnen vorauszusetzenden schritt einzeln aufzählen *grml*
gab es in der datei nicht noch möglichkeitne genaue rechte zu definieren?
jup, ich bin kleinlich, nein, ich freue mich nur mal wenn ich es auch mal schaffe dich zu verbessern :LOL:


woran erkennt ein user eine raubkopie? wenn ich mir so ein file klauen würde, dann trage ich natürlich meinen eigenen namen ein, anstatt nur zu löschen...
wie gesagt:
pack in die gewinntabelle diese persönlichen informationen rein, und zugleich noch einen button als link zu deiner lizenz-db. glaube man darf in der db dann nicht die namen von allen kunden angeben (datenschutz) deshalb werden die user wohl einen schlüssel eingeben müssen und dieser sagt dann, den lizenzeigentümer dazu. mit datenschutz kenne ich mich aber wirklich kaum aus.