Sursa imaginii: pixabay.com

Python este un limbaj la nivel înalt. Deși mulți dintre voi ar putea crede, este un limbaj de programare, nu este. Este un limbaj de script. Nu se apropie nicăieri de codul mașinii sau de limbajul mașinii. Atunci ce face ca pitonul să fie atât de interesant? Dacă aveți experiență în pentestare sau ați avut o conversație cu mulți experți în securitate web sau analizatori de malware, atunci ei ar sugera întotdeauna python ca limbă principală pentru a dezvolta malwares sau exploatări.

În timp ce unii oameni pot prefera C, C ++ sau perl, eu aș vota personal pentru python. Motivul fiind că nu este util doar ca instrument pentru scrierea unui program, ci este util și pentru a-l rupe.

Ce este Ingineria Inversă?

Invers Engineering este un concept foarte larg. De fapt nu se poate defini cu sintaxele simple. Conceptul adecvat de Invers Engineering este de a descompune un cod în părți mai simple, de a-l înțelege, de a-l modifica și de a-l îmbunătăți conform propriilor scopuri și apoi de a-l reasambla pentru a se potrivi nevoilor noastre. Pentru a face un pic mai simplu, permiteți-mi să vă ofer câteva exemple comune extreme.

Să luăm un exemplu de telefon mobil Android. Producătorii creează un stoc de stoc și îl vând consumatorilor. Însă de cele mai multe ori, conține o mulțime de bloatware și devine întârziat. Așadar, există site-uri de site-uri precum XDA și Androidcentral, care își transformă inginerii în ROM, o îmbunătățesc și o fac să nu demareze. Un exemplu practic ar fi CyanogenMod Rom.

Dar acesta a fost doar un exemplu care să te facă să înțelegi ce este. Reverse Engineering are același concept, dar este prea complicat ca doar modificarea unui ROM.

Compilare și Python

Dacă aveți experiență în Python, atunci știți că atunci când scrieți un script Python, poate fi vorba de un virus, sarcină utilă, troian sau orice alt fișier este, acesta va funcționa doar în computerele pe care este instalat python. Așadar, să zicem, am scris un troian excelent pe computer care poate ocoli orice antivirus și încep să îl implementez într-un sistem Windows, dar dacă sistemul Windows nu are interpretul piton instalat, atunci nu va funcționa. Deci, trebuie să compilați fiecare fișier al scriptului piton scris într-un executabil și apoi să îl implementați în sistemul Windows.

Inversare Executabile Windows Executable

Acum știți, că trebuie să compilăm scripturi python pentru a rula în Windows, trebuie să știți, de asemenea, că trebuie să existe un compilator, care să transforme scripturile python într-un executabil. Da este. Numele său este Py2exe. Py2exe este un simplu program de instalare care transformă scripturile python în programe Windows independente. Acum, există și un alt instrument care transformă executările Windows scrise în python înapoi la scripturile python. Numele său este Pyinstaller Exe Rebuilder.

Pyinstaller exe rebuilder este un instrument de recompilare / inversare a unui executant generat de Pyinstaller fără a avea acces la codul sursă. Când lansați EXE - acesta este ambalat în memorie. Acesta include fișiere .pyc (codul python care este convertit în bytecode). Practic, ceea ce fac instrumente precum pyinstaller și py2exe sunt bibliotecile de pachete și dependențele toate împreună, astfel încât să puteți rula EXE „de sine stătător” fără a fi nevoie să le descărcați sau să pregătiți mașina cu un interpret de python.

Există, de asemenea, un alt set de instrumente care vă duce foarte aproape de codul sursă. Numele este PyRetic, care înseamnă Reverse Engineer Obfuscated Python Bytecode. Acest set de instrumente vă permite să luați un obiect din memorie înapoi la codul sursă, fără a avea nevoie de acces la bytecode direct pe disc. Acest lucru poate fi util dacă aplicațiile Pyc-urile de pe disc sunt ofuscate într-unul din mai multe moduri.

Cursuri recomandate

  • Instruire pe Java Hibernate
  • Instruire de certificare online în Java Spring
  • Programul WordPress
  • Pregătirea certificării în rubin

Inginerie inversă Calea grea

Acum, partea de mai sus este ușor de înțeles și practic o faci atunci când atleast cunoștințele de bază în python. Dar nu întotdeauna este cazul. Uneori, nu aveți nicio documentație sau comentarii în scriptul python și pot exista și fișiere pentru a înțelege totul singur. Acum există o carte minunată din această parte, dar nu mă voi concentra mult pe asta.

Numele cărții este „Lucrând eficient cu Legacy Code”. Cartea este independentă de python sau de orice altă limbă și vă va oferi o idee pentru inginerie inversă în aproape orice limbă. Motivul principal pentru care încercați să înțelegeți o bucată de cod este motivul pentru care doriți să îl înțelegeți.

Indiferent dacă doriți să inversați codul pentru a-l modifica sau pentru a-l porta, abordarea pentru ambele ar fi destul de diferită. Așadar, instrumentarea codului moștenire, cu baterii și schele de testare și urmărirea / înregistrarea în jurnal este calea crucială pe lungul slogan greu, către înțelegerea și modificarea sigură și responsabilă.

Instrumente de inginerie inversă

Acum există o altă metodă de a face un pic mai ușor pe care îl puteți urma odată cu urmarea pașilor de mai sus. Există un site numit Epydoc. În acest site, va verifica codul și va crea o documentație pentru acesta. Rezultatul nu va fi la fel de bun ca documentația originală, dar vă va oferi o idee despre modul în care funcționează exact. Și făcând acest lucru, puteți începe să scrieți propria documentație, iar după scrierea parțială a documentului, puteți genera din nou documentul parțial rămas de pe site pentru partea rămasă.

Puteți utiliza chiar instrumentul IDE pentru a analiza codul. În mod obișnuit, acest lucru vă oferă completarea codului, dar mai important în acest caz, face posibilă doar ctrl-click pe o variabilă pentru a vedea de unde provine. Acest lucru grăbește cu adevărat lucrurile atunci când doriți să înțelegeți codul altor popoare.

De asemenea, trebuie să înveți un depanator. În părțile complicate ale codului, va trebui să le parcurgeți într-un depanator pentru a vedea ce face efectiv codul. Pythons pdb funcționează, dar multe IDE au debugger-uri integrate, ceea ce facilitează depurarea. PyReverse de la Logilab și PyNSource de la Andy Bulka sunt utile și pentru generarea diagramei UML.

Există un proces pentru a produce modelul clasei UML dintr-o intrare dată a codului sursă. Cu aceasta, puteți inversa o captura instantanee a bazei de cod la clasele UML și să formați diagrama clasei în continuare. Aducând conținutul codului în modelul UML vizual, acest lucru îi ajută pe programatori sau ingineri software să revizuiască o implementare, să identifice eventualele erori sau deficiențe și să caute posibile îmbunătățiri.

În afară de aceasta, dezvoltatorii pot inversa o bibliotecă de coduri ca clase UML și pot construi un model cu acestea, astfel încât să inverseze un cadru de colecție generică și să dezvolte propriul cadru extinzându-l pe cel generic. În acest capitol, vom parcurge reversul instantaneu al Python.

Obiecte și Grunduri

Pentru a înțelege pe deplin funcționarea interioară a Python, ar trebui mai întâi să vă familiarizați cu modul în care Python compilează și execută codul. Când codul este compilat în Python, rezultatul este un obiect de cod. Un obiect de cod este imuabil și conține toate informațiile necesare interpretului pentru a rula codul. O instrucțiune de cod de octeți este reprezentată ca o valoare de cod de opțiune de un octet, urmată de argumente atunci când este necesară. Datele sunt trimise folosind un index într-una din celelalte proprietăți ale obiectului cod.

Un șir de cod de octeți arată astfel:

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

Codul de byte Python operează pe o grămadă de articole. O extensie mai întreprinzător ar fi încercarea de a decompila codul de octeți înapoi la codul sursă Python care poate fi citit, completat de nume de obiect și funcții. Codul Python poate fi distribuit în formă binară utilizând modulul Marshal. Acest modul oferă posibilitatea de a serializa și deserializa obiecte de cod folosind funcțiile de stocare și încărcare.

Cel mai frecvent întâlnit format binar este un fișier Python compilat (.pyc) care conține un număr magic, o marcă de timp și un obiect serializat. Acest tip de fișier este de obicei produs de interpretul Python ca o memorie cache a obiectului compilat, pentru a evita nevoia de a analiza sursa de mai multe ori. Aceste tehnici se bazează pe ușurința accesului la informațiile de tip byte și tip.

Cu un cod de octeți al unui obiect de cod, logica codului poate fi modificată sau chiar înlocuită în întregime. Extragerea informațiilor de tip poate ajuta la înțelegerea proiectului programului și la identificarea funcțiilor și scopurilor obiectului.

Asfixarea și întărirea codului de byte al aplicației va fi întotdeauna o cursă între implementatori și cei care doresc să o rupă. Pentru a încerca să vă apărați împotriva preluării codului de byte, primul pas logic este spre o soluție de traducere în timp.

Proprietățile unui obiect de cod ar putea fi stocate în orice format semnat, criptat sau altfel disfuncțional care este de-desconsolidat sau tradus în timpul rulării și folosit pentru a instaura un nou obiect. S-ar putea chiar schimba modul în care funcționează căutările de nume variabile în cadrul interpretului pentru a obține informațiile de denumire. Prin adăugarea unui strat de traducere între căutarea numelor reale și a numelor din codul sursă, un dezvoltator ar putea atenua și mai mult încercările de inversare.

Concluzie

Acum, după ce ai citit toate acestea, poate simți nevoia să mergi și să experimentezi câteva dintre taxele de acolo. Iată, așadar, câteva instrumente care vă pot ajuta să inversați drumul în codul dvs. python:

  1. Paimei
  1. Sulley
  1. Colecția Carrera
  1. PyEmu
  1. IDAPython
  1. ImmDbg

Toate acestea sunt bucăți grozave de cod, dar ceea ce le face cu adevărat remarcabile este atunci când sunt folosite împreună. Rețineți că aceasta nu este în niciun caz o listă completă, doar cele pe care le folosesc cel mai mult și credeți că arată modul în care flexibilitatea pitonului poate face o sarcină atât de complexă, cum ar fi inginerie inversă.

Articole recomandate

Iată câteva articole care vă vor ajuta să obțineți mai multe detalii despre Ingineria inversă cu Python, așa că trebuie doar să parcurgeți linkul.

  1. 25 Cele mai uimitoare întrebări și răspunsuri la interviu Python
  2. Începeți cu Python și Django pentru Dezvoltare Web
  3. Care sunt avantajele și limitările utilizării Python?
  4. Cariere în Python
  5. Instrumente de inginerie inversă