25. oktober 2005 - 10:01Der er
5 kommentarer og 2 løsninger
Beskyttelse af kilde / registreringkode
Jeg har en .NET applikation som skal leveres ud til en række brugere. Jeg forestiller mig at lave en algoritme som ud fra deres hardware laver en nøgle som de sender til mig. Ud fra denne nøgle genererer jeg en tilhørende aktiveringskode som gør at brugeren kan køre programmet.
Jeg vil kunne undgå at nøgle algoritmen skal ligge i klient applikationen ved at lade en nøgleserver aktivere klienterne når de startes, via en webservice.
Et andet problem er beskyttelse af kilden. .NET applikationerne er jo yderst trivielle at dekompilere, og det vil således ikke være svært at simpelthen fjerne denne sikkerhedsbeskyttelse, og så ellers lade resten af program logikken være i behold.
Jeg har leget med diverse obfuscators, som da også gør det sværere at tyde koden, men det kræver stadig ikke lang tid før man kan genkende aktiveringslogikken og eventuelt fjerne denne.
Samtidig har jeg også forsøgt med et par forskellige såkaldte "Protectors" som skulle gå et skridt videre end bare obfuskering af koden. Og korrekt nok, jeg kan ikke dekompilere min applikation længere efter den er blevet beskyttet, men den fungerer heller ikke længere. Jeg benytter mig at globale hooks i applikationen, og disse fejler konsekvent, uanset hvilken protector jeg benytter.
Jeg søger erfaringer med lignende problemstillinger, forslag, osv.
Hvis du giver kompileret kode til andre er der altid en risiko for at de kan reverse-engineer og/eller fjerne eventuelle kopibeskyttelser. Så det sikreste er ikke at give koden til folk. Alternativt, at benytte en licens der truer med den store stok hvis der piratkopieres etc.
At benytte en restriktiv licens nytter ikke noget. Det er privatforbrugere, så det vil ingen effekt have. Det er heller ikke muligt ikke at give dem applikationen med selve kode logikken i. Programmet er relativt ressourcekrævende og kræver meget høj hastighed, så det vil ikke kunne lade sig gøre at køre det over remoting eller lignende teknologier.
Jeg er klar over at der naturligvis ikke er nogen 100% sikker metode, jeg søger blot at gøre det så besværligt som muligt for slutbrugerne at modificere / læse koden.
@subtile Jeg er klar over at hardware specifikt software kan være irriterende for brugerne, men i dette tilfælde har jeg ikke noget valg. Yderligere vil selve aktiveringsprocessen være fuldautomatiseret over internettet.
(Hvis det er resourcekrævende er det oplagt at lave det som klient-server del).
en eller anden obfuscator er din bedste udvej. Men husk på at msil er ganske rigt og derfor i sig selv let at forstå. (Gammeldags assembler er ganske mere uigennemsigtigt). Så selvom koden ikke kan laves om til C# kræver det ikke megen indsats at decifrere ilkoden.
Endeligt, er det du jagter "security by obscurity" og vil derfor altid være en kamp mod det bedste de-obfuskeringsværktøj. Med andre ord, selvom der ikke findes en dekompiler idag der kan dekompilere din dll fornuftigt gør der det imorgen.
Det er på ingen måde muligt at lave det klient/server baseret. Her er tale om en applikation hvor responstid er alfa omega, og den er meget API kalds tung, så det er på ingen måde muligt at flytte logikken væk fra klienten, desværre :(
Men du har ret i at min umiddelbare mulighed er en obfuscator af en art.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.