Zdroj obrázku: pixabay.com

Python je jazyk na vysoké úrovni. Ačkoli mnozí z vás si mohou myslet, že je to jako programovací jazyk, není. Je to skriptovací jazyk. Nikde se nepřibližuje strojovému kódu nebo strojovému jazyku. Co dělá Pythona tak zajímavým? Pokud máte nějaké zkušenosti s odbouráváním, nebo jste konverzovali s mnoha odborníky na webovou bezpečnost nebo s analyzátory malwaru, pak by vždy navrhovali jako primární jazyk python pro rozvoj malwarů nebo zneužití.

Zatímco někteří lidé mohou dávat přednost C, C ++ nebo perl, osobně bych hlasoval pro python. Důvodem je to, že je nejen užitečný jako nástroj pro psaní programu, ale je také užitečné jej přerušit.

Co je reverzní inženýrství?

Reverzní inženýrství je velmi široký koncept. Jeden nemůže vlastně definovat to s jednoduchými syntaxemi. Správným konceptem reverzního inženýrství je rozčlenit kód na jednodušší části, porozumět mu, upravit a vylepšit podle vlastního účelu a poté jej znovu sestavit, aby vyhovoval našim potřebám. Abych to trochu zjednodušil, dovolte mi uvést několik extrémních běžných příkladů.

Umožňuje příklad mobilního telefonu Android. Výrobci vytvoří zásoby Romů a prodají je svým zákazníkům. Ve většině případů však obsahuje hodně bloatwaru a stává se zchudlým. Na webech, jako jsou XDA a androidcentral, jsou lidé, kteří zpětně vytvářejí cestu do ROM, vylepšují ji a činí z ní lag důkaz. Jedním z praktických příkladů by byl CyanogenMod Rom.

Ale to byl jen příklad, který vás přiměl pochopit, o co jde. Reverse Engineering má stejný koncept, ale jeho cesta je příliš komplikovaná, než že pouze modifikuje ROM.

Kompilace a Python

Pokud máte zkušenosti s Pythonem, víte, že při psaní pythonového skriptu to může být virus, užitečné zatížení, trojský kůň nebo cokoli, co je v souboru, bude to fungovat pouze v počítačích, ve kterých je nainstalován python. Řekněme tedy, že jsem napsal vynikající počítačový trojan, který dokáže obejít jakýkoli antivirový program, a začnu jej implementovat v systému Windows, ale pokud systém Windows nemá nainstalovaný pythonový interpret, pak to nebude fungovat. Je tedy třeba zkompilovat každý soubor psaného pythonového skriptu do spustitelného souboru a poté jej nasadit do systému Windows.

Spustitelné spustitelné soubory Windows

Nyní víte, že musíme kompilovat pythonové skripty, aby se spouštěly v systému Windows, musíte také vědět, že musí existovat kompilátor, který převádí pythonové skripty na spustitelný soubor. Ano, tam je. Jmenuje se Py2exe. Py2exe je jednoduchý instalační program, který převádí pythonové skripty na samostatné programy Windows. Nyní existuje také další nástroj, který převádí spustitelné soubory systému Windows napsané v pythonu zpět na pythonové skripty. Jmenuje se Pyinstaller Exe Rebuilder.

Pyinstaller exe rebuilder je nástroj k překompilování / zpětné generování spustitelných souborů generovaných pyinstallerem bez přístupu ke zdrojovému kódu. Když spustíte EXE - je rozbalen v paměti. To zahrnuje soubory .pyc (python kód, který je převeden na bytecode). V zásadě to, co nástroje jako pyinstaller a py2exe dělají, jsou balíčky knihoven a závislostí dohromady, takže můžete spustit „samostatný“ EXE, aniž byste je museli stahovat nebo připravovat stroj pomocí interpreta python.

K dispozici je také další sada nástrojů, která vás přiblíží k zdrojovému kódu. Jmenuje se PyRetic, což je zkratka pro Reverse Engineer Obfuscated Python Bytecode. Tato sada nástrojů vám umožňuje vzít objekt v paměti zpět do zdrojového kódu bez nutnosti přístupu k bajtkódu přímo na disku. To může být užitečné, pokud jsou aplikace pyc na disku zmateny jedním z mnoha způsobů.

Doporučené kurzy

  • Trénink na Java Hibernate
  • Online certifikační školení v Java Spring
  • Program WordPress
  • Certifikační školení v Ruby

Reverzní inženýrství tvrdá cesta

Nyní je výše uvedená část snadno srozumitelná a prakticky to uděláte, když se naučíte alespoň základní znalosti v pythonu. Ale to není vždy pravda. Někdy nemáte ve skriptu python žádnou dokumentaci ani komentáře a existují i ​​soubory, které byste mohli sami pochopit. Nyní je na této straně úžasná kniha, ale na to se nebudu moc soustředit.

Název knihy je „Efektivně pracuje se starým kódem“. Kniha je nezávislá na pythonu nebo jiném jazyce a dá vám představu o reverzním inženýrství téměř v jakémkoli jazyce. Klíčové zaměření, když se snažíte porozumět určitému kódu, je důvod, proč jej chcete pochopit.

Ať už chcete kód převrátit, abyste jej upravili, nebo jej přenesli, přístup pro oba by byl docela odlišný. Instrumentace starého kódu pomocí baterií a lešení testů a trasování / protokolování je tedy klíčovou cestou dlouhého, tvrdého sloganu k pochopení a úpravě bezpečně a odpovědně.

Nástroje pro reverzní inženýrství

Nyní existuje další způsob, jak to trochu usnadnit, které můžete sledovat spolu s následujícími kroky. Existuje web s názvem Epydoc. Na tomto webu zkontroluje kód a vytvoří pro něj nějakou dokumentaci. Výsledek nebude tak dobrý jako původní dokumentace, ale alespoň vám dá představu o tom, jak přesně funguje. Tímto způsobem můžete začít psát svou vlastní dokumentaci a po částečném zápisu dokumentu můžete znovu vygenerovat zbývající částečný dokument z webu pro zbývající část.

K analýze kódu můžete dokonce použít nástroj IDE. To obvykle poskytuje dokončení kódu, ale co je důležitější, v tomto případě je možné pouhým kliknutím na proměnnou zjistit, odkud pochází. To opravdu urychluje věci, když chcete porozumět kódu jiných lidí.

Také se musíte naučit debugger. Ve složitých částech kódu budete muset projít skrz debugger, abyste viděli, co kód skutečně dělá. Pythons pdb funguje, ale mnoho IDE má integrované debuggery, které usnadňují ladění. PyReverse od Logilab a PyNSource od Andy Bulky jsou také užitečné pro generování diagramu UML.

Existuje proces výroby modelu třídy UML z daného vstupu zdrojového kódu. S tímto můžete převrátit snímek vaší kódové základny na třídy UML a diagram tříd formulářů dále. Přenesením obsahu kódu do vizuálního modelu UML to pomůže programátorům nebo softwarovým inženýrům zkontrolovat implementaci, identifikovat potenciální chyby nebo nedostatky a hledat možná vylepšení.

Kromě toho mohou vývojáři převrátit knihovnu kódů jako třídy UML a sestavit s nimi modely, jako by obrátili obecný rámec kolekce a vytvořili svůj vlastní rámec rozšířením tohoto druhu. V této kapitole projdeme okamžitý obrácení Pythonu.

Předměty a primery

Abychom plně pochopili vnitřní fungování Pythonu, měli bychom se nejprve seznámit s tím, jak Python kompiluje a spouští kód. Při kompilaci kódu v Pythonu je výsledkem kódový objekt. Objekt kódu je neměnný a obsahuje všechny informace, které interpret potřebuje ke spuštění kódu. Instrukce bajtového kódu je reprezentována jako hodnota jednobajtového operačního kódu následovaná argumenty, pokud je to požadováno. Data jsou odkazována pomocí indexu do jedné z dalších vlastností objektu kódu.

Řetězec bajtového kódu vypadá takto:

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

Bajtový kód Pythonu pracuje na stohu položek. Podnikavějším rozšířením by bylo pokusit se dekompilovat byte kód zpět na čitelný zdrojový kód Pythonu, doplněný o názvy objektů a funkcí. Pythonův kód lze distribuovat v binární podobě pomocí maršálového modulu. Tento modul poskytuje možnost serializovat a deserializovat kódové objekty pomocí funkcí ukládání a načítání.

Nejběžněji se vyskytujícím binárním formátem je kompilovaný soubor Pythonu (.pyc), který obsahuje magické číslo, časové razítko a serializovaný objekt. Tento typ souboru je obvykle produkován interpretem Pythonu jako mezipaměť kompilovaného objektu, aby se zabránilo nutnosti analyzovat zdroj vícekrát. Tyto techniky spoléhají na snadný přístup k bajtovému kódu a informacím o typu.

S bajtovým kódem objektu kódu lze logiku kódu změnit nebo dokonce úplně nahradit. Získání informací o typu může pomoci při pochopení návrhu programu a identifikaci účelu a účelu objektu.

Zmatení a zatuhnutí kódu aplikačního bajtu bude vždy rasa mezi implementátory a těmi, kteří se ho snaží rozbít. Abychom se pokusili bránit před získáváním bajtového kódu, je logickým prvním krokem směřování k řešení překladu za běhu.

Vlastnosti objektu kódu mohou být uloženy v jakémkoli podepsaném, šifrovaném nebo jinak zahmleném formátu, který je během běhu odmlčen nebo přeložen a použitý k vytvoření nového objektu. Dalo by se dokonce změnit způsob vyhledávání proměnných názvů v tlumočníku, aby zamlžoval informace o pojmenování. Přidáním překladové vrstvy mezi vyhledávání skutečných jmen a jmen ve zdrojovém kódu by vývojář mohl dále zmírnit pokusy o obrácení.

Závěr

Nyní, po přečtení všech těchto, můžete cítit potřebu jít a experimentovat s několika mýtnými tam. Zde jsou některé nástroje, které vám mohou pomoci při zpětném sestavení vaší cesty do vašeho pythonového kódu:

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

To vše jsou skvělé kousky kódu, ale ve skutečnosti jsou skvělé, když jsou použity společně. Mějte na paměti, že to v žádném případě není úplný seznam, jen ty, které používám nejvíce, a myslím, že ukazují, jak flexibilita pythonu může učinit takový složitý úkol, jako je reverzní inženýrství, zvládnutelný.

Doporučené články

Zde je několik článků, které vám pomohou získat více podrobností o Reverse Engineering s Pythonem, takže stačí projít odkaz.

  1. 25 nejúžasnějších dotazů a odpovědí na Python
  2. Začínáme s Pythonem a Djangem pro vývoj webových aplikací
  3. Jaké jsou výhody a omezení používání Pythonu?
  4. Kariéra v Pythonu
  5. Nástroje pro reverzní inženýrství

Kategorie: