Kirjoittaja Aihe: Koodin obfusikointi  (Luettu 3779 kertaa)

Jere Sumell

  • Käyttäjä
  • Viestejä: 742
  • Talous, Hallinto ja Markkinointi (AMK, 2017),B.B.A
    • Profiili
    • Tietokone-blogi
Koodin obfusikointi
« : 16.01.21 - klo:14.45 »
Nyt lauantain iltapäivemmällä voisin pari heittoa pistää Jani Alander tuohon sinun esittämääsi koodi-postaukseen.

Obfuskointi on milenekinntoinen aihealue, itse en ole obfuskoinut koskaan mitään koodiani, mutta voisi kuvitella, että erityisesti jos kaupallista lisä-arvoa jollekin taholle valmistetusta koodista kyse, eikä kyse ole avoimen lähdekoodin ratkaisusta, niin varmaan aika yleisessä käytössä ohjelmistoyrityksissä?

AMK:n ohjelmointikursseilla millään, tai Turun yliopistonkaan niissä ohjelmointi ja algoritmi-kursseilla, joihin olen ottanut osaa, yliopisto-tekniikan maisteri opinnot ovat vielä kesken elämäntilanteeni vuoksi, niin kukaan ohjaaja, lehtori tai ohjelmointi-kurssin opettaja ei ole puhunut mitään tuosta ohjelman lähdekoodin obfuskoinnista edes sivumennen.

Olisiko sinulla jotain hyvää kirjalähdettä, minkä välityksellä voisi perehtyä tuohon obfuskointiin taustoihin, ja käytännön sovelluksiin teollisuuskäytössä, vaikka mikään elämäni aikana valmistamani lähdekoodi ole ollut sen arvoinen, että olisi jotain peiteltävää, tai haluaisin salata jotain. Ylipäätään mitä syvemmälle tietokoneharrastuksessa olen mennyt AMK-opintojeni jälkeenkin, olen alati yhä enemmän etääntynyt suljetuista ympäristöistä tai niihin liittyvistä ratkaisuista. Kannatan avoimuutta, ja vastavuoroista toimintaa ja mielelläni jaan toisille, mitä omin itselleni. Tämä pätee elämänfilosofiassani voisi kai vaikutteena ainakin toimii lähes kaikkeen, tai miksei kaikkeen toimintaani. Vaikuttaa jotenkin siltä, että suljetut lähdekoodit ja ohjelmistot ja ympäristöt ovat niin 90-lukua, ysäriä, ja yritysmaailmassakin kasvava trendi avoimuus ja avoimen open-source -koodin kehittäminen ja sen hyödyntäminen.

Mainitsit itsekin Jani, että paljon muuttujia tuossa sinun auringonlaskuaikaa mittaavassa ohjelmaharjoituksessa. Itsekin käytän yleensä paljon välimuuttujia tavallisesti, ja tulostan niitä välillä testatakseni jonkin muuttujan arvoa ihan ajaen ohjelman, vaikka Debuggeri on ihan hyödyllinen työkalu, Pythonissakin on ja mitä itse Javaa eniten koodaan harrastemielellä jotain pientä, niin Javassakin on ihan hyvä debuggeri ohjelmoidessani Eclipse IDE:llä. Mitä tulee tuohon debuggerin ohjelmointiin itseensä, niin liittynee samaan aiheeseen, mitä keskustelu kääntäjien toiminnasta. Debuggeri on käsittääkseni ohjelmointikielen tulkki, ja tulkki poikkeaa kääntäjästä siinä, että tulkki tulkitsee yhden koodirivin kerrallaan konekieliseksi ilman, että suorittaisi sitä, kun taas tosiaan kääntäjä käy koko ohjelman läpi ja kääntää sen ajettavaan muotoon, jotta valmiin ohjelman suorittaminen olisi vaivattomampaa jälkikäteenkin. Tulkinta täytyy tehdä ohjelmalle joka kerta uudelleen, mutta käännös ainoastaan kerran.

Debuggerissa, kun asetetaan ne breakpointit koodiin, niin aloituspisteestä lopetuskoodiriviin niin saa määriteltyä, minkä kohta koodista tulkitaan tarkasteltavaksi muuttujien arvojen yms. osalta. Tulkin algoritmi on yksinkertaisempi, mitä kääntäjän, kääntäjässä on useampia vaiheita, joskin molemmat algoritmeistä lienee rekursiivisia.

Noissa korkeakoulujen ohjelmointiharjoituksissa ja kursseilla ainakaan Turun korkeakouluissa Turun AMK:ssa ja Turun Yliopistossa ei vaadita virhetilanteiden huomiomista, tai syötetiedon oikeellisuuden tarkistusta, tai tiedon validointia. AMK:n olio-ohjelmoinnin jatkokurssilla enemmän vaadittiin, minkä ymmärtää, kun siellä on jonkinlainen laajempi idea työelämälähtöisyydestä, mitä yliopistossa, niin ohjelmistokehitys-työpaikoissa voi kulua useita miestyöviikkoja pelkästään virheellisten syöttöjen tarkistus--koodeihin, koska ohjelma toimitetaan asiakkaalle, jonka ei tarvitse ymmärtää mitään teknologiasta tai ohjelman anatomiasta ja käyttäjät voivat olla juuri niin "tyhmiä" kuin haluavat. En nyt tuolla tarkoita, että kukaan ihminen olisi tyhmä, mutta otan viitekehykseksi jonkin esimerkiksi Googlen hakukoneen avoimen tekstikentän, mihin teoriassa voi kuka tahansa sitä käyttävä kirjoittaa periaatteessa minkälaisen hakusana-merkkijonon hyvänsä, ja sitä puolta on mahdoton rajoittaa mitenkään, mutta Googlen ohjelmistokehittäjät pitävät siitä huolen, kun hakulomake käy jonkinlaisen prosessiohjelman läpi, jossa määritelty Googlen ideoimat sääntöehdot ja toki sitten vielä valkoiset ja mustat listat käytössä, mutta puhtaasti hakumerkkijonon merkkien tarkistukseen. Näin ei kukaan red-hat pääse anarkiaa harrastamaan Googlen järjestelmissä, kun ei kaikki 15-vuotaiden skriptikakaroiden haut mene läpi.
« Viimeksi muokattu: 16.01.21 - klo:14.56 kirjoittanut Jere Sumell »
Free Internet and  people for humans all over the globe!

(Profiilikuvassa oma valokuvani GIMPissä editoituna Disney Classic-väripaletin väreihin ja muunnettuna bittikartta-tiedostosta vektorigrafiikaksi.)

JaniAlander

  • Käyttäjä / moderaattori+
  • Viestejä: 3369
    • Profiili
Vs: Koodin obfusikointi
« Vastaus #1 : 16.01.21 - klo:14.48 »
Tuosta on Jere obfuskoitu se api-key koska se on henkilökohtainen enkä saa sitä laillisesti jakaa :) Ohjelma toimii jos sen korvaa hakemalla ilmaisen api-keyn tuohon api:hin...Mieluusti olisin toki sen suoraan toimivassa muodossa jakanut. Ja muuttujia käytetty paljon juurikin ohjelman debuggailun takia, työstettävässä versiossa oli aika läjä niiden arvoja tulostavia käskyjä...
« Viimeksi muokattu: 16.01.21 - klo:14.52 kirjoittanut JaniAlander »
Core i5-9400F 2.9ghz 32GB Ram, Nvidia RTX2060 Kubuntu 24.04-64bit, Windows 10 Pro 64-bit Samsung Series 5, AMD A-6 2.1 GHz 4 Gt Ram, Ubuntu 18.04 64-bit.
Lenovo T60 Core2Duo 2GB Ram Ati Mobility Radeon 128 MB Ubuntu Mate 16.04-64bit
Commodore Amiga 500 1MB Ram.

Jere Sumell

  • Käyttäjä
  • Viestejä: 742
  • Talous, Hallinto ja Markkinointi (AMK, 2017),B.B.A
    • Profiili
    • Tietokone-blogi
Vs: Koodin obfusikointi
« Vastaus #2 : 16.01.21 - klo:14.57 »
Selväksi tuli. Mutta voihan minkä tahansa lähdekoodin obfuskoida, jos nyt laajentaa tarkastelun kohteeksi tuon sinun lähdekoodin api-avaimesta muut mahdollisuudet?
Free Internet and  people for humans all over the globe!

(Profiilikuvassa oma valokuvani GIMPissä editoituna Disney Classic-väripaletin väreihin ja muunnettuna bittikartta-tiedostosta vektorigrafiikaksi.)

JaniAlander

  • Käyttäjä / moderaattori+
  • Viestejä: 3369
    • Profiili
Vs: Koodin obfusikointi
« Vastaus #3 : 16.01.21 - klo:15.12 »
Voihan sen toki joo, ja sanoa sitä "avoimeksi lähdekoodiksi". Avointa on, mutta välttämättä muu kuin tekijä ei ota siitä selvää.
Core i5-9400F 2.9ghz 32GB Ram, Nvidia RTX2060 Kubuntu 24.04-64bit, Windows 10 Pro 64-bit Samsung Series 5, AMD A-6 2.1 GHz 4 Gt Ram, Ubuntu 18.04 64-bit.
Lenovo T60 Core2Duo 2GB Ram Ati Mobility Radeon 128 MB Ubuntu Mate 16.04-64bit
Commodore Amiga 500 1MB Ram.

JaniAlander

  • Käyttäjä / moderaattori+
  • Viestejä: 3369
    • Profiili
Vs: Koodin obfusikointi
« Vastaus #4 : 16.01.21 - klo:15.15 »
Toinen hupaisa temppu on julkaista community-edition jostain softasta ja pistää niin onnettomat ja suorastaan virheelliset ohjeet kuin suinkin. Sellaisenkin kohteeksi on joskus tullut jouduttua erään asianhallinta softan kanssa. Joutui kaivamaan toimivat ohjeistukset jostain foorumipostauksesta kun virallinen ohjeistus oli jokseenkin täysin väärää.
Core i5-9400F 2.9ghz 32GB Ram, Nvidia RTX2060 Kubuntu 24.04-64bit, Windows 10 Pro 64-bit Samsung Series 5, AMD A-6 2.1 GHz 4 Gt Ram, Ubuntu 18.04 64-bit.
Lenovo T60 Core2Duo 2GB Ram Ati Mobility Radeon 128 MB Ubuntu Mate 16.04-64bit
Commodore Amiga 500 1MB Ram.

Jere Sumell

  • Käyttäjä
  • Viestejä: 742
  • Talous, Hallinto ja Markkinointi (AMK, 2017),B.B.A
    • Profiili
    • Tietokone-blogi
Vs: Koodin obfusikointi
« Vastaus #5 : 16.01.21 - klo:17.50 »
Tuo ohjelman lähdekoodin obfuskointi vaikuttaa aiheelta, johon voisi perehtyä ihan pro gradu -tutkielmassa jollain tasolla oikein perehtyisi asiaan. Katsoin Turun Yliopiston UTUPub -julkaisu-tietokannasta avainsana-haulla "obfuscating", niin yhdessä opinnäytetyössä mainittu avainsanana tuo tai otsikossa, ja se oli vuoden 2020 marraskuussa julkaistu luonnontiteiden tiedekunnan ja tulevaisuuden teknologian laitoksen opiskelijan tohtorin väitöskirjatutkielma, missä se sana esiintyi pilvialustojen yhteyteen. Cloud computingiin.

Tuolla UTUPubissa julkaistaan ainakin kaikki tietojenkäsittelyn ja tekniikan pro gradut ja lisensiaatti/tohtori-opinnäytetyötutkielmat, ja laitoksen tutkijoiden artikkelijulkaisuja.

Luulisi, että tuosta aiheesta löytyy paljon enemmän materiaalia suomalaisten korkeakoulujen aineistohauista.
Free Internet and  people for humans all over the globe!

(Profiilikuvassa oma valokuvani GIMPissä editoituna Disney Classic-väripaletin väreihin ja muunnettuna bittikartta-tiedostosta vektorigrafiikaksi.)

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11481
    • Profiili
    • Tomin kotisivut
Vs: Koodin obfusikointi
« Vastaus #6 : 16.01.21 - klo:17.55 »
Tämä aihe on jaettu tuolta: https://forum.ubuntu-fi.org/index.php?topic=56021.0

Voihan sen toki joo, ja sanoa sitä "avoimeksi lähdekoodiksi". Avointa on, mutta välttämättä muu kuin tekijä ei ota siitä selvää.

Mitään OSIn määritelmän mukaista avointa lähdekoodia tuo ei kyllä olisi, koska kyseessä ei ole lähdekoodi vaan kääntämisen tuloksena syntynyt koodi.

Muutenhan tuollaista käytetään yleisesti nettisivuilla jaettavan Javascriptin kanssa. Sillä säästetään tilassa eli latauksen koossa, koska kaikki sanat korvataan lyhyemmillä versioilla. Samalla toki vaikeutetaan mahdollisuuksia tutkia, mitä kyseinen koodi tekee. FSF on joskus kampanjoinut tämän asian vuoksi.
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.

JaniAlander

  • Käyttäjä / moderaattori+
  • Viestejä: 3369
    • Profiili
Vs: Koodin obfusikointi
« Vastaus #7 : 16.01.21 - klo:18.01 »
Tämä aihe on jaettu tuolta: https://forum.ubuntu-fi.org/index.php?topic=56021.0

Voihan sen toki joo, ja sanoa sitä "avoimeksi lähdekoodiksi". Avointa on, mutta välttämättä muu kuin tekijä ei ota siitä selvää.

Mitään OSIn määritelmän mukaista avointa lähdekoodia tuo ei kyllä olisi, koska kyseessä ei ole lähdekoodi vaan kääntämisen tuloksena syntynyt koodi.

Muutenhan tuollaista käytetään yleisesti nettisivuilla jaettavan Javascriptin kanssa. Sillä säästetään tilassa eli latauksen koossa, koska kaikki sanat korvataan lyhyemmillä versioilla. Samalla toki vaikeutetaan mahdollisuuksia tutkia, mitä kyseinen koodi tekee. FSF on joskus kampanjoinut tämän asian vuoksi.

Tomin meinasin lähinnä tarkoituksella vaikeaselkoista ja huonosti kommentoitua koodia (tyyliin tekijällä paremmin kommentoitu versio tms...)
Core i5-9400F 2.9ghz 32GB Ram, Nvidia RTX2060 Kubuntu 24.04-64bit, Windows 10 Pro 64-bit Samsung Series 5, AMD A-6 2.1 GHz 4 Gt Ram, Ubuntu 18.04 64-bit.
Lenovo T60 Core2Duo 2GB Ram Ati Mobility Radeon 128 MB Ubuntu Mate 16.04-64bit
Commodore Amiga 500 1MB Ram.

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11481
    • Profiili
    • Tomin kotisivut
Vs: Koodin obfusikointi
« Vastaus #8 : 16.01.21 - klo:20.58 »
Tomin meinasin lähinnä tarkoituksella vaikeaselkoista ja huonosti kommentoitua koodia (tyyliin tekijällä paremmin kommentoitu versio tms...)

No juu, tietysti muiden mahdollisuuksia kontribuoida omaan koodiin voi monellakin tavalla haitata. Ihan tyypillisin esimerkki on julkaista koodi jossain avoimella lisenssillä, mutta sitten tehdä kehitys täysin suljettujen ovien takana ja vain puskea muutokset julkaisussa avoimeen repositorioon. Tähän ei tarvita edes huonoa kommentointia. ;D
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.

JaniAlander

  • Käyttäjä / moderaattori+
  • Viestejä: 3369
    • Profiili
Vs: Koodin obfusikointi
« Vastaus #9 : 17.01.21 - klo:12.24 »
Ehkä sitä jotkut ovat ajatelleen forkkaukset estonäkökulmasta. Siinähän forkkaat jos koodi on niin vaikeaselkoista, ettei siitä oikein ota selvää. Minun mielestäni ei kyllä open sourcen hengen mukaista toimintaa.
Core i5-9400F 2.9ghz 32GB Ram, Nvidia RTX2060 Kubuntu 24.04-64bit, Windows 10 Pro 64-bit Samsung Series 5, AMD A-6 2.1 GHz 4 Gt Ram, Ubuntu 18.04 64-bit.
Lenovo T60 Core2Duo 2GB Ram Ati Mobility Radeon 128 MB Ubuntu Mate 16.04-64bit
Commodore Amiga 500 1MB Ram.