NePo
Gruodis 7, 2006

Laužom ir koduojam

Aš parašiau straipsnius apie C# kalbą: Kuriam savo Task Manager, Darbas su XML failais, Laukinių web servisų medžioklė ir Pažintis su WMI. Kiekvieno straipsnio pabaigoje duodavau atsisiųsti sukurtą programą, bet turbūt daugelį iš jūsų sunervindavo, jog neduodavau kodo ir projekto failų. Čia mano logika buvo tokia: kas norės tas iš .exe bylos išgaus tai, ko jam reikia, o kas nežino kaip tai padaryti, vadinasi nevertas. Šiame straipsnyje kaip tik noriu papasakoti, kaip iš .NET sukurto .exe failo pavogti kodą ir kaip nuo to apsisaugoti.

Šiame straipsnyje bus daug paveiksliukų ir mažai teksto.

Pirmiausiai eksperimento atlikimui aš susikūriau naują Visual Studio projektą ir pasirašiau nedidelį rikiavimo algoritmą:
nplk1.jpg

Reiktų atkreipti dėmesį, jog kintamasis A yra vienintelis mano sukurtas globalus kintamasis programoje, kiti yra tik lokalūs mano sukurtoje funkcijoje.

.NET exe failo peržiūrai aš naudoju Reflector programą:
nplk2.jpg
Kaip matote paveikslėlyje programa teisingai atstato globalių kintamųjų pavadinimus, tačiau lokalius pakeičia savais. Tikrai nėra labai malonu, kai galima pasižiūrėti taip lengvai bet kieno sukurtą kodą.
Pastaba: Reflector nėra tikras disasembleris, jis tik leidžia pažiūrėti norimos norimą funkciją, bet neparodo viso projekto kaip vieno ir neleidžia, kažkaip išsisaugoti, nebent nusikopijuoti.

Kaip nuo to apsisaugoti ?
- skirtos užkoduoti kodą, kad jis nebūtų taip lengvai perskaitomas. Iš pradžių norėjau susirasti kokį nors open source arba bent jau nemokamą įrankį, tačiau kaip paaiškėjo tokių nėra. Tuomet nusprendžiau siųstis visus iš eilės ir bandyti kaip jie veikia. Pirmiausia iš bandžiau Assemblur, tačiau man programa išspjaudavo tik kažkokį xml failą, tikrai ne tai, ko tikėjausi. Antroji programa .NET Obfuscator kažką lyg ir darė, bet rezultatai mane nuvylė ir aš jau pradėjau galvoti, jog ieškau ne to tipo programų. Tačiau tuomet aš išbandžiau Goliath .NET obfuscator:
nplk3.jpg
Kaip matote iš paveiksliuko globalūs kintamieji bei funkcijų pavadinimai pakeisti kvadračiukais, t.y. neperskaitomais simboliais, tai jau šiokia tokia pažanga. Tokį efektą aš gavau su standartiniais nustatymais, todėl kiek pareguliavęs nustatymus gavau sekantį vaizdą:
nplk4.jpg
Valio! Reflector nulūžo ir kodo jau nebegalima pažiūrėti.
Pati Goliath .NET programa atrodo taip:
nplk5.jpg
Apakintas sėkmės nutariau išbandyti sekančią programą Skater .NET Obfuscator:
nplk6.jpg
Kaip matėte iš paveiksliuko šita programa pakeičia tik globalių kintamųjų reikšmes, bet koks man skirtumas kaip kintamieji vadinasi? Kodas pakankamai gerai suprantamas ir nežinant originalių pavadinimų.
Toliau ant mano testavimo stalo atsidūrė Spices.Obfuscator. Visų pirma norėčiau atkreipti dėmesį į tai, jog tai ne tik obfuskatorius, bet galingas įrankis turintis daug funkcijų, viena iš jų - tikrasis disasembleris. Spices disasembleris, net tik atkuria kodą, tačiau taip pat sukuria Visual studio projekto ir kitus reikalingus failus:
nplk7.jpg
Deja, kaip matote iš paveiksliuko aš iš tiesų parašiau ne tokį kodą, nors veikimo principas ir tas pats. Kita vertus pats obfuskatorius vėl gi neveikia:
nplk8.jpg
Tiesa, Spices čia elgiasi įdomiai, tarkim jeigu jūs turite int a,b; string c, d, ir button button1; tai Spices juos pakeis į int 0,1; string 0,1; button 0; Tokį kodą be abejonės bus gerokai sunkiau skaityti, tačiau kai išsiaiškinsit, ką daro kiekviena funkcija, manau atsirinkti bus galima.

Kaip jau minėjau ankščiau Goliath .NET , taip gerai užkodavo, jog Reflector buvo priverstas nulūžti, todėl man pasidarė įdomu, o ką gali Spices disasembleris:
nplk10.jpg
Kaip matote, nieko.
Ir paskutinė programa kurią aš išbandžiau XenoCode Enterprise:
nplk11.jpg
Ši programa ypatinga tuo, kad nors kodą kuo puikiausiai galima matyti per Reflector, tačiau .exe failo paleisti man taip ir nepavyko.

Taigi apibendrinant galima pasakyti, jog pavyko realiai užkoduoti tik su Goliath .NET , tačiau reikia prisiminti, jog aš bandžiau tik bandomąsias/demo versijas ir ten nelabai galima keisti standartinius nustatymus, galbūt pilnos versijos veikia geriau, galbūt..

Panašūs straipsniai


“Laužom ir koduojam” komentarų: 1

  1. Cantelmo Marcello

    thanks for your post on my Goliath .NET Obfuscator ;-)

    best regards,
    Marcello

Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.