Vir slike: pixabay.com

Python je jezik na visoki ravni. Čeprav si mnogi od vas mislijo, da to ni programski jezik, ni. Je skriptni jezik. Nič ni blizu strojne kode ali jezika stroja. Kaj je potem tisto, zaradi česar je piton tako zanimiv? Če imate kakršne koli izkušnje s trpinčenjem ali ste se pogovarjali s številnimi strokovnjaki za spletno varnost ali z analizatorji zlonamerne programske opreme, bi vedno predlagali python kot svoj glavni jezik za razvoj zlonamerne uporabe ali izkoriščanja.

Medtem ko imajo nekateri morda raje C, C ++ ali perl, bi osebno glasoval za pythona. Razlog je, da ni uporaben le kot orodje za pisanje programa, ampak ga je koristno tudi razbiti.

Kaj je obratni inženiring?

Reverse Engineering je zelo širok pojem. Tega dejansko ni mogoče definirati s preprostimi sintaksami. Pravi koncept obratnega inženiringa je razčleniti kodo na enostavnejše dele, jo razumeti, spremeniti in izboljšati po lastnem namenu in jo nato znova sestaviti, da ustreza našim potrebam. Da bom nekoliko bolj preprost, naj navedem nekaj izjemno pogostih primerov.

Vzemimo primer mobilnega telefona Android. Proizvajalci ustvarijo zalog Rom in ga prodajo svojim potrošnikom. Toda večino časa vsebuje veliko protipožarne opreme in postane zaostala. Torej, na spletnih mestih, kot sta XDA in androidcentral, obstajajo ljudje, ki inženirju vdrejo v ROM, ga izboljšajo in izboljšajo. En praktičen primer bi bil CyanogenMod Rom.

Toda to je bil samo primer, da bi razumeli, kaj je to. Reverse Engineering ima isti koncept, vendar je njegov način preveč zapleten kot samo spreminjanje ROM-a.

Kompilacija in Python

Če imate izkušnje s Python-om, potem veste, da gre pri pisanju skripta python, da gre za virus, koristno obremenitev, trojanski računalnik ali karkoli drugega, kar bo delovalo le v računalnikih, v katerih je nameščen python. Torej, recimo, napisal sem odličen računalniški trojanec, ki lahko zaobide katerikoli protivirusni virus, in ga začnem nameščati v sistem Windows, če pa v sistemu Windows ni nameščen tolmač python, potem to ne bo delovalo. Torej je treba sestaviti vsako datoteko napisanega python skripta v izvršljivo datoteko in jo nato namestiti v sistem Windows.

Povratne inženirske izvedbe Windows

Zdaj veste, da moramo za izdelavo oken sestaviti python skripte, morate tudi vedeti, da mora obstajati prevajalnik, ki pretvori python skripte v izvedljiv. Da, obstaja. Ime mu je Py2exe. Py2exe je preprost namestitveni program, ki pretvori skripte python v samostojne programe Windows. Zdaj obstaja še eno orodje, ki pretvori izvršljive datoteke Windows, napisane v pythonu, nazaj v skripte python. Ime mu je Pyinstaller Exe Rebuilder.

Obnovitveni program Pyinstaller exe je orodje za ponovno prevajanje / povratni izvedbeni program, ki ga je ustvaril pyinstaller, ne da bi imel dostop do izhodne kode. Ko zaženete EXE - je nepopoln v pomnilniku. To vključuje datoteke .pyc (koda python, ki se pretvori v bajt kodo). V bistvu orodja, kot sta pyinstaller in py2exe, so knjižnice paketov in odvisnosti skupaj, tako da lahko zaženete samostojni EXE, ne da bi jih morali prenesti ali pripraviti stroj s tolmačem python.

Obstaja tudi še en priročnik, s katerim boste zelo blizu izhodne kode. Ime je PyRetic, kar pomeni, da je Reverse Engineer Obfuscated Python Bytecode. Ta orodje vam omogoča, da predmet v spomin vzamete nazaj k izvorni kodi, ne da bi morali imeti dostop do bajt kode neposredno na disku. To je lahko koristno, če so aplikacije, ki so na disku, zasedene na enega od mnogih načinov.

Priporočeni tečaji

  • Izobraževanje o Java hibernaciji
  • Spletno usposabljanje na spletu v Java Spring
  • WordPress program
  • Izobraževalni trening v Rubyju

Reverse Engineering Trdi način

Zdaj je zgornji del enostavno razumeti in to praktično storite, ko ste seznanjeni z osnovnim znanjem pythona. Ampak to ni vedno tako. V skriptu python včasih nimate nobene dokumentacije ali komentarjev, datoteke pa lahko tudi sami razumete. Zdaj je na tem delu super knjiga, vendar se na to ne bom veliko osredotočal.

Ime knjige je "Učinkovito delo s podedovano kodo". Knjiga je neodvisna od pythona ali katerega koli drugega jezika in vam bo dala idejo o obratnem inženiringu v skoraj katerem koli jeziku. Ko poskušate razumeti del kode, je ključni poudarek razlog, zakaj ga želite razumeti.

Ne glede na to, ali želite spremeniti kodo inženirja, da jo spremenite, ali jo prenesti, bi bil pristop za oboje povsem drugačen. Torej je določanje starejše kode z baterijami in skeniranjem testov ter sledenjem / beleženjem ključna pot na dolgi, trdi slogi do razumevanja in spreminjanja varno in odgovorno.

Orodja za obratno inženirstvo

Zdaj obstaja še ena metoda za lažjo uporabo, ki ji lahko sledite skupaj z zgornjimi koraki. Obstaja spletno mesto, imenovano Epydoc. Na tej strani bo preveril kodo in ustvaril nekaj dokumentacije zanjo. Rezultat ne bo tako dober kot izvirna dokumentacija, vendar vam bo vsaj pokazal, kako natančno deluje. In s tem lahko začnete pisati svojo dokumentacijo in po delnem pisanju dokumenta lahko ponovno ustvarite preostali delni dokument s spletnega mesta za preostali del.

Za analizo kode lahko uporabite celo orodje IDE. To vam ponavadi dodeli kodo, še pomembneje pa je, da lahko le kliknete na spremenljivko, da vidite, od kod prihaja. To resnično pospeši stvari, ko želite razumeti kod drugih ljudi.

Prav tako se morate naučiti razhroščevalca. V zapletenih delih kode boste morali stopiti skozi njih v razhroščevalnik, da vidite, kaj koda dejansko počne. Pythons pdb deluje, vendar veliko IDE-jev ima integrirane naprave za odpravljanje napak, kar omogoča lažje odpravljanje napak. Za ustvarjanje UML diagramov sta koristna tudi PyReverse iz Logilaba in PyNSource od Andyja Bulka.

Obstaja postopek za izdelavo modela razreda UML iz danega vnosa izvorne kode. S tem lahko spremenite posnetek posnetka svoje kode v razrede UML in v nadaljevanju diagram razredov obrazcev. S tem, ko vsebino kode vstavlja v vizualni model UML, to pomaga programerjem ali programskim inženirjem, da pregledajo izvedbo, prepoznajo morebitne napake ali pomanjkljivosti in iščejo morebitne izboljšave.

Razen tega lahko razvijalci obrnejo knjižnico kod kot razrede UML in z njimi konstruirajo model, kot da bi obrnili okvir splošne zbirke in razvili svoj lastni okvir s podaljšanjem splošnega. V tem poglavju bomo prešli v trenutek preobrata Pythona.

Predmeti in temeljni premazi

Če želite popolnoma razumeti notranje delovanje Pythona, se morate najprej seznaniti s tem, kako Python sestavlja in izvaja kodo. Ko je koda sestavljena v Python-u, je rezultat kodni objekt. Objekt kode je nespremenljiv in vsebuje vse informacije, ki jih tolmač potrebuje za izvajanje kode. Navod bajtne kode je predstavljen kot en bajtna vrednost kode, ki ji po potrebi sledijo argumenti. Podatki se z indeksom sklicujejo na eno od drugih lastnosti predmeta kode.

Vrstica kod bajta izgleda tako:

\ x64 \ x02 \ x64 \ x08 \ x66 \ x02

Bajt koda Python deluje na nizu elementov. Bolj podjetna razširitev bi bila poskus kopiranja bajtne kode nazaj v berljivo izvorno kodo Python, skupaj z imeni predmetov in funkcij. Python koda se lahko distribuira v binarni obliki z uporabo maršal modula. Ta modul zagotavlja možnost serijskega in deserializiranja kodnih predmetov s pomočjo funkcije shranjevanja in nalaganja.

Najpogosteje srečan binarni format je sestavljena datoteka Python (.pyc), ki vsebuje čarobno številko, časovni žig in serijski objekt. To vrsto datotek ponavadi interpretor Python kot predpomnilnik sestavljenega predmeta, da ne bi bilo treba večkrat razčleniti vira. Te tehnike temeljijo na enostavnosti dostopa do bajtnih kod in informacij o tipih.

Z bajtno kodo predmeta objekta lahko logiko kode spremenite ali celo v celoti zamenjate. Pridobivanje informacij o tipih lahko pomaga pri razumevanju oblikovanja programa in prepoznavanju funkcij in namenov objekta.

Zakrivanje in utrjevanje kod bajta aplikacije bo vedno dirka med izvajalci in tistimi, ki jih želijo prebiti. Za poskus obrambe pred iskanjem bajtne kode je prvi logični korak do rešitve prevajalnega izvajalnega časa.

Lastnosti kodnega predmeta se lahko shranijo v katero koli podpisano, šifrirano ali kako drugače prikrito obliko, ki je med izvajanjem odstranjena ali prevedena in uporabljena za instanciranje novega predmeta. Lahko bi celo spremenili način iskanja spremenljivk v okviru tolmača za prikrivanje informacij o poimenovanju. Z dodajanjem prevajalskega sloja med iskanjem dejanskih imen in imen v izvorni kodi lahko razvijalec še dodatno ublaži poskuse prevračanja.

Zaključek

Zdaj, ko boste prebrali vse to, boste morda čutili potrebo po preizkusu nekaj cestnin. Torej, tukaj je nekaj orodij, ki vam lahko pomagajo obrniti inženir v svojo kodo python:

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

Vse to so odlični deli kode, toda tisto, kar jih resnično izstopa, je, če jih uporabljamo skupaj. Upoštevajte, da to nikakor ni popoln seznam, samo tisti, ki jih najbolj uporabljam in menim, kažejo, kako lahko fleksibilnost pythona naredi tako zapleteno nalogo, kot je vzvratni inženiring, obvladljiva.

Priporočeni članki

Tukaj je nekaj člankov, ki vam bodo pomagali do podrobnosti o obratnem inženiringu s Python-om, zato pojdite po povezavi.

  1. 25 najbolj neverjetnih vprašanj in odgovorov na Python Intervju
  2. Začnite s Python in Django za spletni razvoj
  3. Kakšne so prednosti in omejitve uporabe Pythona?
  4. Kariera v Pythonu
  5. Orodja za obratno inženirstvo