Hei,
Minulla on tämä iso pelisivusto jossa pelini ovat tällä hetkellä javascriptillä, ja myöhemmin myös java openjdk kanssa.
Minä mietin tätä obfuscatea, ja sitä onko se hyvä ja tarpeellinen, kun harrastelija rakentaa pelejä, obfuscate suojaa alkeellista koodia ilkeiltä kommenteilta ja myös vähentää tosi paljon sivujen lataus kuormaa, eteenkin kun muuttujat ja functiot ovat pitkiä suomenkielisiä.
Onko obfuscate tarpeen, vai onko se ilkeätä kiusaa muita koodaajia kohden ?
Minä en ihan tiedä tällä hetkellä, että, onko minun tarpeen käyttää, tätä obfuscatea, minulta on monta pyyntöä tehty näyttää koodia, ja obfuscaten poistaminen varmaankin tekisi monta henkilöä onnellisemmaksi.
Onko obfuscate kiusaa muita koodaajia kohden, vai onko se harrastajan suoja ilkeiltä kommenteilta alkeellisuutta kohden ja myös tehokas koodin pakkaaja ?
Poistanko obfuscaten ja näytän koodit ?
:) :) :)
--
HannuTapio kirjoitti:
Poistanko obfuscaten ja näytän koodit ?
Suosittelisin poistamaan, mikäli kiinnostaa saada vinkkejä koodisi parantamiseen.
Väittäisin, että itsellesi (ja muille) siitä on enemmän haittaa kuin hyötyä.
JavaScript-koodin määrä ei nykynettiyhteyksien aikana ole pullonkaula.
Sinänsähän mikään ei estä laittamasta sivulle käyttöön pakattua versiota koodista ja alkuperäisen erikseen tarjolle toisaalle.
Obfuskaattorin käytössä ei ole mitään järkeä. Sen sijaan minifierin eli koodin tiivistäjän käytössä on järkeä. Totta kai tiivistetty koodi on myös melko pitkälle obfuskoitua, mutta perimmäinen käyttötarkoitus on eri.
Jos haluaa esitellä omia koodejaan siinä tarkoituksessa, että muut ihmiset voisivat tutkia niitä ja oppia niistä, niin silloin on parempi julkaista koodit julkisen versionhallintajärjestelmän kautta.
Tällöin joudut kuitenkin ottamaan sen riskin, että joku muuttaa koodia ja poistaa siitä koneen ylirasittumista estävät suojat, jolloin saatat saada Viestintäviraston agentit jälleen kannoillesi.
Mitä tuo koodin tiivistäjä tekee koodille, mikä näkyy ulospäin.
poistaako se kaikki tyhjät välimerkit ja rivinvaihdot koodista, että sitä on epämielekästä lukea jälkeenpäin.
Jos näin on, kannattanee pitää varastossa kahta koodia, ensinnäkin omassa arkistossa kehitysversion alkuperäinen koodi, ja sitten erillään tuotantopalvemilella pyoriva tiivistetty koodi, niin sitten ohjelman ylläpito ei jatkossa tuota niin paljon harmaita hiuksia.
Jere Sumell kirjoitti:
(11.05.2021 09:45:40): Mitä tuo koodin tiivistäjä tekee koodille, mikä...
Minifointi toiminut itsellä ilman ongelmia jo vuosia ja todella monet kirjastotkin niitä käyttää. Itse pyöräytän js:n webpackin kautta, joten kaikki on automatisoitua ja yhdellä parametrilla se pyöräyttää sekä selkokielisemmän version että minifoidun.
Työtiedostot on tietysti kaikki omassa hakemistorakenteessaan, joten mitään peruuttamatonta ei minifointi tee, vaikka se jostain syystä "rikkoisikin" koodin.
Eli minifoitu tiedosto kääntyy omaan tiedostoon ja työtiedostot (joihin muutokset tehdään) ovat omassa hakemistorakenteessa ja mieluiten pilkottuina useaan selkeästi nimettyyn tiedostoon.
Ei siis tehdä koodatessa työtiedostoista mitään megalomaanista yhtä isoa ja pitkää, epäselvästi luettavaa tiedostoa, vaan jokaiselle toiminnolle ja osiolle on omat tiedostot.
Katsoin tuon minifierin käytännossa miten se toimii.
Tuo on kyllä ihan kätevän oloinen, jos ei halua kovin helpposelkoiseksi koodia antaa julkisuuteen.
Tuosta minifoinnista hyotyä alkaa olemaan vasta isoimmissa kokonaisuuksissa, yhden kahden rivin koodissa hyoty on voisi sanoa häviävän pieni, jos lainkaan hyotyä.
Jere Sumell kirjoitti:
Tuosta minifoinnista hyotyä alkaa olemaan vasta isoimmissa kokonaisuuksissa, yhden kahden rivin koodissa hyoty on voisi sanoa häviävän pieni, jos lainkaan hyotyä.
Ja ideahan tuossa onkin se, että kun käyttää paljolti vaikkapa node -paketteja, saa koodia pienennettyä huomattavasti. Ei tuota olekaan tarkoitettu sotkemaan koodia, vaan nimenomaan optimoimaan verkon yli latausaikaa yms.
Lebe80 kirjoitti:
Ei tuota olekaan tarkoitettu sotkemaan koodia, ...
Koodin piilottamiseksi haittatekijöiltä on sitten tämän viestiketjun avauksessa mainittu obfjuskointi, jos jostain syystä haluaa tehdä koodillensa sen.
Tuo objfuskointihan (obfuscate) perustuu kryptografiaan ja sitä myöden tiedon salausalgoritmeihin, Mitä niitä Caesar, ja saksalaisten käyttämä Enigma toisessa maailmansodassa oli käytössä, joilla vaikutusta vieläkin tähän päivään, niin sotateollisuuden sovelluksissa, kuin myös arkipäiväisessä käytössäkin olevissa sovelluksissa.
En tiedä, varmaan nykyään aika paljon sotateollisuuden sovellusten lähdekoodissa obfjuskointi on eniten käytetyin ala, jossa sitä käytetään, kun voisi kuvitella, että jollain valtiolla olisi, erityisesti sotahulluilla ydinohjuksen omaavista valtioista sellainen järjestelmä ja salausalgoritmi obfuskoituna, että vihollinen ei pysty murtamaan kovin helposti salausta, kun ajatellaan että sodassa päämääränä on saada hyökkäävän osapuolen näkökulmasta mahdollisimman paljon tuhoa aikaan, niin järkevämpäähän se on lähettää ohjus matkaan, joka piilotetaan vastustajan ohjustutkasta, ohjuspaneelista, ja sitten kun ohjuksen näkyvyyttä ohjaava algoritmin lähdekoodi on obfjuskoitu, niin tuhoa ehtii ennen tapahtumaan, kun vihollinen ehtii purkamaan koodin ja ohjelmoimaan vastalääkkeen.
Jere Sumell kirjoitti:
Tuo objfuskointihan (obfuscate) perustuu kryptografiaan
En näe miten ja miksi obfusktointi perustuisi kryptografiaan tai mitä hyötyä siitä olisi. Ehkä pystyt avaamaan tätä jotenkin tarkemmin? Itse pikemminkin näkisin että kyseessä on kaksi erillistä, eri tarkoituksiin soveltuvaa tekniikkaa.
Suorittavan tietokoneen täytyy joka tapauksessa pystyä purkamaan mahdollinen kryptaus ja näin ollen koodin yhteydessä täytyisi joka tapauksessa toimittaa salauksen purkamiseen tarkoitettu avain ja näin ollen kryptauksesta ei olisi hyötyä.
Yleensä obfuskoinnissa voidaan ihan vaan hävittää sellaista alkuperäisessä koodissa olevaa informaatiota, jota koodin suorittaminen koneellisesti ei edellytä, mutta joka helpottaisi koodin ymmärtämistä, kuten funktioiden ja muuttujien nimet, kommentit, jne. Kryptaamisen tavoitteena ei ole informaation hävittäminen.
Toki on mahdollista toteuttaa järjestelmä, jossa suoritettava ohjelma on kryptattuna muistissa ja prosessori purkaa sitä lennossa. En kuitenkaan tässä yhteydessä puhuisi obfuskoinnista vaan kryptaamisesta.
It costs only $99 for a year and you can give a shit for all of the obfuscators available on the market.
Even Microsoft has policy which supports open source when talking about web applications, nowadays.
Jere Sumell kirjoitti:
Jos näin on, kannattanee pitää varastossa kahta koodia
Yleisesti tänäpäivänä kun tuotantoversio julkaistaan, siitä erikseen buildataan tuotantoversio jossa minimoidaan js-koodi, tuotetaan kuvista tarvittavat pienennetyt versiot (thumbnailit jne) ja käännetään scss jne css:ksi yms. Eli noita ei erikseen tarvitse säilöä, vaan niiden tuottaminen on osa julkaisuputkea.
On mielestäni erittäin huvittavaa, että jotkut supervelhot pyrkivät 'salaamaan' jopa ne tiedot, jotka näkyvät itse sivulla, eli mahdollisimman epäselkona, kun klikkaat: näytä sivun lähde. No kaikkeen sitä voi energiaansa tuhlata 😊
Itselläni helposti luonnostaan tulee koulutus-näkökulmat mieleen, mitä lukion jälkeen päädyin hetkeksi opiskelemaan kasvatustieteitä, kun olin 12 kuukautta ala-asteella töissä lukion jälkeen (2002 - 2004) vielä toiveikkaana tulevaisuuteni työllistymisen ja koulutuksen suhteen, ja mitä nytkin venähtäneet FM-opinnot tekniikan laitoksella vielä kesken, niin aikuispedagogiikka sivuaineena, mitä olen ollut yhden lukukauden myös palkkalistoilla kotikaupunkini yleissivistävässä oppilaitoksessa vastuualueenani yksi IT-kurssi, niin kyllä lähtökohtaisesti pidän ihan ilman elämänkatsomustanikin tai miten se liittyy siihen, että kaikki koodi tulee olla selkokielistä ja avointa, olen päätynyt siihen, että se on paras.
Vaikka joku olisikin ohjelmoinut pyörän uudestaan, aina löytyy joku maailmasta, ketä voi olla kiinnostunut siitä, miten kyseinen henkilö on toteuttanut pyörän uudestaan, ja voi olla, että hän löytää jotain uutta tai oivaltaa eri tavalla jotain, ja sitä kutsutaan uuden oppimiseksi. Myöhemmin tämä voi omassa koodissaan soveltaa uusia oivalluksia, oppimaansa, ja seuraava sukupolvi tai myöhemmät sukupolvet ovat jo natiiveja kyseisen lähestymistavan kanssa, jos sillä alkuperäisellä koodilla on niin paljon lisä-arvoa tuovaa uutta jo olemassa-oleviin ratkaisuihin. Kasvatustieteissä tällä on sellainen termi, kuin "sosiaalisaatio", niitä on primaarisosiaalisaatio ja sekundaarisosiaalisaatio ala-otsikkoina ja tuo sosiaalisaatiotermi on perua 1960-luvulta, jolloin se esiteltiin.
Yksi syy ohjelmointia ja verkkotietoturvaa opiskelleena AMK:sta valmistuneena,käytän 95% tietokone-ajastani, jota on valta-osa valveillaolo -ajastani vuorokaudessa, niin käytän Linux-järjestelmiä, tai järjestelmää juuri tämän avoimuuden filosofian tähden, mikä tähän liittyy.
Ohjasi myös Turun Yliopiston aineopintojen yliopistolehtori, että "Tehkää koodistanne aina sellaista, että se on helposti luettavaa", eikä tarkoittanut pelkästään koodin dokumentointia ja kommentoitia, ja on niissä tiedon salausmentelmien pro gradu tutkielmissakin, joita löytyy mm. UTUPubista elektronisina versioina luettavissa, niin puhutaan siitä, että tiedon salausalgoritmit pitäisi olla avoimia. Tieteen tekokin jos mikä perustuu avoimuuteen, että asetetaan omien asetettujen hypoteesien varaan tehty tutkimus avoimeksi koko tiedeyhteisön saataville, jotta muut saman alan ihmiset pääsevät tarkastelemaan tutkimustuloksia, ja sitä kautta ehkä jokin tutkimus saa yhteisön yleisen hyväksynnän.
Avoin lähdekoodi on myös teollisuuskäytössä käsittääkseni nouseva trendi ollut jo pitkään, jollei tee tuloaan yhä voimakkaammin, vaikka paljon vielä suljetun Microsoft-maailman koodejakin ohjelmistoyritykset ylläpitävät, ja varmaan niitäkin joku ohjelmoi ja aloittaa jopa nollasta. Itse voisi ainakaan kuvitella tehdä päivätyökseni mitään suljettujen ympäristöjen parissa, paitsi ehkä sitten, että työnantaja maksaa kaikki työkalujen lisenssit, ja hyvän kuukausipalkan, eikä teetä ylitöitä paljoakaan. Joskus Microsoftin huippuvuosina, kun DOS ja Windows oli käytännössä ainoat käyttöjärjestelmä kotioloissakin mikrotietokoneissa käytännössä, 80-90 luvulla ehkä vielä oli kannattavaa tehdä suljetuille ympäristöille ohjelmia, mutta nykyään kannattaa suunnata mielestäni avoimiin koodeihin ja verkkoympäristöön ohjelmoida niitä.
Vielä lähdekoodin obfjuskoinnista tuli mieleen, kun mainitsin Linuxin avoimuuden filosofian edellisessä postauksessa, niin mitä kannatan avoimia yhteisöjä myös, ja pitäisi yhteiskunnan tasollakin olla enemmän avoimuutta ihan joka asiassa.
Onko liitettynä yhteiskuntapolitiikkaan verraten
Lähdekoodin objuskointi = Tiedon salailua/pimittämistä
Ei tarvitse seurata, kun päivän politiikkaa, ja ymmärtää, miten sitä kabineteissa tehdään, ja vertaa sitä mitä politiikot antavat julkisuudessa ymmärtää joistain asioista, niin päivän politiikan tekoon, jos johonkin liittyy paljonkin tiedon pimittämistä ja salailua, mitä me tavalliset kansalaiset emme koskaan ehkä saa tietouteemme. Tästä pitäisi jotenkin päästä eroon, miksei kaikki voisi olla läpinäkyvämpää?
Jere Sumell kirjoitti:
Itse voisi ainakaan kuvitella tehdä päivätyökseni mitään suljettujen ympäristöjen parissa, paitsi ehkä sitten, että työnantaja maksaa kaikki työkalujen lisenssit, ja hyvän kuukausipalkan, eikä teetä ylitöitä paljoakaan. Joskus Microsoftin huippuvuosina, kun DOS ja Windows oli käytännössä ainoat käyttöjärjestelmä kotioloissakin mikrotietokoneissa käytännössä, 80-90 luvulla ehkä vielä oli kannattavaa tehdä suljetuille ympäristöille ohjelmia, mutta nykyään kannattaa suunnata mielestäni avoimiin koodeihin ja verkkoympäristöön ohjelmoida niitä.
Miksi ihmeesssä? Mikset maksaisi ohjelmistosta, jos se olisi tehokkaampi ja paremmin toteutettu kuin avoimen lähdekoodin vaihtoehto? Avoimen koodin softassa saattaa joku ärsyttävä bugi olla ollut vuosia, kun taas maksava asiakas saa yleensä bugi korjauksen kohtuullisen nopeasti. Itse ostan kohtuu hintaisia ohjelmistoja ja tuen kehittäjää mielelläni. Monesti enemmän rahaa saa kulumaan yhdessä pitkän kaavan mukaan vietetyssä baari-illassa.
jalski kirjoitti:
Miksi ihmeesssä? ...
Kyllähän lähtokohtaisesti tyonantajan palkatessaan tyontekijän, tulee huolehtia tyovälineistä, eikä tyontekijän.
Sama, mitä oppilaitokset huolehtivat, että kaikki opiskelijat saavat tarvittavat resurssit oppilaitoksen puolesta poislukien mahdollisesti jotkin oppimateriaalit kirjat, tai luentomonisteniput, mutta ohjelmistojen osalta yleensä niin, että oppilaitos järjestää ne opiskelijoille maksutta, ennen toisen asteen ja siitä korkeammat astetta tarjoavat oppilaitokset, mutta nythän tilanne muuttui, kun toinen aste muuttui maksuttomaksi tasa-arvoisuuden lisääntymiseksi niin lukiossa, kun ammattikouluissakin. puhun nyt itesäni lähellä olevasta korkeakoulutus, kolmannen asteen oppilaitoksista tässä resurssivaraus/aineistohankinnat -asiassa, vaikka olen sitä sukupolvea, jonka piti pistää arviolta yli 10 000 markkaa lukiokirjoihin, tai vanhempieni piti investoida niihin, että saan lukiokoulutuksen.
Näin pitäisi olla myos tyontekija-suhteessa, mitä tulee tyonantajan tarjoamiin resursseihin.
Jos ajatellaan perinteisempiä tyopaikkoja, niin eihän asfalttihommiin erikoistunut yrittäjä palkatessaan tyontekijoita, vaadi lapion ostamista tyontekijältä, kyllä se tyonantajan vastuulla on. Tai sementtifirman omistaja, kun palkkaa betonityontekijää, tai betoniraudottaijaa, niin betonimyllyn pitää tulla tyonantajan puolesta.
Jere Sumell kirjoitti:
Kyllähän lähtokohtaisesti tyonantajan palkatessaan tyontekijän, tulee huolehtia tyovälineistä, eikä tyontekijän.
Kirjoituksestasi sai sen kuvan, että avoimen lähdekoodin työkalujen käyttäminen on sinulle tärkeää. Itse käytän niitä työkaluja ja tarvikkeita joiden käytöstä asiakas on valmis maksamaan.
En ole ohjelmistopuolella vaan teen sähkö -ja rakennusalan hommia työsuhteessa. Käytän työssäni muuten omia työkalujani, tosin tarvitsen niitä vapaa-ajallakin.
Juu, no riippuu tyon luonteesta ja alasta aika paljon, että jos vapaa-ajallakin harrastaa yritysmäistä toimintaa, esimerkiksi tyosuhteen ohella toimii osa-aika yrittäjänä samalla alalla, tai harrastuspohjaltakin tarvitsee tyokaluja.
Muusikoidenkin ala aika pitkälle, mitä olen seurannut läheltä ihan ammattilaisten toimintaa, ketä elättää perheensä rivimuusikkona Suomen alueella, ja kokemusta itsellänikin esiintymisestä jonkin verran, niin tyokalut ja kaikki tyomatkakustannukset ja mitä siihen liittyykään on muusikon, tai esittävän artistin kontolla ja kaiken muun alaan liittyvän hankintamenot, vuokrat treeniksistä yms.
Soitan nykyisin vain omaksi ilokseni pääasiassa, mutta kyllä harrastus tullut kalliiksi, jos kaiken laskisi, mitä siihen on rahaa investoinut. Jäänyt harmittamaan, että peruskoulun päättymisen jälkeen en hakeutunut ammattimuusikon toisen asteen koulutukseen mihinkään oppilaitokseen lukion sijaan, niin kyllä se, jos päätyy ammattimuusikkonakin jonain päivänä rivitoimijana siihen pisteeseen, että saa elätettyä nelihenkisen perheen sillä, niin se on pitkä tie, ja kustannukset, mitä siihen on investoinut, ja kulut juoksee joka kerta, kun lähtee keikalle, ja vaihtaa kielet kitaraan, ja uusii kalustoa, niin ei se taloudellisesti mikään väylä rikastumiseen ole.
Älä nyt enää sekoita mitään muusikoita tähän, muutoinkin sekavaan ketjuun.
Joo, no on tämä aika poukkoileva ketju. Ei lähdetä muusikon polulle enää tässä ketjussa, muut foorumit sitten sen alan toimijoiden toimeentulon pähkäilyn alustana.
Muutoinkin tämä aika kuollut aihe jo, mitään uutta Hannun avaukseen tuosta obfuskoinnista enää ole juuri tullut. Minäkin taidan vaieta tässä säikeessä.
Ymmärrän, että tässä keskustelussa on lähtökohtaisesti kysymys web-resurssien obfuskoinnista, mutta yleisesti ottaen on suoritettavan ohjelman salaaminen ihan yleinen ja varteenotettava käytäntö.
Tyypillisemmin tätä tekevät kai yritykset, jotka valmistavat sekä softaa että laitteita, joilla ohjelma ajetaan. Oletan näin koska silloin salauksen purkamiseen tarvittava avain tai sen osa voidaan säilöä laitteeseen siten, että sen lukeminen kenenkään muun kuin prosessorin toimesta on erittäin vaikeaa.
Sinänsä ei ole mikään ongelma, vaikka ohjelman valmistajalla ei ole pääsyä rautaan, koska avain voidaan toimittaa muillakin tavoin.
Koodin peittäminen,
Minä tein sen valinnan, että, jatkan tämän minifierin taikka obfuscaten käyttöjä, en ihan tarkkaan tiedä kumpi tässä on kyseessä.
Pienentäjässä varmaankin uudet muuttujat olisivat alkaen a - b - c - jne..
Minulla on valittuna ZZZa - Zb - ZZZZZe49 - jne, eli minulla on erimäärä Z kirjaimia ja sitten satunnainen kirjain numero yhdistelmä, eli tämä on varmaankin obfuscate sitten.
Minun koodin peittämisessä, pyrin aiheuttamaan myös ZZZ eli nukkumis efektin henkilöille, jotka pyrkivät tarkastamaan peitettyä koodia.
Mutta, minä jatkan koodin pimentämistä, en halua tilannetta, jossa harrastelijan alkeelliset muuttuja ja function nimi valinnat, aiheuttavat koko hyvin kulkevan koodin alentamisen julkisesti.
Minulla ei koskaan ole ollut luettuna ja opiskeltuna, mitään isompaa virallista ammatti tason pelikoodia, missä olisi hienoja muuttuja ja function nimiä.
:) :) :)
--
HannuTapio kirjoitti:
(12.05.2021 20:47:11): Koodin peittäminen, Minä tein...
minifierit eivät ole mitään käsityökikkareita, vaan ihan kirjastoja jotka käyvät koodin läpi ja tekevät taikansa tietyin säännöin.
Jos käytät tätä oikeasti ajamalla koodisi kirjaston avulla ja muuntamalla sen minifoiduksi koodiksi (joka yleensä merkitään "tiedostopäätteellä" .min.js pelkän .js sijaan.
Jos sä taas itse käsin nimeät muuttujat "a, b, c, ja d", niin tämä ei ole minifointia.
Obfuscoinnissa sama juttu. Selkeä koodi muutetaan _koneellisesti_ "epäluettavaan muotoon". Jos käsin kirjoitat, niin tämä on vain sekavan koodin kirjoittamista.
Obfuscointi on yleistä mm. haittaohjelmien piilotuksessa, jossa outo tekstirimpsu saadaan piilotettua vaikkapa yksinkertaisilta tekstihauilta.
// Paste your JavaScript code here function hi() { console.log("Hello World!"); } hi();
vrt. minifoituna:
function hi(){console.log("Hello World!")}hi();
vrt. sama koodi obfuscoituna:
var _0x1485=['2lZupeR','65642euVrAD','log','1535225JEmawb','6JTkamw','441193RplagP','Hello\x20World!','1164443tQjXZu','1274672euOGhU','159695jchJgx','2iIFllT','120689glyhwT','5IHTlJl'];(function(_0x1a46a3,_0x38a28c){var _0x20a5a3=_0x3d0c;while(!![]){try{var _0x18dfd2=-parseInt(_0x20a5a3(0xd6))*parseInt(_0x20a5a3(0xd5))+parseInt(_0x20a5a3(0xd8))+parseInt(_0x20a5a3(0xdc))*parseInt(_0x20a5a3(0xd7))+parseInt(_0x20a5a3(0xe0))*parseInt(_0x20a5a3(0xdb))+parseInt(_0x20a5a3(0xde))+parseInt(_0x20a5a3(0xdf))+parseInt(_0x20a5a3(0xe1))*-parseInt(_0x20a5a3(0xda));if(_0x18dfd2===_0x38a28c)break;else _0x1a46a3['push'](_0x1a46a3['shift']());}catch(_0x15697f){_0x1a46a3['push'](_0x1a46a3['shift']());}}}(_0x1485,0xa3eba));function _0x3d0c(_0x28bd43,_0x3d0aa1){_0x28bd43=_0x28bd43-0xd5;var _0x14858e=_0x1485[_0x28bd43];return _0x14858e;}function hi(){var _0x2df252=_0x3d0c;console[_0x2df252(0xd9)](_0x2df252(0xdd));}hi();
zuberkin on vielä mukana
Aihe on jo aika vanha, joten et voi enää vastata siihen.