Søknad protection

Hvordan beskytte anvendelsene.Den perfekte programmet beskyttelse systemby Vegard A. LarsenI har tenkt på dette i lang tid, og skaper en perfekt beskyttelse system for mine (og dine) applikasjoner ville virke som en umulig oppgave. Tross alt, kan sprekker for søknaden din være tilgjengelig på internett dagen etter at du slipper det. Men, tenker på hvordan Microsoft (og lignende) store selskaper, tillate brukere å registrere ved å skrive inn et seriekode, fikk jeg ideen om hvordan du oppretter en nesten perfekt beskyttelse system. Hva jeg er i ferd med å skissere her er det grunnleggende det som synes å være en uknuselig sikring. Merk at denne artikkelen ikke vil inkludere noen kildekode, så dette er bare et forslag til hvordan du gjør det, og eventuelle forslag til forbedringer vil bli sterkt appreciated.Retrieving serie numberThe første tanken som slo meg, var å ha system web-aktivert , noe som betyr at det vil koble til noen form for godkjenningsserveren. I begynnelsen vil vi trenger brukeren å hente hans /hennes serienummer. Dette kan gjøres på flere måter, men for å få til dette tankeeksperiment, vil jeg angi en brukbar metode. De bruker registrerer seg via et eksternt program som sender navn og organisasjonsnummer til serveren din, du bekrefte at han /hun har gjort betalingen, og sender ham /henne en e-post med dette serie. Da vil brukeren må taste inn denne informasjonen inn i hovedprogrammet, hvor den "virkelige" registreringsprosessen tar place.Checking serie numberLet oss ta følgende scenario: en bruker kommer hans /hennes navn, organisasjon, og at seriekoden han /hun mottatt når han /hun er registrert. Systemet kobles til en autentiseringsserver, som holder all brukerinformasjon (navn, organisasjon og seriekode) for alle brukerne. Vår brukerens informasjon er sendt inn (med kryptering brukt) til serveren, hvor et svar er returnert til applikasjonen. Dette svaret vil også trenge noen form for kryptering, forebygge potensielle kjeks fra avskjærende signalet sendes til serveren (ved bruk av f.eks falske IP-adresser) og bare leverer en "220 OK" svaret på søknaden. Også den kryptering brukes måtte variere fra datamaskin til datamaskin. Hvis vi skulle bruke samme krypterings på hver datamaskin, kan den potensielle cracker bare få tak i navn, organisasjon og seriekoden til en annen registrert bruker, og en ville ha sprukket søknaden. Så, hvordan kan vi generere en nøkkel som varierer fra datamaskin til datamaskin, men er reproduserbar på det samme, enkelt datamaskin? Dette utgjør en noe stort problem. Intel hadde innarbeidet en CPU-ID-kode for en tid siden, men dette kan ikke være pålitelig. Anta at brukeren bestemmer seg for å endre sin CPU? (Det er også flekker som kan fjerne denne CPU-ID-kode.) Da er denne ID-verdien ville endre. Teknisk sett er det ingenting inne i et datasystem som vil forbli den samme, avhengig av hvem som bruker systemet. Hvis en bruker bestemmer seg for å installere Windows på nytt, alt datasaved til Windows-mappen fjernet, slik at lagring av data der (for eksempel et tilfeldig generert krypteringsnøkkel) ville ikke være den beste idea.The svaret kan være så enkelt som å gå med "Registrert bruker "verdi lagret av Windows, inne i registeret. Tenk på det, hvis brukeren bestemmer seg for å installere Windows på nytt, han /hun vil mest sannsynlig fortsatt inn i hans /hennes navn som registrert bruker! Igjen, utgjør dette et problem: mange datamaskiner som kommer krympe-innpakket, med Windows og en hel haug med programmer som er installert ut av boksen, vil oftest ha denne verdien satt til noe sånt som "bruker". Så når vår bruker installerer hans /hennes versjon av Windows, denne verdien vil mest sannsynlig endring. Dette er når vi blir nødt til å håndheve "ekstra" i lisensavtalen, sier at hvis brukeren bestemmer seg for å installere Windows på nytt, han /hun blir nødt til å varsle selskapet om dette 48 timer i forveien, eller han /hun vil miste hans /hennes license.Then vi kan gjøre følgende: angi server til innen denne fristen på 48 timer for å tillate reregistering av den bestemte brukeren, hvis han ikke har gjort dette innen fristen, tilbakestille "registrert bruker" til hva det var før han /hun varslet deg. For å begrense dette (at noen holder reinstallere Windows 3 ganger i uken), vil vi ha en teller hvor mange ganger brukeren har registrert i år, og en grense på 12 ganger i året blir noe normal.We deretter få følgende resultat: søknaden sender dataene er kryptert med en nøkkel som genereres fra hva den finnes i "registrert bruker" -tasten, helst ved å legge til en konsistens sjekk til dataene på slutten. Serveren mottar disse dataene, sjekker konsistens, og dekrypterer den med nøkkelen genereres fra "registrert bruker" verdi (som allerede var til stede på serveren) .Deretter serveren kan sende det svaret, bruker samme krypteringsnøkkel, tilbake til programmet, og fortelle programmet hvis seriekoden var gyldig eller ikke. Avhengig av dette, programmet låser /låser opp itself.Saving data til gjeldende systemwhile unngå deteksjon Så langt, så bra, men det er fortsatt flere andre aspekter å vurdere. Hvordan lagre på at programmet har blitt registrert på den lokale datamaskinen. Hvis du gjør dette "normal" måte, ved å lagre verdier i registeret, kan du være sikker på at crackere vil ha løst hvordan å komme seg rundt den i dag. Så, kanskje en enkel løsning være å lagre dataene i programmet exe-fil, du er mest sannsynlig tenker nå ... Feil, dette vil være den andre plassen potensielle crackere lete. Så hadde jeg en idé. Hva om vi skulle legge våre data etter EOF av en DLL-fil i Windows-katalogen? Dette er mulig, og på denne måten, vil ikke filen med øke i størrelse som du registrerer din søknad. Nå har denne DLL-filen for å være en fil som er svært sjelden brukt, men er til stede på alle versjoner av Windows (begge NT /2000 og 9x /Me), uavhengig av hvilke komponenter de valgte å installere med Windows. Finne en slik fil kan være vanskelig, men hva stopper deg fra å sjekke for ulike filer på forskjellige systemer? Du kan ha det legges til en fil på NT /2000-systemer, og til en annen fil på 9x /ME-systemer. Du kan også dele data på ulike filer i Windows-mappen, tilføye bare én byte til hver fil (slik at du kan lagre flere byte med data (f.eks isRegistered, RegisterRetries). Merk: Du må sjekke at ingen andre program har tilføyd data etter EOF, fordi flere programmer kan bruke denne metoden for lagring values.Additional securityTo sikre at ingen kan endre de viktigste kjørbare, eller hex redigere det å finne en metode for å fjerne serienummeret beskyttelse, vil vi helst trenger flere lag sikkerhet, de viktigste er kryptering og selv endre koden. nå skal vi bruke disse på samme tid kan være vanskelig, spesielt når du trenger å gjøre både ved kjøring. Opprette egen endre koden er enkel, men å gjøre det arbeidet med kryptering søknader vil være vanskelig, om ikke umulig. også, hvis det er mulig, vil komprimering være nyttig, hvis bare for å gjøre en cracker arbeid vondt i hans /hennes bak. jeg kommer ikke til å kommentere mye mer på dette, da det er en emne jeg har begrenset kunnskap on.The serverUntil nå, har jeg bare nevnt serveren, ikke å forklare hva det gjør i detalj. Det grunnleggende er klare, vil det være en database, som inneholder minst følgende opplysninger (kan selvfølgelig bli utvidet til å inneholde andre elementer som postnummer, stat, betalingsmåte, osv.): Kallenavn
< b> Organisasjon
Registrert bruker product: (må ikke forveksles med brukernavn) serie~~POS=TRUNC nummer~~POS=HEADCOMP plakater (kan også genereres her) antall registreringer de siste 12 monthsThe serveren vil ha minst to andre egenskaper, den første er kryptering. Den andre er at det bare skal godta tilkoblinger fra visse forhåndsdefinerte ways. Dette betyr at klientprogrammet kobler seg til ett system, som den mener er serveren, mens dette i virkeligheten bare er en inngangsport til serveren. Denne måten, kjeks ville ikke ha noen måte å vite hva systemet faktisk er serveren. Jo flere gatewayer det går gjennom, jo ​​bedre beskyttelse for serveren, men tregere tilkobling. Kontroller at gateways er sikre, betyr at de har så få porter åpne som mulig, og at de ikke skrive ut IP-adressen de omdirigere meldingene til (socracker vilje ikke hacke gateway og finne veien til serveren) sikret serveren vil selvsagt også nødt til å være så sikker som mulig, som med alle andre server.Additional notesNow, og skaper en komponent som dette, vil introdusere et annet problem: Hvis crackere klarer å bryte en applikasjon som bruker dette systemet, vil de ha sprakk alle. Derfor ville en slik komponent må være Open Source (eller i det minste leveres med kilde), slik at alle kan endre sin krypteringsalgoritme til sine egne behov. Dessuten kan de endre hvilke filer lokal informasjon er vedlagt to.Does dette høres ut som en perfekt beskyttelse system for deg? Hvis du kan se noen glitches, sikkerhetshull eller potensielle problemer jeg vil være glad for å vite. Nå er målet med dette var inspirerende noen til å skrive en komponent som gjør noe som dette modellen skisserer. Så, når noen skriver denne komponenten, sørg for å la meg vite om det ... Ta kontakt med meg hvis du har noen kommentarer overhodet knyttet til denne artikkelen, kan du maile meg her. Jeg har allerede vist denne artikkelen til noen karer på IRC-kanalen #delphi, EFNet, og de virket ganske ivrig om det. Håper dette hjelper someone.Updates til artikkelen Book mottatt denne mailen for noen dager siden fra Timothy Plocinski, og jeg kan se at han hasgot noen utrolig gode poeng. Han er rett, dette er noe veldig oftenoverlooked, vi tilbringe dager bare finjustering små deler av hovedprogrammet GUI, men overlater dette som hardt arbeid for brukeren.
"Vegard,
jeg likte artikkelen på ordninger veldig mye. det er et problem Imull over (som du har) på et teoretisk nivå hele tiden. iSee en enorme feil i systemet imidlertid, og itseems for meg at dette er et problem som ofte blir oversett. Theimplementation krever for mye av brukeren, og på topof det, behandler dem som om de allerede er skyldig
å se denne linjen.

dette er når vi blir nødt til å håndheve "ekstra" inn i Lisensavtale, som sier at hvis brukeren bestemmer seg for å reinstallWindows, han /hun blir nødt til å melde inn et selskap aboutthis 48 timer i forveien, eller han /hun vil miste hans /herlicense.
jeg må anta at de fleste brukere ville bare goto et annet produkt atthis punkt. og å ha systemer som låser og låser opp themselvesaccording til noen protokoll som gjør at systemet "ustabil" for alle virksomhetskritiske typen applicationyou kan være å utforme. På et teoretisk nivå reallyenjoyed jeg artikkelen, på et praktisk nivå jeg tror itlimits brukeren for mye. Tross alt, de fleste av programvare brukere arenot kriminelle, så behandler de fleste på den måten, bare vondt i longrun.
Hilsen Timothy Plocinski "
Og jeg anbefaler alle til å lese kommentarene , de er alle verdt en grundig lese.