Zdroj obrázka: pixabay.com

Python je jazyk na vysokej úrovni. Aj keď si mnohí z vás môžu myslieť, že to nie je programovací jazyk. Je to skriptovací jazyk. Nikde sa nepribližuje strojovému kódu alebo strojovému jazyku. Čo robí Pythona tak zaujímavým? Ak máte nejaké skúsenosti s odhaľovaním alebo ste sa zhovárali s mnohými odborníkmi na webovú bezpečnosť alebo s analyzátormi škodlivého softvéru, vždy by navrhli ako primárny jazyk python na rozvoj malwaru alebo zneužívania.

Zatiaľ čo niektorí ľudia uprednostňujú C, C ++ alebo perl, osobne by som hlasoval za python. Pretože je nielen užitočný ako nástroj na písanie programu, je tiež užitočné ho prerušiť.

Čo je reverzné inžinierstvo?

Reverzné inžinierstvo je veľmi široký koncept. Jeden nemôže vlastne definovať s jednoduchými syntaxami. Správnym konceptom reverzného inžinierstva je rozčleniť kód na jednoduchšie časti, porozumieť mu, upraviť ho a vylepšiť podľa nášho vlastného účelu a potom ho znova zostaviť, aby vyhovoval našim potrebám. Aby som to trochu zjednodušil, dovoľte mi uviesť niekoľko extrémne bežných príkladov.

Urobme príklad mobilného telefónu s Androidom. Výrobcovia vytvoria skladové zásoby a predajú ich svojim zákazníkom. Ale vo väčšine prípadov obsahuje veľa kvetináča a stáva sa labilným. Takže na weboch ako XDA a androidcentral sú ľudia, ktorí spätne navrhujú cestu do ROM, vylepšujú ju a robia to dôkazom oneskorenia. Jedným z praktických príkladov by bol CyanogenMod Rom.

Ale to bol len príklad, ktorý vám pomôže pochopiť, o čo ide. Reverse Engineering má rovnaký koncept, ale je príliš komplikovaný na to, aby iba modifikoval ROM.

Kompilácia a Python

Ak máte skúsenosti s Pythonom, potom viete, že pri písaní pythonového skriptu to môže byť vírus, užitočné zaťaženie, trójsky kôň alebo čokoľvek, čo je to súbor, bude fungovať iba v počítačoch, v ktorých je nainštalovaný python. Takže povedzme, napísal som vynikajúci počítačový trójsky kôň, ktorý dokáže obísť akýkoľvek antivírus, a začnem ho zavádzať do systému Windows, ale ak systém Windows nemá nainštalovaný pythonový tlmočník, potom to nebude fungovať. Preto je potrebné skompilovať každý súbor napísaného python skriptu do spustiteľného súboru a potom ho nasadiť do systému Windows.

Spustiteľné súbory systému Windows pre reverzné inžinierstvo

Teraz viete, že potrebujeme zostaviť pythonové skripty, aby fungovali v systéme Windows, musíte tiež vedieť, že musí existovať kompilátor, ktorý prevádza pythonové skripty na spustiteľný súbor. Áno, existuje. Jeho meno je Py2exe. Py2exe je jednoduchý inštalátor, ktorý prevádza pythonové skripty do samostatných programov Windows. Teraz existuje aj iný nástroj, ktorý prevádza spustiteľné súbory systému Windows napísané v jazyku Python späť na pythonové skripty. Jeho meno je Pyinstaller Exe Rebuilder.

Znovu zostavovač programu Pyinstaller exe je nástroj na zkompilovanie / spätné vygenerovanie spustiteľných súborov generovaných programom pyinstaller bez prístupu k zdrojovému kódu. Keď spustíte EXE - nie je zabalený v pamäti. Patria sem súbory .pyc (python kód, ktorý sa prevádza na bytecode). V zásade to, čo robia nástroje, ako sú pyinstaller a py2exe, sú knižnice balíkov a závislosti, takže môžete spustiť samostatný súbor EXE bez toho, aby ste ich museli sťahovať alebo pripraviť stroj pomocou tlmočníka python.

K dispozícii je tiež ďalšia sada nástrojov, ktorá vás priblíži k zdrojovému kódu. Názov je PyRetic, čo predstavuje skratku Python Bytecode so spätnou väzbou. Táto sada nástrojov vám umožňuje vziať objekt v pamäti späť do zdrojového kódu bez potreby prístupu k bajtkódu priamo na disku. To môže byť užitočné, ak sú aplikácie pyc na disku zmätené jedným z mnohých spôsobov.

Odporúčané kurzy

  • Tréning v režime Java Hibernace
  • Online certifikačné školenie v Java Spring
  • Program WordPress
  • Certifikačné školenie v Ruby

Reverzné inžinierstvo tvrdo

Teraz je vyššie uvedená časť ľahko zrozumiteľná a prakticky to urobíte, keď zrušíte základné vedomosti v pythone. Ale to nie je vždy tak. Niekedy nemáte v skripte python žiadnu dokumentáciu alebo komentáre a sú tu aj súbory, ktoré by ste sami mohli pochopiť. Teraz je na tejto strane úžasná kniha, ale na to sa príliš nebudem sústrediť.

Názov knihy je „Efektívne pracujeme so starým kódom“. Kniha je nezávislá od pythonu alebo iného jazyka a dá vám predstavu o spätnom inžinierstve takmer v akomkoľvek jazyku. Kľúčové zameranie, keď sa snažíte porozumieť určitému kódu, je dôvod, prečo mu chcete porozumieť.

Či už chcete kód spätne analyzovať, aby ho upravil alebo aby ho portoval, prístup pre oba by bol úplne iný. Inštrumentácia dedičného kódu pomocou batérií a lešenia testov a sledovanie / zaznamenávanie je teda kľúčovou cestou na dlhom a tvrdom slogane, aby sa porozumelo a modifikovalo bezpečne a zodpovedne.

Nástroje spätného inžinierstva

Teraz existuje ďalšia metóda, ktorá uľahčí postupovanie podľa vyššie uvedených krokov. Existuje web s názvom Epydoc. Na tejto stránke skontroluje kód a vytvorí preň nejakú dokumentáciu. Výsledok nebude taký dobrý ako pôvodná dokumentácia, ale prinajmenšom vám poskytne predstavu o tom, ako presne funguje. Týmto spôsobom môžete začať písať svoju vlastnú dokumentáciu a po čiastočnom napísaní dokumentu môžete znova vygenerovať zvyšný čiastočný dokument z webu pre zostávajúcu časť.

Na analýzu kódu môžete použiť aj nástroj IDE. Zvyčajne to umožňuje dokončenie kódu, ale čo je dôležitejšie, v tomto prípade je možné jednoducho kliknúť na premennú a zistiť, odkiaľ pochádza. Toto naozaj veci urýchli, keď chcete porozumieť kódu iných ľudí.

Tiež sa musíte naučiť debugger. V zložitých častiach kódu budete musieť prejsť nimi v debuggere, aby ste videli, čo kód skutočne robí. Pythons pdb funguje, ale mnoho IDE má integrované debuggery, ktoré uľahčujú ladenie. PyReverse od Logilab a PyNSource od Andy Bulky sú tiež užitočné pre generovanie diagramov UML.

Existuje postup na vytvorenie modelu triedy UML z daného vstupu zdrojového kódu. S týmto môžete obrátiť snímku vašej kódovej základne na triedy UML a diagram tried formulárov ďalej. Uvedením obsahu kódu do vizuálneho modelu UML to pomáha programátorom alebo softvérovým inžinierom skontrolovať implementáciu, identifikovať potenciálne chyby alebo nedostatky a hľadať možné vylepšenia.

Okrem toho môžu vývojári zvrátiť knižnicu kódov ako triedy UML a vytvoriť si s nimi model, napríklad zvrátiť všeobecný rámec kolekcií a rozšíriť svoj všeobecný rámec rozšírením tohto generického rámca. V tejto kapitole prejdeme okamžitým obrátením Pythonu.

Predmety a primery

Aby bolo možné úplne pochopiť vnútorné fungovanie Pythonu, treba sa najprv oboznámiť s tým, ako Python kompiluje a vykonáva kód. Pri kompilácii kódu v Pythone je výsledkom kódový objekt. Kódový objekt je nemenný a obsahuje všetky informácie, ktoré potrebuje tlmočník na spustenie kódu. Inštrukcia bajtového kódu je reprezentovaná ako hodnota jednobajtového operačného kódu nasledovaná argumentmi, keď je to potrebné. Dáta sú odkazované pomocou indexu do jednej z ďalších vlastností objektu kódu.

Reťazec bajtového kódu vyzerá takto:

\ X64 \ X02 \ x64 \ X08 \ X66 \ X02

Bajtový kód Python pracuje na hromade položiek. Podnikavejším rozšírením by bolo pokúsiť sa dekompilovať bajtový kód späť na čitateľný zdrojový kód Pythonu doplnený o názvy objektov a funkcií. Pythonov kód môže byť distribuovaný v binárnej forme pomocou maršálového modulu. Tento modul poskytuje možnosť serializovať a deserializovať kódové objekty pomocou funkcií ukladania a načítania.

Najčastejšie sa vyskytujúcim binárnym formátom je kompilovaný súbor Pythonu (.pyc), ktorý obsahuje magické číslo, časovú pečiatku a serializovaný objekt. Tento typ súboru je zvyčajne produkovaný interpretom Pythonu ako vyrovnávacia pamäť kompilovaného objektu, aby sa predišlo niekoľkonásobnej analýze zdroja. Tieto techniky sa spoliehajú na ľahký prístup k bajtovým kódom a informáciám o type.

S bajtovým kódom objektu kódu môže byť logika kódu úplne alebo úplne zmenená. Extrakcia informácií o type môže pomôcť pri porozumení návrhu programu a identifikácii účelu a účelu objektu.

Zatemnenie a tvrdenie kódu aplikačného bajtu bude vždy rasa medzi implementátormi a tými, ktorí sa ho snažia prerušiť. Logickým prvým krokom je snaha brániť sa proti získaniu bajtového kódu smerom k riešeniu prekladu za behu.

Vlastnosti kódového objektu by sa mohli ukladať v akomkoľvek podpísanom, šifrovanom alebo inak zahmlenom formáte, ktorý sa počas behu programu zamaskuje alebo preloží a použije sa na vytvorenie nového objektu. Dalo by sa dokonca zmeniť spôsob, akým vyhľadávanie premenných pracuje v tlmočníkovi, aby zamlčalo informácie o pomenovaní. Pridaním vrstvy prekladu medzi vyhľadávanie skutočných mien a mien v zdrojovom kóde by vývojár mohol ďalej zmierňovať pokusy o zvrátenie.

záver

Po prečítaní všetkých týchto informácií môžete pocítiť potrebu ísť a vyskúšať si niekoľko mýt. Tu je niekoľko nástrojov, ktoré vám pomôžu spätne analyzovať cestu do vášho pythonového kódu:

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

Všetky tieto kódy sú skvelé, ale vďaka čomu sú vynikajúce, keď sa používajú spolu. Majte na pamäti, že to v žiadnom prípade nie je úplný zoznam, len tie, ktoré používam najviac, a myslím, že ukazujú, ako flexibilita pythonu môže spôsobiť takú zložitú úlohu, ako je reverzné inžinierstvo.

Odporúčané články

Tu je niekoľko článkov, ktoré vám pomôžu získať podrobnejšie informácie o Reverse Engineering s Pythonom, stačí prejsť odkazom.

  1. 25 najúžasnejších otázok a odpovedí na Python
  2. Začíname s programami Python a Django pre vývoj webových aplikácií
  3. Aké sú výhody a obmedzenia používania Pythonu?
  4. Kariéra v Pythone
  5. Nástroje spätného inžinierstva

Kategórie: