C# System för Licenshantering

Permalänk
Medlem

C# System för Licenshantering

Hej,

Jag har utvecklat ett program som jag kommer sälja licenser till och är ute efter lite tips på hur man kan bygga ett bra system för licenser.
Anledningen till att jag vill ha licenser är för att förhindra att programmet används utanför min kontroll, vilket det snabbt kommer göra om jag inte förebygger det redan innan release.

Programmet kommer finnas tillgängligt att laddas ner, men kommer ha nedsatt funktion om inte en licens finns inlagd. Jag har tänkt att licenserna skall hålla i 24-48 timmar efter aktivering, sedan bli oanvändbara. Eftersom licenserna kommer säljas för 10.000:- styck, så vill jag vara säker på att ingen kan hitta någon work-around och använda programmet gratis.

Jag har redan några kunder till programmet, men jag kommer själv vara den som kör programmet åt kunderna i båda dessa fallen så jag kan klara mig utan licenser för nu, men har några potentiella kunder även i Norge och Danmark, där jag måste ha ett licenssystem färdigt så jag kan sälja till dom.

Jag har funderat på några alternativ.

Alternativ 1. Att tvinga användaren att alltid ha en internetuppkoppling, och programmet kollar licenskoden genom en server som jag kan sätta upp här hemma.
Har redan ett eget bra nätverksbibliotek som jag kan använda till detta. nackdelar med detta är ju att allting hänger på att min server alltid är uppe. Skulle något hända när jag inte är hemma och kan fixa det så sitter man lite i skiten.

Alternativ 2. Licensfiler. Köpbara licensfiler som användaren köper som håller i 48 timmar efter aktivering. Nackdelen med detta är väl att det inte blir lika säkert.

Eftersom jag inte har så mycket erfarenheter av licenshantering så vänder jag mig hit, och hoppas att någon har några bra konkreta förslag på hur jag ska göra.

Tack på förhand,

Robin.

Permalänk
Medlem

Det finns inget sätt att enligt dig "så vill jag vara säker på att ingen kan hitta någon work-around och använda programmet gratis" om du tillåter kod köras på andras datorer.
Det jag skulle göra om det är praktiskt och fungerande ä ratt hyra ut konton till remote desktops där programmet körs. För småprogram är detta inte kostnadseffektivt men om du kan sälja licenser för 10Kkr / 48 timmar kan det vara det.
Då är det du som har 100% kontroll över datorn och programmet körs.

Utöver det har jag tyvärr inga tips.

Permalänk
Medlem
Skrivet av iXam:

Det finns inget sätt att enligt dig "så vill jag vara säker på att ingen kan hitta någon work-around och använda programmet gratis" om du tillåter kod köras på andras datorer.

Jaså det är så illa?
Ja då kanske jag får kolla på någon annan lösning.
Jag får kanske köra LogMeIn och göra konverteringarna själv...

Tack iaf

Permalänk
Medlem
Skrivet av BlasteRs:

Hej,

Jag har utvecklat ett program som jag kommer sälja licenser till och är ute efter lite tips på hur man kan bygga ett bra system för licenser.
Anledningen till att jag vill ha licenser är för att förhindra att programmet används utanför min kontroll, vilket det snabbt kommer göra om jag inte förebygger det redan innan release.

Programmet kommer finnas tillgängligt att laddas ner, men kommer ha nedsatt funktion om inte en licens finns inlagd. Jag har tänkt att licenserna skall hålla i 24-48 timmar efter aktivering, sedan bli oanvändbara. Eftersom licenserna kommer säljas för 10.000:- styck, så vill jag vara säker på att ingen kan hitta någon work-around och använda programmet gratis.

Jag har redan några kunder till programmet, men jag kommer själv vara den som kör programmet åt kunderna i båda dessa fallen så jag kan klara mig utan licenser för nu, men har några potentiella kunder även i Norge och Danmark, där jag måste ha ett licenssystem färdigt så jag kan sälja till dom.

Jag har funderat på några alternativ.

Alternativ 1. Att tvinga användaren att alltid ha en internetuppkoppling, och programmet kollar licenskoden genom en server som jag kan sätta upp här hemma.
Har redan ett eget bra nätverksbibliotek som jag kan använda till detta. nackdelar med detta är ju att allting hänger på att min server alltid är uppe. Skulle något hända när jag inte är hemma och kan fixa det så sitter man lite i skiten.

Alternativ 2. Licensfiler. Köpbara licensfiler som användaren köper som håller i 48 timmar efter aktivering. Nackdelen med detta är väl att det inte blir lika säkert.

Eftersom jag inte har så mycket erfarenheter av licenshantering så vänder jag mig hit, och hoppas att någon har några bra konkreta förslag på hur jag ska göra.

Tack på förhand,

Robin.

Det finns många sätt att hantera detta på. Fick man veta lite mer så är det kanske lite lättare att ge en bra rekommendation (är lite nyfiken också). Licenser som bara gäller i 48h, för vilken verksamhet är sådan kort licenhantering tillämplig?
Hjursom...
Local licenserver med t.ex sql express i botten är ett vanligt alternativ. Lätt att styra på användarnivå eller anslutningar.
Internet aktivering, som du är inne på, går att lösa på en mängd sätt. Oavsett så är det inte seriöst med en burk hemma, det är colo som gäller med 24/7 NOC om detta skall anävndas i produktion. Svårt att hålla SLA annars.
Binärfil som kompletterar kod och registernyckel.
osv...

Edit: Ponera att iXam har rätt i att man aldrig skydd sig, inte ens om du gör konverteringen i efterhand. Vad är sannolikheten att just de företag du säljer din produkt till har personal som besitter sådan kunnande att kringgå dina skyddsmekanismer? Jag tror den är försvinnande liten och ditt minsta bekymmer.
Du kan ju alltid sälja till ett underhållsavtal som löper på 2-3 år, då har du garanterad inkomst. under tiden utvecklar du din produkt så när avtalet löper ut så har du en bättre, snyggare och vackrare produkt att sälja in i stället.

Visa signatur

There are two kinds of people: 1. Those that can extrapolate from incomplete data.
Min tråkiga hemsida om mitt bygge och lite annat smått o gott: www.2x3m4u.net

Permalänk
Medlem
Skrivet av BlasteRs:

Jaså det är så illa?
Ja då kanske jag får kolla på någon annan lösning.
Jag får kanske köra LogMeIn och göra konverteringarna själv...

Tack iaf

Ta exempel såsom Adobe. Dom lyckas inte med det du vill.

Du kanske kan erbjuda konverteringar som en service istället, kanske med ett API. Du kan då skapa ett program som bara är ett skal mot användaren och skickar den data som ska behandlas till en server och sen skickar tillbaka den konverterade datan till klienten.
Då kan du skydda dig men då skapar det krav på din servermiljö.

Permalänk
Medlem
Skrivet av Dr.Mabuse:

Det finns många sätt att hantera detta på. Fick man veta lite mer så är det kanske lite lättare att ge en bra rekommendation (är lite nyfiken också). Licenser som bara gäller i 48h, för vilken verksamhet är sådan kort licenhantering tillämplig?
Hjursom...
Local licenserver med t.ex sql express i botten är ett vanligt alternativ. Lätt att styra på användarnivå eller anslutningar.
Internet aktivering, som du är inne på, går att lösa på en mängd sätt. Oavsett så är det inte seriöst med en burk hemma, det är colo som gäller med 24/7 NOC om detta skall anävndas i produktion. Svårt att hålla SLA annars.
Binärfil som kompletterar kod och registernyckel.
osv...

I hear you!

Jag jobbar inom Dental-branschen med röntgenmaskiner och bildhantering. Mitt program migrerar en databas från konkurrerande programvara in i våran (för att överföra gamla bilder efter att kliniken köpt vårat system istället). Detta är något jag gjort på fritiden (jobbar främst med hårdvara till röntgen annars) och kommer säljas av mitt egna bolag vid sidan om. Det visade sig att det var inte någon som gjort något liknande program för våran programvara innan, så det blev fort populärt :). 10.000:- är därmed en väldigt liten kostnad för en tandvårdsklinik eller sjukhus, och något dom gärna betalar för att få över alla bilder och patienter i nya system.

Så att licenser kommer säljas till andra bolag som därefter gör migreringen med mitt program.

I Sverige gör jag själv konverteringen.

Permalänk
Medlem
Skrivet av iXam:

Ta exempel såsom Adobe. Dom lyckas inte med det du vill.

Du kanske kan erbjuda konverteringar som en service istället, kanske med ett API. Du kan då skapa ett program som bara är ett skal mot användaren och skickar den data som ska behandlas till en server och sen skickar tillbaka den konverterade datan till klienten.
Då kan du skydda dig men då skapar det krav på din servermiljö.

Detta kan också skapa problem på kliniker där databasen är 120Gb stor och dom sitter på ett ADSL 8 mbits ^^

Permalänk
Medlem
Skrivet av BlasteRs:

I hear you!

Jag jobbar inom Dental-branschen med röntgenmaskiner och bildhantering. Mitt program migrerar en databas från konkurrerande programvara in i våran (för att överföra gamla bilder efter att kliniken köpt vårat system istället). Detta är något jag gjort på fritiden (jobbar främst med hårdvara till röntgen annars) och kommer säljas av mitt egna bolag vid sidan om. Det visade sig att det var inte någon som gjort något liknande program för våran programvara innan, så det blev fort populärt :). 10.000:- är därmed en väldigt liten kostnad för en tandvårdsklinik eller sjukhus, och något dom gärna betalar för att få över alla bilder och patienter i nya system.

Så att licenser kommer säljas till andra bolag som därefter gör migreringen med mitt program.

I Sverige gör jag själv konverteringen.

Ok, ja det blir en hel del bilder och rätt mycket data. Tur att bilderna går att komprimera (har varit med om att de glömde slå på komprimeringen).

Då kanske du ska använda dig av aktivering över internet där programvaran ansluter sig till din server. Är det engångskonverteringar borde det inte bli så komplicerat. Programvaran skickar information om miljön som knytes till en licensfil/cert.

Visa signatur

There are two kinds of people: 1. Those that can extrapolate from incomplete data.
Min tråkiga hemsida om mitt bygge och lite annat smått o gott: www.2x3m4u.net

Permalänk
Medlem
Skrivet av BlasteRs:

Detta kan också skapa problem på kliniker där databasen är 120Gb stor och dom sitter på ett ADSL 8 mbits ^^

Då det rör sig om så pass stror data och relativt "höga" kostnader per per licens så ser jag inte att det skulle vara omöjligt att man faktiskt skeppar datan per post/bud eller liknande. Du tillhandahåller en hårddisk med en programvara som startar kopiering (eller liknande) som du skickar till kunden (samt kanske tom krypterar datan). Sen skickas denna disken med bud/post till dig och sen skickar du tillbaka den till kunden när allt är klart.
Jag har svårt att tro att du skulle få så mycket kunder att du inte själv eller åtminstone inte med hjälp av EN person till skulle kunna klara av detta även på fritiden.
Tom Amazon hade (har?) service där man kan skicka diskar till dom för "data ingestion" in i deras molninfrastruktur.

Dock kanske det kan bli problem med konfidentialiteten som kanske behövs pga av datans natur.

Permalänk
Hedersmedlem
Skrivet av BlasteRs:

10.000:- är därmed en väldigt liten kostnad för en tandvårdsklinik eller sjukhus, och något dom gärna betalar för att få över alla bilder och patienter i nya system.

Behöver du verkligen verkligen så avancerade system då? Seriösare verksamhet brukar väl vara ganska bra på att betala för sig även om piratkopior och liknande finns?

Permalänk
Medlem

Det du skulle kunna göra är en dubbel, alternativ trippel identifiering, där du använder en "hård" id-nyckel på varje licens samt en begränsade starträknare samt en tidsräknare/självdestruktion. Om programmet t.ex. har en begränsning att det får startas max 5 - 10 ggr och sedan raderar sig själv och/eller raderar sig själv om det är startar mer än 2 ggr då tiden har gått ut så är du i princip säker eftersom kunden annars måste köra programmet resten av livet, enligt den logiken.

Dom som finns kvar som kan gå förbi detta är dom kunder som kan redigera på binärnivå. På detta sätt ger du tillstånd till några att misslyckas och att starta programmet igen, men bara någon enstaka att köra programmet en gång för mycket.

Visa signatur

Server: Fractal design Define 7 XL | AMD Ryzen 7 5800X 8/16 | ASUS ROG CROSSHAIR VIII DARK HERO | 64GB Corsair @ 3000MHz | ASUS Radeon RX 460 2GB | Samsung 960 PRO 512 GB M.2 | 2x 2TB Samsung 850 PRO SSD | 6x Seagate Ironwolf Pro 10TB
WS: Phantex Entoo Elite | AMD Ryzen Threadripper 1950X 16/32 | ASUS Zenith extreme | 128GB G.Skill @ 2400MHz | ASUS Radeon HD7970 | 3x 2TB Samsung 960PRO M.2 | 6x Seagate Ironwolf Pro 10 TB
NEC PA301W 30" @ 2560x1600 | Linux Mint 21.3 Cinnamon

Permalänk
Avstängd

Tror nog du kan göra en ganska enkel licenskoll, tandläkarkliniker är inte kända för att piratkopiera

Visa signatur
Permalänk
Medlem
Skrivet av Elgot:

Behöver du verkligen verkligen så avancerade system då? Seriösare verksamhet brukar väl vara ganska bra på att betala för sig även om piratkopior och liknande finns?

Måste skriva under på denna kommentar också.
För dina användare så är integritet på datat av högsta prioritet. Tveksamt om någon på en klinik skulle vilja riskera en felaktig migrering pga. piratkopierad version där någon kringgått ditt eventuella skydd.

Mitt förslag är att lägga skyddet på en rimlig nivå. Några enkla alternativ:
0) Köp en färdig lösning för licenshantering, kostar inte många tusenlappar

1) Implementera en enkel licenshanterare som bara använder en enkel text-sträng där du kodar in giltighetstiden (start- och slut-datum) i nyckeln. Eftersom giltighetstiden är så pass kort så är risken inte så stor att en nyckel får stor spridning och hinner nyttjas av andra parter.

2) Programmet säljs med inte allt för hög volym. Du kan således leverera mjukvaran på usb-sticka där du skriver med en tidsbegränsad licensnyckel som är signerad av dig direkt och beror på HWID på usb-nyckeln. Tänk på att du måste ha något bra sätt att hantera tidräkning i ditt program och kanske inte ta systemklockan rakt av.

3) Programmet laddas ned via din server. Du kan ha ett script/program som baserat på någon mätbar storhet på den dator där programmet ska köras genererar motsvarande licensnyckel som ovan.

Sedan kan du ju se om du kan spara undan i databasen du migrerar till en referens till vilken nyckel som användes för konverteringen och då kan du sedan post-mortem se om någon piratat eller ej...

Visa signatur

weeeee

Permalänk
Avstängd

Enklaste lösningen är ju bara en databastabell med hashnycklar, varje rad har ett start och ett slutdatum. I appen får man mata in hashnyckeln och du hämtar giltighetstiden från servern via tex REST. Eftersom det är c# så kan man enkelt köra reflector på koden och enkelt bara bortkommentera denna kod. Men eftersom det är enbart företagskunder och en väldigt specifik nisch skulle jag säga att det är obefintlig risk

Visa signatur
Permalänk
Medlem

Tack för alla svar och Tips jag fick.

Som ni poängterade så handlar det ju faktiskt om tandvårdskliniker och sjukhus så risken att det piratkopieras är väldigt låg.
Men jag har nu gjort klart ett system som verkar fungera bra. Jag kör online-aktivering mot en server, som programmet hela tiden håller en konstant uppkoppling till.

Skulle kopplingen brytas, så återgår programmet till Trial, där max 25 patienter kan konverteras.

Servern håller reda på hur mycket tid det är kvar på licenserna, och licenserna kan aktiveras när man vill genom applikationen. Så man kan spara en tills man verkligen behöver den.

Man kan köpa licens genom programmet, som då tar dig till PayPal. Verkar fungera förvånansvärt bra, men det återstår väl att se när jag väl får iväg min första licens Nu får jag hålla tummarna att det går bra på säljmötet nästa vecka!

Tack igen för hjälpen,

Robin.

Permalänk
Avstängd

Du kan ju koda så att den går till en sida och kollar det på det sättet har du mer backup om den skulle gå ner.

Så läge du kör med SSL så kommer det funka bra.

Visa signatur

Server: två Intel Xeon E5-2690v2 och 128 GB ram

Min server dator: #15149189 http://i.imgur.com/BKxOmUP.jpg
zxhosting: https://www.facebook.com/pages/Zxhosting/1476037889350815