Ajettavan ohjelmakoodin voi muuttaa jonkinlaiseksi lähdekoodiksi josta voi tutkia ohjelman toimintaa ja muuttaakin sitä. Kaiken ohjelmakoodin voi muuttaa ainakin assembler-listaukseksi, vaikkakin sellainen on hankalaa ja työlästä tohtoroida. Esimerkiksi Java-ohjelman voi muuttaa ihan Java-kieliseksi lähdekoodiksi jota on helppo lukea. Eräät softat kuten PHP:llä tehdyt ovat vain lähdekoodia jota pystyy suoraan lukemaan ja muokkaamaan. Tätä voidaan pitää etuna, mutta se voi olla myös ongelma.
Jos PHP-kielinen ohjelma toimitetaan asiakkaan koneeseen niin tämä pääsee samalla suoraan käsiksi sen lähdekoodiin. Jos ohjelmassa on piirteitä joilla pyritään varmistamaan sen tekijän oikeudet ja estämään softan myyminen edelleen, ovat tällaiset piirteet ohjelman lähdekoodista normaalisti helposti kytkettävissä pois päältä.
Esimerkiksi jos ohjelmassa tarkistetaan lisenssitiedosto tyyliin ...
JOS ( lisenssin_tarkistus )
NIIN jatka_ihan_normaalisti
MUUTEN päästä_helvetti_irralleen
... niin se on helposti muutettu kommentoimalla tarkistus ja suorituksen keskeytys pois ...
// JOS ( lisenssin_tarkistus ) NIIN
jatka_ihan_normaalisti
// MUUTEN päästä_helvetti_irralleen
... jolloin lisenssiä ei edes tarkisteta, eli ohjelma toimii ihan normaalisti ilman lisenssitiedostoa.
Herää kysymys onko olemassa ohjelmointimenetelmä joka tekisi ohjelman luvattoman muokkauksen vaikeaksi vaikka asiakkaalla onkin sen lähdekoodi. Tällainen ei saisi kohtuuttomasti vaikeuttaa ohjelman luvallista ylläpitoa. Voiko ohjelmassa olla jokin kriittisen tärkeä osa jota ilman se on hyödytön ja jonka oikein toimimiseksi tarvitaan "avain" joka liitetään tuohon osaan kuin lukon avain työnnetään oven lukkoon? Voiko ohjelman eri osat rakentaa ylläpitoa estämättä niin vaikeasti tulkittaviksi että niitä ei osaa toisiinsa yhdistää ellei tunne jotakin salaisuutta? Voivatko ohjelman osat olla kuin putkilla kytkettyjä johonkin funktioon johon vasta lisenssitiedostosta saatava kryptattu avaintieto tarjoaa oikean putkituksen toiminnosta toiseen? Jossakin hyvin erikoisessa überteknisessä ohjelman osassa (yksittäinen salainen spesiaalialgoritmi) näin voisi ehkä ollakin, mutta tällainen menetelmä täytyisi soveltua ihan tavalliseen toimistosoftaankin ollakseen yleisesti hyödyllinen.
Onko tiedossa viitteitä tällaisesta tai tämäntapaisesta ohjelmointiparadigmasta joka mahdollistaisi ohjelman järkevän ylläpidon, mutta tekisi sen luvattomasta muokkaamisesta hyvin vaativaa?
Tässä toki on perusoletuksena että softan muokkaus on tekijän ja asiakkaan välisellä juridisesti sitovalla sopimuksella kielletty, sillä eihän se muuten voi näin mennä.
Jos PHP-kielinen ohjelma toimitetaan asiakkaan koneeseen niin tämä pääsee samalla suoraan käsiksi sen lähdekoodiin. Jos ohjelmassa on piirteitä joilla pyritään varmistamaan sen tekijän oikeudet ja estämään softan myyminen edelleen, ovat tällaiset piirteet ohjelman lähdekoodista normaalisti helposti kytkettävissä pois päältä.
Esimerkiksi jos ohjelmassa tarkistetaan lisenssitiedosto tyyliin ...
JOS ( lisenssin_tarkistus )
NIIN jatka_ihan_normaalisti
MUUTEN päästä_helvetti_irralleen
... niin se on helposti muutettu kommentoimalla tarkistus ja suorituksen keskeytys pois ...
// JOS ( lisenssin_tarkistus ) NIIN
jatka_ihan_normaalisti
// MUUTEN päästä_helvetti_irralleen
... jolloin lisenssiä ei edes tarkisteta, eli ohjelma toimii ihan normaalisti ilman lisenssitiedostoa.
Herää kysymys onko olemassa ohjelmointimenetelmä joka tekisi ohjelman luvattoman muokkauksen vaikeaksi vaikka asiakkaalla onkin sen lähdekoodi. Tällainen ei saisi kohtuuttomasti vaikeuttaa ohjelman luvallista ylläpitoa. Voiko ohjelmassa olla jokin kriittisen tärkeä osa jota ilman se on hyödytön ja jonka oikein toimimiseksi tarvitaan "avain" joka liitetään tuohon osaan kuin lukon avain työnnetään oven lukkoon? Voiko ohjelman eri osat rakentaa ylläpitoa estämättä niin vaikeasti tulkittaviksi että niitä ei osaa toisiinsa yhdistää ellei tunne jotakin salaisuutta? Voivatko ohjelman osat olla kuin putkilla kytkettyjä johonkin funktioon johon vasta lisenssitiedostosta saatava kryptattu avaintieto tarjoaa oikean putkituksen toiminnosta toiseen? Jossakin hyvin erikoisessa überteknisessä ohjelman osassa (yksittäinen salainen spesiaalialgoritmi) näin voisi ehkä ollakin, mutta tällainen menetelmä täytyisi soveltua ihan tavalliseen toimistosoftaankin ollakseen yleisesti hyödyllinen.
Onko tiedossa viitteitä tällaisesta tai tämäntapaisesta ohjelmointiparadigmasta joka mahdollistaisi ohjelman järkevän ylläpidon, mutta tekisi sen luvattomasta muokkaamisesta hyvin vaativaa?
Tässä toki on perusoletuksena että softan muokkaus on tekijän ja asiakkaan välisellä juridisesti sitovalla sopimuksella kielletty, sillä eihän se muuten voi näin mennä.
Vastaukset 7
Vanhimmat
Ohjelman käyttäjällä taas on syytä pyrkiä aivan toiseen suuntaan. Käyttäjän tulisikin saada ohjelmakoodi omaan käyttöönsä. Tällöin olisi ehkä hyvinkin kalliin ja elintärkeän ohjelman toiminta turvattu myös poikkeusoloissa. Esimerkiksi ohjelman tekijän konkurssissa.
Voithan toki ajaa skiptin jonkun obfuscaattorin läpi, jolloin koodista tulee mössöä josta on vaikeata ottaa selvää.
http://www.google.fi/search?q=php obfuscator
Tai sitten jotain ohjelmaa joka kryptaa php koodin:
http://www.google.fi/search?q=php encryption software
Kannattaa kuitenkin miettiä onko se sen arvoista. Potentiaaliset asiakkaat voi valita muun tuotteen, jos ne eivät voi tehdä pienintäkään muutosta itse.
Ylläpidettävyys tietysti myös kärsii, koska "suoajttuun" koodiin ei voi välttämättä tehdä enää muutoksia.
Kaikki suojaustekniikat, jotka EIVÄT vaikeuta suojattavan asian normaalia käyttöä ovat käytännössä kierrettävissä tavalla tai toisella. Liikaa vaivaa saatuu hyötyyn nähden. Monet ohjelmat olivat 90-luvulla suojattu donglella, mutta lopulta ne ovat osoittautuneet turhan hankaliksi käyttää. Vaivaa käyttäjälle ja toimittajalle.
Nykyään ohjelmoinnista jotain ymmärtävä yhteisö on tarkkana erilaisista asioita, eikä kopioidulla koodilla kovin pitkälle pötki. Tästä mm. Microsoftille langetettu Officen myyntikielto USAssa, koska se oli käyttänyt jonkun Kanadalaisen yrityksen XML:n käsittelyyn tarvittavaa koodia.
Usein jos tehdään asiakastoimituksia, niin lähes aina tehdään sopimus, jossa asiakas saa käyttöoikeuden tehtyyn tuotokseen, mutta tekijällä säilyy myös käyttöoikeus tuotokseen.
Yleensäkin ohjelmiston ylläpito on tarpeeksi hankalaa ilman mitään kommervenkkejä. Obfuskointia käytetään mm. Javan kanssa kun toimitetaan vain binääri ilman lähdekoodia. Keskimäärin koodareiden tuottama koodi on riittävän kryptistä ilman obfuskointiakin ;-)
Obfuskoitukin koodi luonnollisesti on tulkittavissa. Eihän sitä pystyisi muuten ajamaankaan. Minkä yksi osaa "kryptata", osaa toinen "murtaa". Vaikka olisi miten kryptattu, mutta kun ajoympäristö saa siitä jotakin tolkkua niin eihän se oikeasti voi olla käsittämätöntä.
Minusta ainoa todellinen turva on siinä että asiakasta kielletään jakelemasta ja muuttamasta softaa tekijän ja asiakkaan välisellä juridisesti sitovalla sopimuksella. Käyttämistä tietenkään ei kielletä.
Kun softa tarkistaa asiakaskohtaisen digitaalisesti allekirjoitetun lisenssin ja muutokset on kielletty juridisesti sitovalla sopimuksella niin tekijän oikeudet ovat niin turvassa kuin ne voivat olla. Lisenssin tarkistus on teknisesti helppo estää, mutta se merkitsee tehdyn sopimuksen rikkomista.
"Keskimäärin koodareiden tuottama koodi on riittävän kryptistä ilman obfuskointiakin ;-)"
Ehkä yksi ohjelmoijan (ainakin omalta osaltani kuulun joukkoon) eniten vihaama painajainen, toisen tuottaman, kenties vanhemmankin ohjelman pätkän, päivitys tai bugifixaus, oikea painajainen silloin kun koodi täynnä lippuja ja ehtoja, ja kommentointi tyyliin: Is it true ;)
Nykyään liian vähän tahtoo nähdä hyvän näköistä ohjelmaa, kun väkisin halutaan sinne koodiin lätkiä sitä "muka hienoa" sontaa, tai ihan laiskuuden pohjalta jätetään perusasioita tarkistelematta..
Meni yli tämän ketjun aiheen, mutta pakko purkaa joskus traumoja pois =)
"... ohjelmointimenetelmä joka tekisi ohjelman luvattoman muokkauksen vaikeaksi vaikka asiakkaalla onkin sen lähdekoodi. ... Tällainen ei saisi kohtuuttomasti vaikeuttaa ohjelman luvallista ylläpitoa. ..."
Ei ole, sillä kaikki menetelmät mitkä sotkevat koodia, yms. hankaloittvat myös luvallista muokkausta sekä ylläpitio, niin asiakkaan kuin tekjiäosapuolen päässä.
että sitä ei kukaan muu kuin lisenssinhaltija käytä. Abduktio on erittäin yksinkertainen toimenpide eikä laillisen lisenssin haltija huomaa mitään.