Läpipääsemätön koodi

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 .

Joitakin historiallisia hämärtymiä

Kokoaja

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 15

Turbo Pascal 3

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

Asentajaa tuottavan kielen käyttö

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,A

Versio, 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.

Erä

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.

Fortran

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.

Algoritminen hämärtyminen

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.

Muu

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 .

Viitteet

  1. "  salaus  " , Le Grand Dictionnaire terminologique , Office québécois de la langue française (käyty 18. lokakuuta 2020 ) .
  2. Ranskan kielen rikastuskomissio , "  scrambling  " , FranceTerme , kulttuuriministeriö (tarkastettu 18. lokakuuta 2020 ) .
  3. "Borland Turbo Pascal 3 .x. Borland Turbo Pascal on Pascal-ohjelmointikielen kääntäjä"
  4. http://www.redbooks.ibm.com/redbooks/pdfs/sg247000.pdf sivu 45: ”  Harvat ihmiset tietävät, että avoin lähdekoodi oli liiketoimintamalli, jolla ohjelmisto alkoi! 1960-luvulla kukaan ei ostanut tietokonetta (tuolloin valtava investointi), joka ei ollut heti käyttövalmis. Valmistajien oli luovutettava ohjelmisto "tapana myydä laitteisto nopeammin" ja tästä syystä ilmaiseksi. Lähdekoodi jaettiin niin, että kuka tahansa voi muuttaa sitä. Tuolloin kukaan ei käyttänyt tai voinut käyttää tietokonetta ilman ohjelmointitaitoja.

    1970-luvulla monien maiden lainsäädäntö päätti, että ohjelmistojen ilmainen luovuttaminen oli epäreilua kilpailua uusille yrityksille, jotka kehittivät kilpailukykyisiä ohjelmistoja ja myivät niitä elantonsa varten. Siksi ohjelmistoja oli laskutettava lailla. Oli edelleen laillista antaa lähde ilmaiseksi vaihtoehtona kaikille, jotka ostivat ohjelmistotuotteen, ja IBM teki juuri tämän.

    1970-luvun lopulla keskitetty tuki loppukäyttäjille alkoi vaikeutua, koska he eivät tienneet, käyttivätkö he vaniljaohjelmistoa (IBM: n objektikoodi) vai IT-ryhmänsä muokkaamia ohjelmistoja. Koska vain hyvin harvat ihmiset tilasivat lähteen, mutta tekivät suurimman osan työstä, IBM: n oli otettava käyttöön vain objektikoodikohtainen (OCO) -jakelutila. Tämä on voinut olla yksi syy siihen, miksi yliopistot alkoivat siirtyä VM / CMS: stä UNIX: iin, koska pelaamiseen oli käytettävissä UNIX-koodi.
     "
  5. lauseke numeron primaalin testaamiseksi .
  6. (in) Perl on C  ' .
  7. (in) C on Perl  " .

Liitteet

Katso myös

Ulkoiset linkit