Olen tekemässä koodia yhdelle tyypille ja minun pitäisi lopuksi lähettää se hänelle jotta hän lisää sen omalle serverilleen. Haluan kuitenkin jatkaan hänen kanssaan työskentelyä ja jos lähettäisin hänelle lähdekoodin hän voisi vaihtaa minut halvenpaan versioon. Olen kuullut joskus koodin salaamisesta mutta en tiedä asiasta itse mitään. Suurin osa koodistani on kirjoitettu javascriptillä ja phpllä. Onko siis mahdollista salata jotenkin näitä koodeja että nettisivulla ne näkyisi normaalisti mutta kukaan ei pystyisi lukemaan lähdekoodia. Toinen vaihtoehto on tietysti että hoidan itse serverit mutta se tietää töitä ja joudun maksamaan ne silloin itse joten salaus olisi parempi vaihtoegto.
Et sinä mitään itse maksa vaan työstä laskutetaan asiakasta. Voit aina yrittää obfuskoida julkaisuversion koodista, mutta se vaikeuttaa myös omaa työtäsi, kun debuggaamisesta tulee mahdotonta. Koodisi tuntien debuggausta tulee riittämään. Lopulta tyyppi kaivaa netistä de-obfuskoijan ja kaikki sekin vaiva meni pöntöstä alas.
Kun kerran olette lyöneet hynttyyt yhteen, niin varmaan löytyy myös jokin kirjallinen sopimus?
Suullinen sopimus on toki yhtä pätevä, mutta vain jos sen pystyy todistamaan.
Miten liittyy koodin salaamiseen, niin sopimus poistaa salauksen tarpeellisuuden - mahdollisesti.
lähtökohtaisesti asiakas omistaa sille tehdyn työn tuloksen. joten en lähtisi salaamaan ellei asiakas sellaista tilaa. Toinen vaihtoehto on myydä softaasi lisenssillä, eli asiakas ei maksa koodista, vaan käyttöoikeudesta.
Eli siis ei ole olemassa keinoa salata yksinkertaista nettisivua joka on pääasiassa tehty phpllä. En tarvitse debugata ja ajattelin että tekisin sen siten että teen koodeista salatun version serverille ja sitten pitäisin koneellani salaamatonta versiota jota voin muokata, salata ja sitten lähettää uuden version serverille.
Lisäys: Siis ideana on juuri että olen sopinut asiakkaan kanssa pelkästään käyttöoikeuksien myynnistä mutta en halua että asiakas menee esim myymään koodiani eteenpäin.
Käytössä olevaa koodia ei voi salata, koska silloinhan edes tietokone ei voisi lukea sitä, ja ohjelmaa ei voisi käyttää. Koodia voi kyllä yrittää sotkea (esim. vaihtaa muuttujien nimet epäselviksi).
Viisainta olisi (ollut) sopia valmiiksi koodin hinnasta ja käyttöehdoista ja omistusoikeudesta.
Olennaista on sopia esimerkiksi siitä, mitä myyt: Jos myyt asiakkaalle vain työtä (tai olet palkallisena työntekijänä), yleensä työn tulos on silloin asiakkaan omaa. Jos myyt asiakkaalle valmiin tuotteen käytettäväksi, voit sopia myös, ettei asiakkaalla ole oikeutta muokata tuotetta itse vaan ainoastaan sinun kauttasi, tai voit hinnoitella tuotteen niin, että huomioit hinnassa asiakkaan mahdollisuuden muokata sitä itse.
Sopimuksissa kannattaa huomioida myös oma vastuu virheistä, eli oletko esimerkiksi velvollinen maksamaan korvauksia, jos koodi ei toimi sovitulla tavalla ja asiakkaalle tulee siitä jotain haittaa.
E1ss kirjoitti:
Lisäys: Siis ideana on juuri että olen sopinut asiakkaan kanssa pelkästään käyttöoikeuksien myynnistä mutta en halua että asiakas menee esim myymään koodiani eteenpäin.
Jos olet sopinut vain käyttöoikeuksien myynnistä, olet varmaan määritellyt sopimuksessa, mitä koodilla saa ja ei saa tehdä. Silloin on turha pelätä koodin jälleenmyyntiä, vaan voit yksinkertaisesti haastaa asiakkaan oikeuteen, jos hän rikkoo sopimusta.
Mieti asiaa jossain muussa yhteydessä kuin koodin yhteydessä: ”Olen sopinut asiakkaan kanssa, että vuokraan auton hänelle, mutta en halua, että asiakas menee myymään auton eteenpäin.” Pelottaisiko? Kaipaisitko jotain taikalukitusta autoon?
Okei eli en rupea salaamaan sitä. Pitää keskustella palkkaajan kanssa tarkemmin asiasta. Minulla on kuitenkin tullut tälläinen koodi vastaanja siitä sain idean että koodia voi salata:
!function(a,b){function c(b,d){if("\x2e"!=b[0]&&"\x2f"!=b[0])return a(b);d=d||"\x72\x6f\x6f\x74";var e=c.resolve(b);if(!e&&/\.json$/i.test(b))return a("\x2e\x2f"+c.basename(b));var f=c.cache[e];if(!f)try{return a(b)}catch(g){throw new Error("\x66\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x72\x65\x71\x75\x69\x72\x65\x20\x22"+b+"\x22\x20\x66\x72\x6f\x6d\x20"+d+"\n"+g.message+"\n"+g.stack)}return f.exports||(f.exports={},f.call(f.exports,f,f.exports,c.relative(e))),f.exports}c.cache={},c.basename=a("\x70\x61\x74\x68").basename,c.resolve=function(b){if("\x2e"!=b[0])return a.resolve(b);for(var d="\x2f"===b.slice(-1)?b:b+"\x2f",e=[b,b+"\x2e\x6a\x73",d+"\x69\x6e\x64\x65\x78\x2e\x6a\x73",b+"\x2e\x6a\x73\x6f\x6e",d+"\x69\x6e\x64\x65\x78\x2e\x6a\x73\x6f\x6e"],f=0,g;g=e[f];f++)if(c.cache[g])return g},c.register=function(a,b){c.cache[a]=b},c.relative=function(a){function b(b){if("\x2e"!=b[0])return c(b);var d=a.split("\x2f"),e=b.split("\x2f");d.pop();for(var f=0,g=e.length;g>f;f+=1){var h=e[f];"\x2e\x2e"==h?d.pop():"\x2e"!=h&&d.push(h)}return c(d.join("\x2f"),a)}return b.resolve=c.resolve,b.cache=c.cache,b},c.register("\x2e\x2e\x2f\x6f\x73\x62\x6f\x74\x31\x2e\x6a\x73",function(a,b,c){var d="\x37\x36\x35\x36\x31\x31\x39\x38\x31\x37\x34\x34\x31\x39\x39\x35\x38";if(0==custommysql){var e=mysql.createConnection({host:sql_host,user:sql_user,password:sql_password,database:sql_database});e.connect()}var f=new SteamUser,g=new TradeOfferManager({steam:f,domain:"\x6c\x6f\x63\x61\x6c\x68\x6f\x73\x74",language:"\x65\x6e"}),h=-1;f.logOn(details);var i=SteamTotp.getDeviceID(botsteamid);if(1==p2)var j="\x70\x32";else var j="";function k(){h=-1,l()}function l(){if(console.log("\x5b\x53\x45\x52\x56\x45\x52\x5d\x20\x45\x6e\x64\x69\x6e\x67\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x67\x61\x6d\x65\x20\x26\x20\x63\x68\x6f\x6f\x73\x69\x6e\x67\x20\x77\x69\x6e\x6e\x65\x72\x2e"),1==p2){var a="\x68\x74\x74\x70\x3a\x2f\x2f"+sitepath+"\x2f\x65\x6e\x64\x72\x6f\x75\x6e\x64\x2e\x70\x68\x70\x3f\x73\x65\x63\x72\x65\x74\x3d"+rsecret+"\x26\x70\x32\x3d\x74\x72\x75\x65";request(a,function(a,b,c){a&&console.log("\x43\x6f\x75\x6c\x64\x6e\x27\x74\x20\x65\x6e\x64\x20\x72\x6f\x75\x6e\x64\x2c\x20\x65\x72\x72\x6f\x72\x3a\x20"+a)})}else{var a="\x68\x74\x74\x70\x3a\x2f\x2f"+sitepath+"\x2f\x65\x6e\x64\x72\x6f\x75\x6e\x64\x2e\x70\x68\x70\x3f\x73\x65\x63\x72\x65\x74\x3d"+rsecret;request(a,function(a,b,c)
Koodin on todellisuudessa paljon pidempi mutta en tänne laita kaikkea koska se varmasti näyttäisi rumalta kun koko sivu olisi täynä tuollaista. Siis kysymyksenä on että mitä tuolle koodille on tehty? Latasin koodit netistä ja ajattelin että muokkaan ne omiin käyttötarkoituksiini mutta kun rupesin lukemaan tiedostoja läpi siellä tuli kohta jossa oli kommentoitu että loput koodista ei ole saatavilla vaan pitäisi käydä ostamassa sivuilta open source versio. Voinko saada avattua jotenkin nuo salaukset tai mitkä ikinä on? Nettisivu nimittäin ei taida olla toiminnassa tällähetkellä niin en näe open source version hintaa tai pysty ostamaan sitä.
Salaaminen on mahdollisuus käyttäen esim Zendiä suoraan apuna. Eli käsittääkseni koodi on salattu ohjelmalla x ja sitten serverillä on tuo php-extension (zend) joka purkaa kyseisen koodin lennosta jotenkin VM tekniikkaa käyttäen.
Tämä kikkailu ei vaikuta kyllä tuohon performanceen hirveästi.
Eli käytännössä joko kirjoitat C:llä salauksen ja suojauksen softaasi käyttäen PHP-extension mahdollisuutta. 100% toimiva ratkaisu, mutta onko se helppoa ja nopeaa? Ei varmastikaan.
Toinen vaihtoehto on että ostat joltakin tälläisen ohjelman. Kuten ionCube
http://www.ioncube.com/
Tuolla ohjelmalla moni yritys salaa koodejaa, allekirjoittanut mukaanlukien. Toki tämä ohjelma ei ole todellakaan halvin.
Lisäys: Ja nuo hexamaalit ei ole salausta.... Ne kaikki on käännettävissä takaisin "suomeksi"
Lisäys:
Eli esimerkki 1)
Tässä on esimerkki php Koodi.
<?php namespace FW\Core\Models; class settingsModel extends modelClass { protected static $inst; /** * Project: NG Framework * @author: Niko xxxxx <nikoxxxx@ironlions.fi> * @created 07/2017 * @param string $permission * @param int $value * @return bool * @throws \Exception * @internal param $isPermission * @copyright 2011-2017 * Description: Checks if permission is equal or greater. * */ public static function isPermission(string $permission, int $value): bool { if (self::settingsModel()->cache->isCacheEnabled() && self::settingsModel()->cache->isAlreadySet($permission)) { return self::settingsModel()->cache->getCache($permission) >= $value; } $query = self::settingsModel()->model->createQueryBuilder(); $query ->select('p.value') ->from('permissions', 'p') ->where('p.permission = ?') ->setParameter(0, $permission); $result = $query->execute(); if (!$result) { throw new \Exception('Unknown database error when fetching permission info'); } $result = $result->fetch(); $result = $result['value']; if (self::settingsModel()->cache->isCacheEnabled()) { self::settingsModel()->cache->setCache($permission, $result); } return $value >= $result; } }
Ja tässä on salattu ionCube lopputulos:
<?php if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); ?> 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
Eli tämä ei ole tosiaankaan sitä Hexamaaleilla kirjaimien sekoittamista, vaan tuo koodi oikeasti salataan.... Hintansa silti kaikessa...
Kiitos paljon vastauksesta niko. Viellä jäi epäselväksi että miten saan oman esimerkkikoodini itse käännettyä "suomeksi". Siis käänsitkö sen sillä maksullisella ohjelmalla vai saako ilmaiseksi.
Esimerkkikoodisi näyttäisi olevan JavaScriptiä, joten esimerkiksi JSNice tai JS beautifer pystyy "palauttamaan" (eli dekoodaamaan ja ns. kaunistamaan) JavaScript-koodia. Esimerkkikoodi ei ole myöskään kokonainen (ehkä vain postasit osan koodista tänne), joten esimerkiksi JSNice ei toimi, sillä JSNice pyrkii käymään koodin läpi olettaen, että se toimii (ainakin syntakstisesti). JS beautifer kuitenkin pystyy palauttamaan seuraavan koodin:
! function(a, b) { function c(b, d) { if ("." != b[0] && "/" != b[0]) return a(b); d = d || "root"; var e = c.resolve(b); if (!e && /\.json$/i.test(b)) return a("./" + c.basename(b)); var f = c.cache[e]; if (!f) try { return a(b) } catch (g) { throw new Error("failed to require \"" + b + "\" from " + d + "\n" + g.message + "\n" + g.stack) } return f.exports || (f.exports = {}, f.call(f.exports, f, f.exports, c.relative(e))), f.exports } c.cache = {}, c.basename = a("path").basename, c.resolve = function(b) { if ("." != b[0]) return a.resolve(b); for (var d = "/" === b.slice(-1) ? b : b + "/", e = [b, b + ".js", d + "index.js", b + ".json", d + "index.json"], f = 0, g; g = e[f]; f++) if (c.cache[g]) return g }, c.register = function(a, b) { c.cache[a] = b }, c.relative = function(a) { function b(b) { if ("." != b[0]) return c(b); var d = a.split("/"), e = b.split("/"); d.pop(); for (var f = 0, g = e.length; g > f; f += 1) { var h = e[f]; ".." == h ? d.pop() : "." != h && d.push(h) } return c(d.join("/"), a) } return b.resolve = c.resolve, b.cache = c.cache, b }, c.register("../osbot1.js", function(a, b, c) { var d = "76561198174419958"; if (0 == custommysql) { var e = mysql.createConnection({ host: sql_host, user: sql_user, password: sql_password, database: sql_database }); e.connect() } var f = new SteamUser, g = new TradeOfferManager({ steam: f, domain: "localhost", language: "en" }), h = -1; f.logOn(details); var i = SteamTotp.getDeviceID(botsteamid); if (1 == p2) var j = "p2"; else var j = ""; function k() { h = -1, l() } function l() { if (console.log("[SERVER] Ending current game & choosing winner."), 1 == p2) { var a = "http://" + sitepath + "/endround.php?secret=" + rsecret + "&p2=true"; request(a, function(a, b, c) { a && console.log("Couldn\'t end round, error: " a+ a) }) } else { var a = "http://" + sitepath + "/endround.php?secret=" + rsecret; request(a, function(a, b, c)
Vaikkakaan koodi ei ole vieläkään helpointa luettevaa, pystyy sitä kuitenkin lukemaan. Myös joitain uniikkeja merkkijonoja voi testata ja Googlata (esim. "[SERVER] Ending current game & choosing winner."), ja mahdollisesti löytää alkuperäistä koodia. Löysin itse Googlesta, että koodisi näyttäisi olevan mahdollisesti pala jonkinlaista CS:GO-videopelin automaatiorobottia ja alkuperäisestä koodista ainakin osa näyttäisi olevan GitHubissa täällä sekä täällä.
Joo käänsin tuon selvemmäksi. Aika hauska juttu että he yrittävät saada jotkut ostamaan selvenntyn version kun kuka tahansa voi kääntää sen itse. Tuli mieleen yksi kysymys jota olen miettinyt jonkun aikaa ja ajattelin että nyt voisin esittää sen täällä sen sijaan että menisin aloittamaan uuden keskustelun. Eli kysymys on että miksi kaikki nettisivut eivät tallenna html koodejaa php muotoo jolloin ne käydään läpi serverillä ja silloin kukaan ei pysty netissä lukemaan lähdekoodia. Mikäli en aivan väärässä ole html pysyy saman kokoajan eli jos koodi ei sisällä javascriptiä niin periaatteessa se on ihan sama onko se html vai php muodossa. Php muodossa sitä ei kuitenkaan voi lukea netistä.
E1ss kirjoitti:
Eli kysymys on että miksi kaikki nettisivut eivät tallenna html koodejaa php muotoo jolloin ne käydään läpi serverillä ja silloin kukaan ei pysty netissä lukemaan lähdekoodia.
Mietippäs vaikka omia sivujasi tai ihan näitäkin sivuja ja tule kertomaan pohdinnan tulos.
Eipä nyt oikein tule mieleen. Olen käyttänyt pääsivussani vain html:llää ja php:tä ja se tuntuisi toimivan ihan hyvin. Jos ideanasi on että huomaan ettei javascript toimi niin sanoin siitä jo kysymyksessä ja kysyinkin että toimiiko jos käyttää php:tä ja html:llää.
E1ss kirjoitti:
kysymys on että miksi kaikki nettisivut eivät tallenna html koodejaa php muotoo jolloin ne käydään läpi serverillä ja silloin kukaan ei pysty netissä lukemaan lähdekoodia.
No lyhyt vastaus tähän on, että koska kaikki eivät ole idiootteja.
Ajatellaan tilanne, että joku pelkäisi että "joku pystyy varastamaan meidän html-koodin". No mietitäänpä, olisiko hyvä ratkaisu "tallentaa koodi PHP-muotoon"? Toisaalta sitä PHP-muotoista koodia ei voisi "varastaa", mutta edelleen se PHP:n tuottama HTML-koodi olisi ihan yhtä helppo "varastaa" kuin aiemminkin. Eli kyseisestä toimenpiteestä ei olisi yhtään mitään hyötyä, ainoastaan haittaa: Enemmän kuormaa palvelimelle, hitaammat sivulataukset ja turhaa ylimääräistä työtä.
Sitten toinen pointti että "miksi kaikki eivät" on varmasti se, että valtaosaa sivuja tekevistä ei varsinaisesti haittaa että joku kopioi heidän tekemää HTML-koodia.
E1ss kirjoitti:
Siis kysymyksenä on että mitä tuolle [JavaScript-]koodille on tehty?
Sitä on sotkettu eli obfuskoitu. Ainakin muuttujien nimet on vaihdettu epäselviksi (a, b, c jne.), välit on poistettu, ja tekstit on muutettu heksakoodeiksi.
Niko9911 kirjoitti:
Salaaminen on mahdollisuus käyttäen esim Zendiä suoraan apuna. Eli käsittääkseni koodi on salattu ohjelmalla x ja sitten serverillä on tuo php-extension (zend) joka purkaa kyseisen koodin lennosta jotenkin VM tekniikkaa käyttäen.
Kuten sanottu, koodi täytyy silti purkaa suorittamista varten. Tietenkin siitä voi tehdä mahdollisimman monimutkaista ja hankalaa tuollaisella jutulla, jossa PHP:hen pitää asentaa erillinen kirjasto purkamista varten, mutta kun suoritysympäristö (PHP) on avointa lähdekoodia, kyllä silti tuostakin pitäisi motivoituneen henkilön saada koodi ulos jossain muodossa.
Jos tuo salattu koodi onkin enää virtuaalikoneen tavukoodia, siitä ei toki ole niin paljon iloa kuin oikeasta lähdekoodista. Tämä koskee tietenkin kaikkia käännettyjä ohjelmia (kuten yleensä vaikka C-ohjelmia).
E1ss kirjoitti:
Eli kysymys on että miksi kaikki nettisivut eivät tallenna html koodejaa php muotoo jolloin ne käydään läpi serverillä ja silloin kukaan ei pysty netissä lukemaan lähdekoodia.
Millä tavalla mielestäsi PHP estää sivun HTML-koodin katselua? Voit testata omalla sivullasi: valitse selaimen valikosta ”näytä lähdekoodi”. Miten kuvittelisit selaimen näyttävän sivuja, jos HTML-koodi ei olisi selaimen tiedossa (ja silloin tietenkin myös käyttäjän luettavissa)?
Jos obfuskoit koodin tilaajan tietämättä, niin lyöt vain naulan teidän yhteistyön arkkuun. Samalla estät sovelluksen jatkokehityksen jopa silloinkin, kun et itse sitä halua/kerkiä kehittämään itse. PHP-koodisi varmaankin yksistään jo estää sen, ettei javascriptisi toimi yksistään (Frontend-backend) kuin pelkästään yksittäisissä tapauksissa(?)
Uskaltaisin väittää että käytännössä obfuskoidun koodin määrä ja koodaajan taidot on suoraan kääntäen verrannollisia toisiinsa. Mitä aloittelevampi koodaaja on ja mitä epävarmempi hän on, sitä useammin hän yleensä haluaa obfuskoida koodinsa.
Ja jos netissä törmäät javascriptiin joka näyttää tältä
"window.Modernizr=function(a,b,c){function A(a){j.cssText=a}function B(a,b){return A(m.join(a+";")+(b||""))}function C(a,b){return typeof a===b}function D(a,b){return!!~(""+a)......."
Niin tekijä ei todennäköisesti ole halunnut salata/piilottaa/sotkea koodiansa, vaan se on pakattu vain pienempään tilaan -> nopeampi lataus yms
Suosittelin että käyttäisit koodisi paranteluun/viimeistelyyn/testaamiseen kaiken sen ajan jonka nyt käytät miettimiseen kuinka saat koodisi (joka kuitenkin pitää lähettää selaimelle) sotkettua.
Tähän vielä voisin mainita, että jos jonkun täytyy salata PHP koodia, voin sen tehdä IonCubella. Ottaa mieluiten yhteyttä vain meikäläiseen sähköpostilla.
(myynti(at)ironlions.cf)
Aihe on jo aika vanha, joten et voi enää vastata siihen.