Izvor slike: pixabay.com

Python je jezik visoke razine. Iako mnogi od vas mogu misliti, to kao programski jezik, nije. To je jezik skripta. Nigdje se ne dolazi do strojnog koda ili jezika stroja. Onda što je python toliko zanimljiv? Ako imate iskustva sa ubijanjem rublja ili ste razgovarali s mnogim stručnjacima za web-sigurnost ili analizatorima zlonamjernog softvera, oni bi uvijek predložili python kao njihov primarni jezik za razvoj zlonamjernih problema ili iskorištavanja.

Dok neki ljudi možda preferiraju C, C ++ ili perl, osobno bih glasao za pythona. Razlog što je koristan ne samo kao alat za pisanje programa, već je i korisno razbiti ga.

Što je obrnuti inženjering?

Reverse Engineering je vrlo širok pojam. Ne možete ga zapravo definirati jednostavnim sintaksama. Ispravan koncept obrnutog inženjeringa je razbiti kôd na jednostavnije dijelove, razumjeti ga, izmijeniti i poboljšati prema vlastitoj namjeni, a zatim ga ponovno sastaviti kako bi odgovarao našim potrebama. Da pojednostavim, dopustite mi da vam dam nekoliko krajnjih uobičajenih primjera.

Uzmimo primjer Android mobitela. Proizvođači stvaraju zalihe i prodaju ga svojim potrošačima. Ali većinom puta sadrži puno gnoja i postaje zaostajan. Dakle, postoje ljudi na web stranicama poput XDA i androidcentral koji inženjerima obrnu svoj put u ROM, poboljšaju ga i učine zaostatnim. Jedan praktični primjer bio bi CyanogenMod Rom.

Ali ovo je bio samo primjer da shvatite što je to. Reverse Engineering ima isti koncept, ali njegov je način previše kompliciran da je samo modificiranje ROM-a.

Kompilacija i Python

Ako imate iskustva s Python-om, onda znate da kod pisanja skripte python-a može biti virus, korisni teret, trojanac ili bilo koja druga datoteka, on će raditi samo na računalima u kojima je python instaliran. Dakle, recimo, napisao sam izvrstan računalni trojanac koji može zaobići bilo koji antivirusni program, i započinjem ga implementirati u Windows sustav, ali ako Windows sustav nema instaliran tumač python-a, onda to neće raditi. Dakle, treba sastaviti svaku datoteku pisanog python skripta u izvršnu datoteku i zatim je implementirati u Windows sustav.

Obrnuti inženjering Windows Izvedbe

Sada znate da moramo sastaviti python skripte za pokretanje u sustavu Windows, morate također znati da mora postojati prevodilac, koji python skripte pretvara u izvršnu datoteku. Da tamo je. Ime mu je Py2exe. Py2exe je jednostavan instalacijski program koji pretvara python skripte u samostalne Windows programe. Sada postoji i drugi alat koji pretvara izvršne datoteke u sustavu Windows napisane u pythonu natrag u skripte python-a. Ime mu je Pyinstaller Exe Rebuilder.

Obnovitelj programa Pyinstaller exe alat je za prekompoliranje / preokretanje izvršenih datoteka koje je generirao pyinstaller bez pristupa izvornom kodu. Kada pokrenete EXE - on je nezapažen u memoriji. To uključuje .pyc datoteke (python kod koji se pretvara u bajt kod). U osnovi, alati poput pyinstallera i py2exe čine knjižnice paketa i ovisnosti sve zajedno, tako da možete pokrenuti samostalni EXE bez potrebe za preuzimanjem ili pripremanjem stroja s python interpretatorom.

Tu je i drugi alat koji vas vodi do vrlo blizu izvornom kodu. Naziv je PyRetic, što znači Reverse Engineer Obfuscated Python Bytecode. Ovaj alat vam omogućuje da vratite objekt u memoriju natrag na izvorni kôd, bez potrebe za pristupom bajt kodu izravno na disku. Ovo može biti korisno ako su pyc-ovi programa na disku zamršeni na jedan od mnogih načina.

Preporučeni tečajevi

  • Trening na Java hibernaciji
  • Obuka za online certificiranje u Java proljeću
  • WordPress program
  • Obuka za certificiranje u Rubyju

Obrnuti inženjering Na teži način

Sada je gornji dio lako razumjeti i praktično to učiniti kada steknete osnovna znanja iz pythona. Ali to nije uvijek slučaj. Ponekad nemate nikakvu dokumentaciju ili komentare u skriptu python-a, a postoje i datoteke koje mogu i sami razumjeti. Sada postoji sjajna knjiga o ovom dijelu, ali neću se mnogo koncentrirati na to.

Naziv knjige je „Učinkovit rad sa naslijeđenim kodom“. Knjiga je neovisna o pythonu ili bilo kojem drugom jeziku i dat će vam ideju za obrnuti inženjering na gotovo bilo kojem jeziku. Kad pokušavate razumjeti dio koda, ključni fokus je razlog zašto ga želite razumjeti.

Bez obzira na to želite li obrnuti inženjerski kod da biste ga izmijenili ili ga priključili, pristup za oboje bi bio sasvim drugačiji. Dakle, pronalaženje naslijeđenog koda, s baterijama i skelama testova i pronalaženjem / zapisivanjem, ključan je put dugog, tvrdog sloga do razumijevanja i izmjena sigurno i odgovorno.

Obrnuti inženjerski alati

Sada postoji još jedna metoda da se malo olakša, a koju možete slijediti slijedom gore navedenih koraka. Postoji stranica koja se zove Epydoc. Na ovom mjestu će provjeriti kod i stvoriti nešto dokumentacije za njega. Rezultat neće biti tako dobar kao izvorna dokumentacija, ali barem će vam dati ideju kako tačno funkcionira. Čineći to, možete početi pisati vlastitu dokumentaciju, a nakon što djelomično napišete dokument, možete ponovno stvoriti preostali djelomični dokument s web mjesta za preostali dio.

Možete čak koristiti IDE alat za analizu koda. To vam obično daje dovršavanje koda, ali što je još važnije u ovom slučaju, on omogućuje samo ctrl-klik na varijablu da biste vidjeli odakle dolazi. Ovo stvarno ubrzava stvari kada želite razumjeti kod drugih naroda.

Također, morate naučiti ispravljanje pogrešaka. U zapetim dijelovima koda morat ćete ih zakoračiti u program za uklanjanje pogrešaka da biste vidjeli što kod zapravo radi. Pythons pdb funkcionira, ali mnogi IDE-ovi imaju integrirane programe za uklanjanje pogrešaka, što olakšavaju uklanjanje pogrešaka. PyReverse iz Logilaba i PyNSource od Andyja Bulka korisni su i za stvaranje UML dijagrama.

Postoji postupak izrade modela klase UML iz zadanog ulaza izvornog koda. S ovim možete preokrenuti kratki snimak baze koda u UML klase i dalje oblikovati dijagram klasa. Uvođenjem sadržaja koda u vizualni UML model ovo pomaže programerima ili softverskim inženjerima da pregledaju implementaciju, prepoznaju potencijalne pogreške ili nedostatke i potraže moguća poboljšanja.

Osim ovoga, programeri mogu obrnuti biblioteku koda kao UML klase i s njima konstruirati model, poput preokrenuti okvir generičke kolekcije i razviti vlastiti okvir tako što će proširiti generički. U ovom ćemo poglavlju proći kroz trenutačni preokret Pythona.

Predmeti i temeljni premazi

Da biste u potpunosti razumjeli unutrašnje funkcioniranje Pythona, treba se najprije upoznati s načinom na koji Python sastavlja i izvršava kôd. Kad se kôd sastavi u Python-u, rezultat je objekt kod. Objekt koda je nepromjenjiv i sadrži sve informacije koje prevoditelj treba za pokretanje koda. Naputak bajtnog koda predstavljena je kao jednosatna vrijednost bajta, a po potrebi i argumenti. Podaci se pozivaju indeksom na jedno od drugih svojstava kodnog objekta.

Niz bajtova kodova izgleda ovako:

\ x64 \ X02 \ x64 \ x08 \ x66 \ X02

Python byte kod djeluje na hrpi stavki. Poduzetnije proširenje bio bi pokušaj dekompiranja bajtnog koda natrag u čitljiv izvorni kod Python-a, zajedno s imenima objekata i funkcija. Python kod se može distribuirati u binarnom obliku korištenjem maršal modula. Ovaj modul pruža mogućnost serializacije i deserializacije kodnih objekata pomoću funkcije pohrane i učitavanja.

Najčešće se susreće binarni format sastavljena datoteka Python (.pyc) koja sadrži magični broj, vremensku oznaku i serializirani objekt. Ovu vrstu datoteke interpretator Python obično proizvodi kao predmemoriju kompiliranog objekta kako bi se izbjeglo višestruko raščlanjivanje izvora. Ove se tehnike oslanjaju na jednostavnost pristupa bajtnim kodovima i vrstama informacija.

Uz pomoć bajtova kod objekta objekta, logika koda može se izmijeniti ili čak potpuno zamijeniti. Izvlačenje informacija o tipu može pomoći u razumijevanju dizajna programa i identificiranju funkcija i svrhe objekta.

Zamagljivanje i otvrdnjavanje bajtova kod aplikacije uvijek će biti utrka između implementatora i onih koji ga žele razbiti. Za pokušaj obrane od pretraživanja bajtova, prvi je logični korak prema rješenju za prijevod vremena izvođenja.

Svojstva objekta koda mogu se pohraniti u bilo koji potpisan, šifriran ili neki drugi način zakrivljenog formata koji se defrustrira ili prevodi tijekom vremena izvođenja i koristi se za instanciranje novog objekta. Moglo bi se čak i promijeniti način pretraživanja varijable imena unutar tumača za omalovažavanje informacija o imenovanju. Dodavanjem sloja za prijevod između pretraživanja stvarnih imena i imena unutar izvornog koda programer može dodatno ublažiti pokušaje preokreta.

Zaključak

Nakon što pročitate sve ovo, možda ćete osjetiti potrebu da odete i eksperimentirate s nekim cestarinama. Dakle, evo nekoliko alata koji vam mogu pomoći da obratite inženjeru svoj put u vaš python kod:

  1. Paimei
  1. Sulley
  1. Kolekcija Carrera
  1. PyEmu
  1. IDAPython
  1. ImmDbg

Sve su to sjajni dijelovi koda, no ono što ih zaista čini izvanrednim jest kada se koriste zajedno. Imajte na umu da ovo nikako nije potpuni popis, samo oni koje najviše koristim i misle kako pokazuju kako fleksibilnost pythona može učiniti tako složen zadatak kao što je obrnuti inženjering pod kontrolom.

Preporučeni članci

Evo nekoliko članaka koji će vam pomoći da saznate više detalja o obrnutom inženjeringu s Python-om, pa samo prođite vezu.

  1. 25 najneverovatnijih pitanja i odgovora na Python Intervju
  2. Započnite s Python i Django za web razvoj
  3. Koje su prednosti i ograničenja upotrebe Pythona?
  4. Karijere u Pythonu
  5. Obrnuti inženjerski alati

Kategorija: