Läpitunkematon koodi on tietokoneohjelma on koodi , joka on hyvin vaikea ihmisen ymmärtää pysyen täydellisesti compilable tietokoneella.
Prosessia, jolla koodi tehdään läpäisemättömäksi, kutsutaan salaukseksi tai offuscationiksi . Tällä tavanomaisen käytön vastaisella ohjelmointitekniikalla on syyt.
Se on ensinnäkin keino suojata ohjelmistokehitysinvestointeja kohdekoodin generointitekniikoilla , mikä vaikeuttaa käänteistä suunnittelua . Se koostuu erityisesti tunnisteiden ja muistilehtien korvaamisesta ei-merkittävillä tarroilla.
Se on myös harrastus joillekin ohjelmoijille. Tämä harrastus koostuu lähdekoodin kirjoittamisesta, jonka toimintaa on vaikea määrittää. Käytön, lukukelvottomaksi syntaksin , sekä semanttisen erityispiirteet vähän tunnettuja tai erittäin suositeltava käytetyn kielen tai luonnottomia algoritmit ovat erilaisia varjostusraitoja tekniikoita.
Ensimmäinen hämärtymismuoto koskee ohjelman jakamiseen luotua kohdekoodia , kun taas toinen koskee lähdekoodia .
On ohjelmia, jotka poistavat kaikki lähdeohjelman kommentit ja korvaavat kaikki tarrat (esimerkiksi LOOP, REPEAT, ERROR vähemmän merkityksellisillä termeillä (ETI00001, ETI00002, ETI00003, jopa O: n, 0: n, I: n ja 1: n seokset, mikä tekee niistä vaikeaa) tehdä ero ihmislukijan kannalta vahingoittamatta kokoonpano-ohjelmaa).
Varsinkin perverssi variantti koostuu kommenttien korvaamisesta tiedoilla, jotka eivät tuo mitään .
Esimerkiksi :
LR 15,=X'0F' ; On charge X'0F' dans le registre 15Tuolloin Turbo Pascal 3 ( noin 1985) oli ohjelma poistamalla kaikki ei-merkitsevä aihioita lähdekoodia, pakkaus se enintään 255 merkkiä riville, ja korvaamalla kaikki muuttujat yhdistelmillä l (pieni L) 1 (numero 1), O: n (pääoma O) ja 0: n (numero 0). Esimerkiksi A: = B + C: stä tuli L0O1l10O: = O1ll10O0 + O0O1l00ll . Tarve näille rikoksentekijöille johtui siitä, että Turbo Pascal 3 ei sallinut aliohjelmien jakelua muuten kuin lähdekoodina.
Vuonna 1960 ja 1970 , useimmat valmistajat käytetään PL-tyypin kielet niiden kehityksen ( PL / 360 , PL / M, PL / C, PL / S, PL / 1600, jne.), Jotka käännetään osittain kehittynyt lähdekoodin . kokoonpanimessa. Koska sovellukset olivat myytävissä vain silloin, kun niiden lähdekoodi oli käytettävissä, asiakkaiden käyttöön saatiin juuri tämä luotu kokoonpanokoodi. Joten käsky, kuten A = B + 31; tuli:
LR 4,B ADD 4,=31 ST 4,AVersio, jota asiakas oli vähemmän taipuvainen muokkaamaan, varsinkin kun seuraava versio olisi vaatinut häntä tekemään kaikki muutokset. Ensisijainen tavoite oli lähdekoodin piilottaminen vähemmän kuin asiakkaiden ohjelmien muokkaamisen rajoittaminen, muokkaajien etähuolto toimittajien toimesta oli vaikeampaa.
Vaikka alkeellisia, The Erä kieli ( MSDOS ) tekee myös koodin monimutkaisempi, mikä vaikeuttaa ymmärtää ohjelmia. "Set" -komentoa käytetään vastaavuuden määrittelemiseen. Esimerkiksi: Aseta A = B. Sitten on mahdollista käyttää A: ta B: n sijasta kutsumalla A kahden "%" -merkin väliin. Esimerkki:% A%. Siitä tulee mielenkiintoinen, kun korvataan todellinen käsky monimutkaisella merkkijonolla.
Esimerkki: Aseta #A = Dir
Käyttämällä% # A% kutsutaan siis "Dir" -komennolle. Voimme viedä järjestelmän äärimmäisiksi korvaamalla Set-komennon vastaavuudella ja koodaamalla tätä vastaavuutta uusiin ohjeisiin.
Esimerkki:
Set ¯=Set%þ% %¯% ð=If Exist%þ% %¯% =Echo%þ% ...//... %% þAkhenatonþ>>%2 %ð% î%2 %Þ% F%þ% Ren %2 î%2%þ% %% @%% Off>%2%þ% Find "þ"<%ê%>>%2 %% %ð% î%2 %Þ% E>>%2%þ%Tämä koodi maskaus tekniikkaa käytetään noin viruksia (Akhenaton, Catlord, jne.) Koodattu Erä . Nämä virukset ovat alkeellisia ja harvinaisia, mutta niiden ansio on se, että he ovat tienneet kuinka hyödyntää primitiivisen kielen kuten Batch virheitä ja siten peittää niiden viruskoodi.
Kaikille kielille voimassa olevien klassisten tekniikoiden lisäksi Fortran-koodin hämärtyminen voidaan saada poistamalla kaikki välilyönnit (mukaan lukien kieliasiasanan ja muuttujan nimen välillä) ja käyttämällä yhdelle eri nimiä. Sama muuttuja eri osissa koodi EQUIVALENCE tai COMMON kautta.
Jakaminen pituisen n merkkijonon tasa-arvoisiksi alimerkkeiksi osoittaa, että n ei ole alkuluku (jos n ≠ 2). Käyttäen säännöllinen lauseke varten tällainen testi on siis mahdollista, vaikka luonnoton ja melko hidas. Perlissä kirjoitettiin todiste konseptista.
Hämärtymisen erityinen muoto on monikielinen ohjelma, joka tekee saman, kun eri tulkit tai kääntäjät suorittavat sen . On siis olemassa ohjelma, jonka Perl tulkitsee välinpitämättömästi ja joka on käännetty C: hen, ja joka on lisäksi ainoa kiinnostava asia.
Hämärtyminen käyttää usein vähän käytettyjä kielen kulmia ja voi joskus auttaa vikojen havaitsemisessa .
IOCCC ( International Obfuscated C Code Contest ) on vuosittainen C-hämärtymiskilpailu,
Perl Journal on järjestänyt Perlin hämärtymiskilpailut.
Jotkut JAPH-tiedostot ovat hämärtymiä.
Jotkut kielet, kuten C , Perl ja APL, soveltuvat hyvin hämmennykseen. Vuonna nöyrä Ohjelmoija , Edsger Dijkstra on hyvin kovia sanoja rikkaiden kielille jotka helpottavat näitä menetelmiä ja kannattaa vaatimattomampaa kieliä. Larry Wall väittää kuitenkin, että kieli, joka yrittää kieltää huonoja käytäntöjä, kuten hämärtyminen, estäisi myös laillisten ohjelmien, kuten uniline , kirjoittamisen .