Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Koodin salaaminen

Sivun loppuun

E1ss [14.10.2017 09:31:36]

#

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.

The Alchemist [14.10.2017 10:38:50]

#

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.

Multibyte [14.10.2017 10:59:43]

#

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.

groovyb [14.10.2017 11:54:11]

#

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.

E1ss [14.10.2017 11:56:31]

#

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.

Metabolix [14.10.2017 12:03:58]

#

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?

E1ss [14.10.2017 13:20:38]

#

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ä.

Niko9911 [14.10.2017 16:20:31]

#

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);

?>
HR+cPmSQYLLa+d6QSQWSTlWQb9rg+lMKQg5kdukuIvLkfpe1B2W7ALoP7tc+39GJjOStfIhuGK9I
+jWSs/PYTb7ssbFpPSJQ7rZIs/4eN69085YwVHUokylaVXdtE1AWq/wA49S8vODFZji/0OMAVobm
K4KgI2YHqbtrYKc9R85lsZNpXZ37f9frX+amQmDXyW5fnKalsV1l8xptN8pbAmNZ2GcS7bG/6wmA
nDEp2tsBCblb+PUzgmrOcgbQMYBJq6RAG8jvwCBkVipOpfTomFW+wDIGf5rfr/OEvVijj9h4lkJ5
TAGAHrLgnfoiAtoy6oe2Tpzp+rDaisjW5Nl6ZN8N2z2PBPy45R3VXisR90Osz92tj21Ncv55jrFX
+qCNvFIl0xyAehoksM7ba/9TYa553F0fYdPlTmnAE3OsSeN2J0L17sxlxumFFQJAwMHdfLHeaKyo
r7eCPNXzxbq8M368NUrhzg/mAs6j6pXpiFctXfGLnhniQo8vgOSsnOsoV63aQ5SdY+ZG3+XkUTkH
7aOnHQxLJYYTLYLvGhWfIVH2tr/+lx006/I4bsUh21mRPJYZZTuBh9oaVaK5abPLDFYOrJTAdzD3
ukaHYVoCSlgwvI4IgK+tjck9sEtKxpzJTV64PM9jmBNPdDiFxRItbHMzZs4xF+gFEqBnIT7MtU+k
giXkua/lF+pIrqO6Rd+WZFY0LCiEJw1FYDFIa1oN3PGegT66L9GOLIz5jR8hH7YZrLSVW2j7/YYj
17zZovchRn6BA/GUtTKl0dFlNR15mKE58XktG/WjWRgl3QYfARiLEh1e8AQSWOZOe508hOWT1qpC
HTsiGutzgQGL5yRFKGd54ukmM0Nb+LJeXQYrkLzzvBDOSZcxG/iOYhCnNy3ABStRXaLAmy7xk+tD
XxE/bNDtGNZJudCGOkaRhG1O+OU44hRf2mA/zsieStkYxFHx8HRmTcFJz+J4M4CSOi2DrxXBePQ/
0jBjJyNbTQu+piBylr2RMzFhtPd11NdSaYioeAyLImwRxsKw6bwrxfyPbR1JdcO2hl1pGqRQ0NDU
k8gEGYa2Xp/Mz6gysLrdkIX+MOdfEN7Ez63a5eNbBK+DyYx+Ny21ZXs/R9j9Pxa3+T3bC+ROyJFw
C8ZxEujSfRHRrPJKqNL+fdJ++X4BIWfIbYpYf186UVnfEY2zrU+RKgwC/YzZqR9TdfB99A1RiE4L
j3+GaKheMQHaQPp9Lg0ZbJgKhUeubwDFfLBjurWIeXFU9UTuQHlFPmrluqFNpNh9nIRgkB/O+5oL
czvDAwM7xOqoCi7g/XdcY56xSXB3wODTEPX8nK8WugwCZd3qA0CRmuI9VwtWQLem/qZ51S27eH5/
Kr6sa3k2vUM/hE3xcSMpUhAlAtebPDaN/nVjc+njc0dtKa2H1+msXKoMDk84B9h78CJMIesbZD8W
n/Gpe+Tpadkwo7AE6PB2ldTwIIKLOYyGA1O1fxHrk8oMME7ZK5EMrjkTat2aSfRiBMMsfw3r1gvy
R3CEBmOOK63bSzNqe66CX/ihvMc2U5GSZ175m7BUpemeW9wsUKMjuSrCybaaTVx2reWCccIwkpuJ
W/viNaPdkrWB7iSG5SiSS5JtYvfMzOHHmyH7BqjZI4O8R5Rhq0fhc7hts3IKaQT7vfnQGW5xNENo
7LU+u7iJsO0xZefN25zus8MARHeasmxQQTtSf7HWoI/GfT38WeSolv3/ArUqZ1evQKyopg1EYuxd
cf0NsaV4q8MbUjOiEGhCx3SEYDrfNZjLv7r61izRept1cgiKFVYBCgwNxt2PCX7aHuEKn97kcD50
nCT4ndhKTeFPHcIGfn6GVaeuGAbRvGF1qAe6BeRyt0+fSoBHBi1heQJoukArKTD+sEGIF/SVOLUC
hR6UaycS4JtB3/a7eNW3Ymt/bEMTyWBlbsID53dtCib/SOAGApg+jyx2gbj3Knpj3v1V2NhQPeKk
/UqKpG8jb4xP1bZYxx2CweICcsPOlukCBOStiegUx/VH2Xa+2bs3tkD/1kSu3tgqEv/oUTYp8Mz5
+NNJYsAwhYdB3vwGnlzI0Y8n4RZGZiu3AzS0+N6v1cG6mfZKJ2W9V4OmlwQnA97UYC0nvrgvKFDN
gQFgqNG28CYCFmwezG43NA0YZtpc/pP9jJvRAcJXJBJTvYwkmW9qVBsOmaDhy84oVIUXZrfC68KT
BxjEfVhQ8imL/f33VNgti6DfPnew1TVsNtE4LZsgmfUs3fsdWyWlm7OIh+/7BTHGxwFLYCqaWCI3
9OOzlYoXRKOWb5TArIZ67biUQwqrCjGLiVHQH7avmqn0mqQHuhE+6nUPT4qcW4pGf/2VTA0AQLD2
S0+chHVJc9cgsmzQf2UVey3Vrjxe63rviy8p/q7WRSZQA9LsA+SAmGpqMrI2FcbfubbvAZDeNNkq
OcuQ304SUJYsWAamO2+Aeu9AyOZkX1X3v88FWjgWlyXLP+XkqiculkTUsuYECSKabO60fiPGuDU4
E6i+9sXFU1nzNRUMmcq5CONXKKC9EHd6KUPkeA2rt030OYNDwViOxTf9ujWEYfWwOjfwhXv9izog
etPpqdbXDCNb9NE5lZNnUMpE6hKUILkEhDqOk/jcPFRAWUZECqPoxy2PvBxEQ/JCll95/PsEAY69
EFGwqknEv0RDB1v3z6k8nD2MOkkcHBKPSN8nJBynmTYBtBzigNCeVE1+Ekn7rNIjvrIv8/YRTrk2
iUrk/zO6nHOKJf0SIPLf5A6deWF8HNvxb6DTSM58icKmruLeqT2AofCm0lx1BbRHrF91dpF0ddAA
VLoTd07bAeSCObg83/c9YPqkJljVyasdtZ2x7UBBIFreU3ICESstO6Lkb3M8Oi8fe2NmIGWmFaYO
Uq0ZMWeK5yAsrbZgwoSAIfjEP7oYS3NVXckCjjsnHuu2W1+ZQaivDDeb0hnnxOoK+rGmu+r/QTyo
I9mS1pYQ5fjVn9L33C6MCDVImiX6j0DUmZFca24Rhxz9qQtKTqOW0Lj7e9s9YbuYgEc7pLASd0TX
YQFnQf6NSKMpWxPsnCt+npx1GgDIQ1ZkS8XWM2cYLdV4965nemwsDlZJK5ngwmC7RTnwsq+ixh9B
X4Ov+Fvoer+8cbE/4vi9HkSwjqL+bu9zWLSNBR3fmI++dAdjnXCqo0ENhiDqMOsjPvYNwNRyrlQz
4CMM7wWcnld7hBqU/PIdCtf+d7+6FhtdTesq25gRk6tKcCV6ExkhN/8z

Eli tämä ei ole tosiaankaan sitä Hexamaaleilla kirjaimien sekoittamista, vaan tuo koodi oikeasti salataan.... Hintansa silti kaikessa...

E1ss [14.10.2017 20:19:06]

#

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.

joah [14.10.2017 21:31:05]

#

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ä.

E1ss [15.10.2017 13:40:21]

#

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ä.

Pessi [15.10.2017 14:37:48]

#

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.

E1ss [15.10.2017 17:45:44]

#

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ää.

Grez [15.10.2017 18:32:28]

#

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.

Metabolix [15.10.2017 20:21:52]

#

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)?

Lebe80 [16.10.2017 15:54:24]

#

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(?)

makumaku [18.10.2017 20:06:46]

#

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.

Niko9911 [25.11.2017 18:21:50]

#

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)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta