Képforrás: pixabay.com

A Python magas szintű nyelv. Bár sokan gondolhatják, hogy ez programozási nyelv, nem az. Ez egy szkriptnyelv. A gépkódhoz vagy gépi nyelvhez sem közelít. Akkor mi teszi a pythonot olyan érdekesnek? Ha bármilyen tapasztalata van az újbóli tesztelés során, vagy beszélgettek már sok webbiztonsági szakértővel vagy rosszindulatú program elemzőjével, akkor mindig javasolnák a python-ot, mint elsődleges nyelvet a rosszindulatú programok vagy kizsákmányolások fejlesztéséhez.

Bár néhány ember inkább a C, C ++ vagy a perl-t részesíti előnyben, én személyesen a python mellett szavaznék. Ennek oka, hogy nem csak a programírás eszközeként hasznos, hanem az is, hogy megtörje.

Mi az a fordított tervezés?

A hátraépítés nagyon széles körű koncepció. Valójában nem lehet egyszerű szintaxissal meghatározni. A fordított tervezés megfelelő koncepciója egy kód egyszerűbb részekre bontása, megértése, módosítása és továbbfejlesztése saját célunk szerint, majd az összeszerelés az igényeinkhez igazítva. Hogy kissé egyszerűbbé tegyük, hadd mondjak néhány szélsőséges példát.

Vegyünk példát egy Android mobiltelefonra. A gyártók készítenek egy készlet-romot, és eladják azt fogyasztóiknak. De a legtöbb alkalommal nagyon sok bloatware-t tartalmaz, és késleltetetté válik. Tehát vannak olyan weboldalak, mint például az XDA és az androidcentral, akik megfordítják a ROM-ba vezető utat, továbbfejlesztik és késleltetik. Ennek egyik gyakorlati példája a CyanogenMod Rom.

De ez csak egy példa arra, hogy megértsük, mi az. A Reverse Engineering ugyanazzal a koncepcióval rendelkezik, de túlságosan bonyolult, mint a ROM módosítása.

Összeállítás és Python

Ha van tapasztalata a Python-ban, akkor tudja, hogy python-szkript írásakor vírus, hasznos teher, trójai vagy bármi más is legyen a fájl, csak azokban a számítógépekben fog működni, amelyekbe a python telepítve van. Tehát mondjuk, írtam egy kiváló számítógépes trójai, amely képes megkerülni minden vírusvédelmet, és elkezdek telepíteni azt egy Windows rendszerben, de ha a Windows rendszerben nincs telepítve a python interpreter, akkor ez szokásos módon működni. Tehát össze kell állítania az írott python parancsfájl minden fájlját egy futtatható fájlba, majd telepíteni azt a Windows rendszerben.

Fordított tervezésű Windows futtatható elemek

Most már tudja, hogy a python parancsfájlokat össze kell állítanunk a Windows futtatásához, és tudnunk kell egy fordítót is, amely a python parancsfájlokat végrehajthatóvá alakítja. Igen van. A neve Py2exe. A Py2exe egy egyszerű telepítő, amely a python parancsfájlokat önálló Windows programokká konvertálja. Most van egy másik eszköz, amely konvertálja a pythonban írt Windows futtatható fájlokat Python parancsfájlokká. A neve Pyinstaller Exe Rebuilder.

A Pyinstaller exe rebuilder olyan eszköz, amellyel a pyinstaller által generált végrehajtható fájlokat újrafordíthatja / visszafordíthatja, anélkül hogy hozzáférne a forráskódhoz. Az EXE elindításakor a memória nincs csomagolva. Ide tartoznak a .pyc fájlok (python-kód, amelyet bájtkódra konvertálnak). Alapvetően az olyan eszközök, mint a pyinstaller és a py2exe, a csomagkönyvtárak és a függőségek együttesen működnek, így az 'önálló' EXE futtatható anélkül, hogy letöltenie kellene őket, vagy a gépet Python-tolmács segítségével elkészítenie.

Van még egy eszközkészlet, amely nagyon közel hoz a forráskódhoz. A név PyRetic, amely a Reverse Engineer Obfusposed Python Bytecode-t jelenti. Ez az eszközkészlet lehetővé teszi, hogy egy objektumot a memóriában tároljon a forráskódhoz anélkül, hogy közvetlenül a lemezen lévő bájtkódhoz kellene hozzáférnie. Ez akkor lehet hasznos, ha a lemezen található pyc-fájlok sokféle szempontból egybeesnek.

Ajánlott tanfolyamok

  • Képzés a Java hibernátumról
  • Online tanúsítási képzés a Java Spring-en
  • WordPress program
  • Minősítési képzés Ruby-ban

Fordított tervezés a kemény út

A fenti rész könnyen megérthető és gyakorlatilag elvégezhető, ha a pythonban elérte az alaptudást. De nem mindig ez a helyzet. Időnként nincs dokumentáció vagy megjegyzés a python szkriptben, és vannak olyan fájlok is, amelyekkel önmagát megértheti. Most van egy fantasztikus könyv ezen a részen, de nem szoktam erre koncentrálni.

A könyv neve: „Hatékony együttműködés a régi kóddal”. A könyv független a pythontól vagy más nyelvektől, és szinte bármilyen nyelven ötletet ad a fordított tervezéshez. Amikor egy kód megértésekor a legfontosabb a hangsúly, az az oka annak, hogy megértse azt.

Akár vissza kívánja állítani a kódot, hogy módosítsa, vagy átadja, a megközelítés mindkettő esetében meglehetősen eltérő. Tehát az örökölt kódok elemmel, elemmel és tesztállványokkal történő feltöltése, valamint a nyomkövetés / naplózás elengedhetetlen útja a hosszú, kemény logón keresztül a biztonságos és felelősségteljes megértéshez és módosításhoz.

Fordított mérnöki eszközök

Most van egy másik módszer, amely egy kicsit megkönnyíti, amelyet követhet a fenti lépések végrehajtásával. Van egy olyan oldal, amelyet Epydoc-nak hívnak. Ezen a webhelyen ellenőrzi a kódot, és létrehoz egy dokumentumot ehhez. Az eredmény nem lesz olyan jó, mint az eredeti dokumentáció, de legalább elképzelést ad neked, hogy pontosan hogyan működik. Ezáltal elindíthatja a saját dokumentációját, és a dokumentum részleges megírása után újra létrehozhatja a maradék részleges dokumentumot a webhelyről a fennmaradó rész számára.

Az IDE eszközt is felhasználhatja a kód elemzésére. Ez általában megadja a kód kitöltését, de ennél is fontosabb, hogy lehetővé teszi a változó csak a Ctrl-kattintását, hogy megtudja, honnan származik. Ez valóban felgyorsítja a dolgokat, ha meg akarod érteni más népek kódját.

Ezenkívül meg kell tanulnia a hibakeresőt. A kód trükkös részeiben át kell lépnie rajta egy hibakeresőben, hogy megnézze, mi a kód valójában. A Pythons pdb működik, de sok IDE-nek van integrált hibakeresője, amely megkönnyíti a hibakeresést. A Logilab PyReverse és Andy Bulka PyNSource szintén hasznosak az UML diagram generálásában.

Van egy folyamat az UML osztálymodell előállításához egy adott forráskódból. Ezzel visszafordíthatja a kód-alap pillanatfelvételét az UML osztályokra, és az osztálydiagramot tovább alakíthatja. A kódtartalom vizuális UML modellbe történő beépítésével ez segít a programozóknak vagy a szoftvermérnököknek egy végrehajtás áttekintésében, a lehetséges hibák vagy hiányok azonosításában és a lehetséges fejlesztések keresésében.

Ezen felül a fejlesztők visszafordíthatják a kódkönyvtárat UML osztályokként, és modelleket építhetnek fel velük, például visszafordíthatják a generikus gyűjtési keretet, és kidolgozhatják a saját keretét az általános kiterjesztésével. Ebben a fejezetben áttekintjük a Python azonnali fordítottját.

Tárgyak és alapozók

A Python belső működésének teljes megértése érdekében először meg kell ismerkedni azzal, hogy a Python hogyan állítja össze és hajtja végre a kódot. Amikor a kódot Python-ban fordítják, az eredmény kódobjektum. A kódobjektum változatlan, és tartalmazza az összes információt, amely a tolmácsnak szükséges a kód futtatásához. A bájtkód utasításokat egy bájtos opcode-értékként ábrázoljuk, amelyeket szükség esetén argumentumok követnek. Az adatokra index segítségével hivatkozunk a kódobjektum többi tulajdonságának egyikére.

A bájtkód-karakterlánc így néz ki:

\ x64 \ x02 \ x64 \ X08 \ X66 \ x02

A Python byte kód egy halom elemben működik. Egy vállalkozóbb kiterjesztés az lenne, ha megpróbálná a bájtkódot visszaolvasni olvasható Python forráskódba, objektum- és függvénynevekkel kiegészítve. A Python kód bináris formában terjeszthető a marsall modul felhasználásával. Ez a modul lehetővé teszi a kódobjektumok sorba állítását és érdemtelenítését a tárolási és betöltési funkciók segítségével.

A leggyakrabban előforduló bináris formátum egy összeállított Python-fájl (.pyc), amely varázsszámot, időbélyeget és sorosított objektumot tartalmaz. Ezt a fájltípust általában a Python tolmács készíti, mint a fordított objektum gyorsítótárát, hogy elkerülje a forrás többszöri elemzését. Ezek a technikák a bájtkódra és a típusra vonatkozó információk könnyű elérhetőségén alapulnak.

A kódobjektum bájtkódjával a kódlogika módosítható, vagy akár teljesen helyettesíthető. A típusinformációk kibontása elősegítheti a programtervezés megértését és a funkció és az objektum céljainak azonosítását.

Az alkalmazás-bájt-kód eltakarása és megszilárdítása mindig verseny lesz a megvalósítók és a megtörni akarók között. A bájtkód lekérdezés elleni védekezés érdekében a logikus első lépés a futásidejű fordítási megoldás felé vezet.

A kódobjektum tulajdonságai bármilyen aláírt, titkosított vagy egyéb módon elhalványított formátumban tárolhatók, amelyeket a futási idő alatt megszüntetnek vagy lefordítanak, és egy új objektum létrehozására szolgálnak. Megváltoztathatja azt is, hogy a változó név keresése hogyan működik a tolmácson belül, hogy eltakarja az elnevezési információkat. A fordító réteg hozzáadásával a tényleges nevek és a forráskódon belüli nevek közé a fejlesztő tovább enyhítheti a fordított kísérleteket.

Következtetés

Most, miután mindet elolvasta, érezheti a szükségességét, hogy menjen és kipróbálhassa néhány ott kivetett autópályadíjat. Tehát itt van néhány eszköz, amely segít megfordítani a python-kódot:

  1. Paimei
  1. Sulley
  1. A Carrera Gyűjtemény
  1. PyEmu
  1. IDAPython
  1. ImmDbg

Mindezek nagyszerű kóddarabok, de mi igazán teszi őket kiemelkedőnek, ha együtt használjuk őket. Ne feledje, hogy ez semmiképpen sem teljes lista, csak azok, amelyeket a legjobban használom, és amelyek azt mutatják, hogy a python rugalmassága hogyan képes kezelni egy olyan összetett feladatot, mint a fordított mérnöki munka.

Ajánlott cikkek

Íme néhány cikk, amely segít részletesebben megismerni a Python hátterét, tehát csak keresse meg a linket.

  1. 25 leglenyűgözőbb Python interjú kérdés és válasz
  2. Kezdje el a Python és a Django használatát a webfejlesztés számára
  3. Mik a Python használatának előnyei és korlátai?
  4. Karrier Pythonban
  5. Fordított mérnöki eszközök

Kategória: