Pöördprojekteerimine (tarkvara)

**Pöördprojekteerimine** on tarkvara masinkoodi või muu käitatava koodi analüüsimine selle tööpõhimõtete või sisemise loogika tuvastamiseks. Pöördprojekteerimist kasutatakse vana tarkvara paikamiseks ja ühilduvuse loomiseks, pahavara analüüsimiseks või kuritahtliku koodi leidmiseks, kuid ka kopeerimiskaitse vältimiseks või tarkvara turvaaukude leidmiseks.

## Tööriistad

### Disassembler
Disassembler on arvutiprogramm, mis tõlgib masinkoodi assemblerkeelde, olles seega assembleri vastand. Korrektsele masinkoodile vastab alati vähemalt üks assemblerkeeles kood, seega defektideta disassembleriga peaks saama analüüsida kõiki programme, kuid varieeruva käsupikkusega käsustikel võib kavalalt konstrueeritud koodi puhul olla keeruline, kui leidub hüppeid käsu 'keskele'.

Disassembler on tõhus pisikese koodijupi väga täpseks edasiandmiseks, kuid suurema tarkvaraprojekti analüüsimine vaid disassembleri abil on tülikas.  

### Dekompilaator
Dekompilaator on programm, mis teisendab kompileeritud koodi kõrgtaseme lähtekoodiks, olles seega kompilaatori vastand. Selline kood on palju lihtsamini loetav, kuid dekompilaatori ülesanne on disassembleri omast oluliselt keerulisem, sest et lähtekoodi ja masinkoodi vahel puudub üksühene seos. Õige väljund on vähem defineeritud – mida idiomaatilisemat koodi see väljastab, seda kergemini loetav see on.

Kõige populaarsem masinkoodi dekompilaator elukutseliste pöördprojekteerijate seas on IDA Pro, mis on tasuline tarkvara. 

2019. aastal avaldas NSA oma dekompilaatori Ghidra ja selle lähtekoodi.

### Silur
Silur on arendustööriist, mida kasutatakse programmi samm- või osahaaval käitamiseks ning selle oleku (näiteks mälu ja registrite) jälgimiseks, mille abil saab uuritava programmi tööd analüüsida dünaamiliselt, mis teeb koodi huvitava osa leidmise lihtsamaks ning enamasti võimaldab koodi ka käitamise ajal disassembleerida ja muuta. Dünaamiline analüüs on kasulik tehnika eriti näiteks siis, kui programm dekrüpteerib ennast mälus.
## Rakendused

### Pahavara analüüsimine
Pahavara analüüsitakse, et tuvastada selle funktsionaalsus, päritolu, ohtlikkus ja seotud juhtserverid. Eduka analüüsi tulemusena võib olla võimalik tarkvara kahjutuks teha, näiteks on võimalus, et autoriteedid võtavad juhtserverid või nende domeeniaadressid enda kontrolli alla. Ka on mõnikord võimalik sel viisil tuvastada pahavara autor.

### Koopiakaitse vältimine
Koopiakaitse vältimine ehk kräkkimine on kommertsvara analüüsimine või muutmine litsentsipiirangute vältimiseks, näiteks piraattarkvara levitamise eesmärgil. 

### Turvaaukude otsimine
Pöördprojekteeritud tarkvarast saab otsida turvaauke, kas äriloogikast või mäluhaldusest – viimasest kõige levinum ärakasutatav tarkvaraviga on puhvri ületäitumine. Turvaauke otsivad nii "mustakaabulised" kui ka "valgekaabulised" häkkerid – esimesed nende ärakasutamiseks või müümiseks ja teised, et teavitada arendajat turvaaugust, et too selle parandaks. Suuremates tarkvaraprojektides on sageli kasutusel puugipreemiajaht, kus vea leidjat premeeritakse tunnustuse ja rahalise tasuga.

## Pöördprojekteerimise tõkestamine

### Sogastamine
Tarkvara sogastamine on selle muutmine nii, et tulemuse mõistmine on inimeste jaoks keeruline. Sogastamistehnikad põhinevad käitatava koodi teisendamises nii, et tulemus on semantiliselt sama, kuid raskemini loetav. 

### Silumisvastased meetodid
Et vältida programmi töö dünaamilist analüüsi siluri abil, võivad programmid vältida programmi olulise osa käitamisest, kui tuvastatakse, et silur on küljes. Meetodid selle tuvastamiseks põhinevad kas otseselt käituskeskkonna silumisliideselt küsimisel, programmi koodi muudatuste tuvastamisel (katkestuspunktid on sageli teostatud programmi ajutise muutmisega) või silumisest põhjustatud keskkonnamuudatuste tuvastamisel.

## Legaalsus

### Euroopa Liidus
Euroopa Liidus sätestab pöördprojekteerimist direktiiv 2009/24/EÜ.

Selle direktiivi kohaselt on tarkvara autoriõiguse omanikul ainuõigus lubada tarkvara kopeerimist, tõlkimist, muutmist või avaldamist. Erandina on lubatud muuta tarkvara vigade parandamiseks ning dekompileerida, kui see on vajalik ühilduvuse tagamiseks muu seadme või tarkvaraga, kuid sellist dekompileerimise tulemust ei tohi kasutada muul eesmärgil.

### Ameerika Ühendriikides
Ameerika Ühendriikides on pöördprojekteerimine ühilduse tagamiseks lubatud, kuid kohtupraktikas võivad lepingutingimused seda keelata, mis juhul pöördprojekteerimist loetakse lepingurikkumiseks.

## Viited