Hämärtäminen (ohjelmisto)

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 10. helmikuuta 2019 tarkistetusta versiosta . tarkastukset vaativat 19 muokkausta .

Obfuskaatio ( latinan  kielestä obfuscare  - epäselväksi, epäselväksi; ja englanniksi  obfuscate  - tehdä epäselväksi, hämmentäväksi, hämmentäväksi) tai koodin hämärtäminen - ohjelman lähdekoodin tai suoritettavan koodin  tuominen muotoon, joka säilyttää sen toiminnallisuuden, mutta tekee siitä vaikea analysoida, ymmärtää työn algoritmeja ja muutoksia purkamisen aikana .

Koodin "hämärtäminen" voidaan suorittaa sekä ohjelmakomponenttien nimien että ohjelmaalgoritmien tasolla . Hämmentyneen kokoonpanotekstin luomiseen voidaan käyttää erikoistuneita kääntäjiä , jotka käyttävät ohjelman suoritusympäristön ei-ilmeisiä tai dokumentoimattomia ominaisuuksia . On myös erikoisohjelmia, jotka tuottavat hämärtymistä, nimeltään obfuscators ( eng. obfuscator ).  

Hämäräkohteet

Vaikeus ohjelmien purkamisessa / virheenkorjauksessa ja tutkimisessa toiminnallisuuden löytämiseksi;

Vaikeus purkaa ohjelmistoja , joilla estetään käänteinen suunnittelu tai DRM- ja lisenssivarmennusjärjestelmien kiertäminen ;

Vaikeus murtaa ohjelmisto ;

Ohjelman optimointi käynnissä olevan koodin koon pienentämiseksi ja (jos käytetään kääntämätöntä kieltä) työn nopeuttamiseksi;

Kielen ei-ilmeisten mahdollisuuksien ja ohjelmoijan pätevyyden osoittaminen (jos se tehdään manuaalisesti eikä työkaluilla);

Tekniikka

Lähdetasolla

JavaScriptissä , VBScriptissä ja vastaavissa komentosarjakielissä ohjelman lähdekoodi on käyttäjän saatavilla . Tässä tapauksessa tekstin muotoilu ja nimien korvaaminen voivat tehdä tekstistä vähemmän luettavan.

Lähdeteksti C -kielellä :

int COUNT = 100 ; kelluva TAX_RATE = 0,2 ; for ( int i = 0 ; i < COUNT ; i ++ ) { vero [ i ] = alkuperäinen hinta [ i ] * TAX_RATE ; hinta [ i ] = alkuperäinen hinta [ i ] + alv [ i ]; }

Koodi obfusoinnin jälkeen [1] :

for ( int a = 0 ; a < 100 ; a ++ ) { b [ a ] ​​= c [ a ] ​​* 0,2 ; d [ a ] ​​= c [ a ] ​​+ b [ a ];}

Monimutkaisempi esimerkki:

char * M , A , Z , E = 40 , J [ 40 ], T [ 40 ]; main ( C ){ for ( * J = A = scanf ( M = "%d" & C ) ; --E ; _ J [ E ] = T [ E ] = E ) printf ( "._" ); for (;( A -= Z =! Z ) || ( printf ( " \n |" ) , A = 39 , C -- ) ; Z || printf ( M )) M [ Z ] = Z [ A - ( E = A [ J - Z ]) &&! C & A == T [ A ] | 6 << 27 < rand () ||! C &! Z ? J [ T [ E ] = T [ A ]] = E , J [ T [ A ] = A - Z ] = A , "_." : "|" ];}

Konekooditasolla

Yleensä konekoodin tason hämärtäminen vähentää suoritusnopeutta ja lisää vastaavasti ohjelman suoritusaikaa. Siksi sitä käytetään ohjelman tietoturvakriittisissä , mutta ei nopeuden kannalta kriittisissä paikoissa, kuten rekisteröintikoodin tarkistamisessa [2] .

Yksinkertaisin tapa hämärtää konekoodi  on lisätä siihen ei-aktiivisia rakenteita (kuten or ax, ax).

Keskitason kooditasolla

Toisin kuin perinteiset ohjelmointikielet, kuten C++ tai Pascal , jotka kääntävät konekoodiksi , Java- , NetP- ja .NET -alustakielet kääntävät lähdekoodin välikoodiksi (tavukoodiksi ) , joka sisältää tarpeeksi tietoa lähdekoodin asianmukaiseen rekonstruoimiseen. Tästä syystä näille kielille käytetään välikoodin hämärtämistä.

Tapaaminen

Monimutkaista kooditutkimusta

Kuten edellä mainittiin, Java- ja .NET-ohjelmien purkaminen on melko helppoa. Tässä tapauksessa obfuskaattori tarjoaa korvaamatonta apua niille, jotka haluavat piilottaa koodinsa uteliailta katseilta. Usein dekompiloitua koodia ei käännetä uudelleen obfuskoinnin jälkeen.

HTML - hämärtäminen auttaa roskapostittajia : sähköpostiohjelmassa , joka pystyy näyttämään HTML:n, teksti luetaan, mutta alkuperäistä HTML -tiedostoa käsittelevä roskapostisuodatin välittää ei-toivotun viestin tunnistamatta siinä olevaa kiellettyä riviä.

Yksinkertaisin esimerkki obfusoidusta HTML:stä:

< b > Mash </ b >< b > ina </ b >

Katselessaan käyttäjä näkee sanan " Machine ", kun taas lähdekoodissa se on eritelty ja se nähdään kahtena erillisenä sanana.

Optimointi

Tulkituissa kielissä hämärä koodi vie vähemmän tilaa kuin lähdekoodi ja toimii usein nopeammin kuin lähdekoodi. Nykyaikaiset obfuskaattorit myös korvaavat vakiot numeroilla, optimoivat taulukon alustuskoodia ja tekevät muita optimointeja, jotka ovat ongelmallisia tai mahdottomia lähdetasolla.

Koon pienentämisen ongelma on tärkeä esimerkiksi ohjelmoitaessa matkapuhelimia J2ME : ssä , jossa ohjelman koko on erittäin rajoitettu. JavaScript-hämärtäminen pienentää HTML - tiedostojen kokoa ja siten nopeuttaa latausta.

Omien ohjelmistojen suojaaminen

Lähdekoodin suojaaminen voittoa tavoittelevalta muokkaamiselta.

Haitat

Koodin joustavuuden menetys

Obfuskaatiokoodista voi tulla enemmän alusta- tai kääntäjäriippuvainen.

Virheenkorjausvaikeudet _

Obfuskaattori estää ulkopuolista saamasta selvää, mitä koodi tekee, mutta estää myös kehittäjää tekemästä virheenkorjausta. Virheenkorjauksen aikana sinun on sammutettava obfuskaattori.

Riittämätön suojaus

Vaikka hämärtäminen auttaa tekemään hajautetusta järjestelmästä turvallisemman, sen ei pitäisi rajoittua siihen . Hämärtäminen on turvaa epäselvyyden kautta . Mikään olemassa olevista obfuskaattorista ei takaa purkamisen monimutkaisuutta eikä tarjoa turvallisuutta nykyaikaisten salausjärjestelmien tasolla . On melko todennäköistä, että tehokas suoja on mahdotonta (ainakin tietyssä ratkaistavissa olevien ongelmien luokassa).

Virheitä obfuskaattorissa

Nykyaikainen obfuskaattori on monimutkainen ohjelmistopaketti. Huolimatta huolellisesta suunnittelusta ja testauksesta usein vikoja hiipii hämärälaitteita. Joten on nollasta poikkeava mahdollisuus, että obfuskaattorin läpi kulkeva koodi ei toimi ollenkaan. Ja mitä monimutkaisempi ohjelma kehitetään, sitä suurempi tämä todennäköisyys.

Luokan kutsuminen nimellä

Useimmat keskitason koodikielet voivat luoda tai kutsua objekteja luokkanimien perusteella . Nykyaikaisten obfuskaattorien avulla voit säästää nämä luokat uudelleennimeämiseltä, mutta tällaiset rajoitukset vähentävät ohjelmien joustavuutta.

Katso myös

Muistiinpanot

  1. Tässä tapauksessa sitä voidaan kutsua pienentämiseksi
  2. 10.2. Rekisteröintikoodien tarkistusmenetelmät . www.rfcmd.ru Haettu 2. helmikuuta 2016. Arkistoitu alkuperäisestä 12. joulukuuta 2016.

Kirjallisuus

  • Boytsev O. M. Suojaa tietokoneesi 100 % viruksilta ja hakkereilta. - Peter, 2008. - ISBN 9785388003478 .

Linkit