Billedkilde: pixabay.com

Python er et sprog på højt niveau. Selvom mange af jer måske tænker, det som et programmeringssprog, er det ikke det. Det er et skriftsprog. Det kommer ikke i nærheden af ​​maskinkoden eller maskinsproget. Hvad er det så, der gør python så interessant? Hvis du har nogen erfaring med at pentesting, eller du har haft en samtale med mange websikkerhedseksperter eller malware-analysatorer, ville de altid foreslå python som deres primære sprog til at udvikle malwares eller exploits.

Mens nogle mennesker måske foretrækker C, C ++ eller perl, ville jeg personligt stemme for python. Årsagen er, at det ikke kun er nyttigt som et værktøj til at skrive et program, det er også nyttigt at bryde det.

Hvad er omvendt teknik?

Reverse Engineering er et meget bredt koncept. Man kan faktisk ikke definere det med enkle syntakser. Korrekt omvendt koncept er at opdele en kode i enklere dele, forstå den, ændre og forbedre den efter vores eget formål og derefter samle den igen, så den passer til vores behov. For at gøre det lidt enklere, lad mig give dig nogle ekstreme almindelige eksempler.

Lad os tage et eksempel på en Android-mobiltelefon. Producenter Opret en lagerstatus og sælg den til deres forbrugere. Men de fleste af de tidspunkter indeholder den masser af bloatware, og det bliver ubehageligt. Så der er mennesker på websteder som XDA og androidcentral, der vender tekniker tilbage til ROM'en, forbedrer den og gør den forsinket. Et praktisk eksempel ville være CyanogenMod Rom.

Men dette var bare et eksempel for at få dig til at forstå, hvad det er. Reverse Engineering har det samme koncept, men det er for kompliceret til bare at ændre en ROM.

Kompilering og Python

Hvis du har erfaring med Python, så ved du, at når du skriver et python-script, kan det være en virus, nyttelast, trojan eller hvad filen end er, det kun fungerer på computere, hvor python er installeret. Så lad os sige, jeg har skrevet en fremragende computertrojan, der kan omgå enhver antivirus, og jeg begynder at implementere det i et windows-system, men hvis windows-systemet ikke har python-tolken installeret, fungerer det ikke. Så man skal samle hver fil i det skrevne python-script til en eksekverbar og derefter distribuere den i windows-system.

Reverse Engineering Windows-eksekverbare

Nu ved du, at vi er nødt til at kompilere python-scripts for at køre i windows, du skal også vide, at der skal være en compiler, der konverterer python-scripts til en eksekverbar. Ja der er. Dets navn er Py2exe. Py2exe er et simpelt installationsprogram, der konverterer python-scripts til uafhængige windows-programmer. Nu er der også et andet værktøj, der konverterer Windows-eksekverbare filer, der er skrevet i python, tilbage til python-scripts. Dets navn er Pyinstaller Exe Rebuilder.

Pyinstaller exe-ombygger er et værktøj til at rekompilere / reversere pyinstaller-genererede eksekverbare computere uden at have adgang til kildekoden. Når du starter EXE - pakkes det i hukommelsen. Dette inkluderer .pyc-filer (python-kode, der er konverteret til bytecode). Grundlæggende hvad værktøjer som pyinstaller og py2exe gør er pakkebiblioteker og afhængigheder alt sammen, så du kan køre den 'fristående' EXE uden at skulle downloade dem eller forberede maskinen med en python-tolk.

Der er også et andet værktøjssæt, der tager dig meget tæt på kildekoden. Navnet er PyRetic, der står for Reverse Engineer tilsløret Python Bytecode. Dette værktøjssæt giver dig mulighed for at tage et objekt i hukommelsen tilbage til kildekoden uden at have brug for adgang til bytekoden direkte på disken. Dette kan være nyttigt, hvis applikationernes pc'er på disken er tilsløret på en af ​​mange måder.

Anbefalede kurser

  • Træning i Java Dvale
  • Online certificeringstræning i Java Spring
  • WordPress-program
  • Certificeringstræning i Ruby

Reverse Engineering Den hårde måde

Nu er ovennævnte del let at forstå og praktisk gøre det, når du mindsker den grundlæggende viden i python. Men det er ikke altid tilfældet. Nogle gange har du ikke nogen dokumentation eller kommentarer i python-scriptet, og der er også måske filer, som du kan forstå selv. Nu er der en fantastisk bog om denne del, men jeg vil ikke koncentrere mig meget om det.

Navnet på bogen er "Arbejder effektivt med Legacy Code". Bogen er uafhængig af python eller et hvilket som helst andet sprog, og vil give dig en idé til reverse engineering på næsten ethvert sprog. Det centrale fokus, når du prøver at forstå et stykke kode, er grunden til, at du vil forstå det.

Uanset om du vil omvendt konstruere koden for at ændre den eller til at porte den, vil fremgangsmåden for begge være en helt anden. Så instrumentering af den gamle arv, med batterier og stilladser af test og sporing / logning er den afgørende sti på den lange, hårde slog for at forstå og ændre sikkert og ansvarligt.

Reverse Engineering Tools

Nu er der en anden metode til at gøre det lidt let, som du kan følge sammen med at følge ovenstående trin. Der er et sted kaldet Epydoc. På dette sted vil du kontrollere koden og oprette en vis dokumentation til den. Resultatet vil ikke være så godt som den originale dokumentation, men det vil i det mindste give dig en idé om, hvordan den fungerer nøjagtigt. Og ved at gøre dette kan du begynde at skrive din egen dokumentation, og efter delvist at have skrevet dokumentet kan du igen generere det resterende delvise dokument fra webstedet for den resterende del.

Du kan endda bruge IDE-værktøjet til at analysere koden. Dette giver dig typisk kodekonfiguration, men vigtigere er det i dette tilfælde det kun er muligt at bare ctrl-klikke på en variabel for at se, hvor den kommer fra. Dette fremskynder virkelig tingene, når du vil forstå andre folks kode.

Du skal også lære en debugger. I vanskelige dele af koden skal du gå gennem dem i en debugger for at se, hvad koden faktisk gør. Pythons pdb fungerer, men mange IDE'er har integrerede debuggers, der gør debugging lettere. PyReverse fra Logilab og PyNSource fra Andy Bulka er også nyttige til generering af UML-diagram.

Der er en proces til at fremstille UML-klassemodel fra en given input af kildekode. Med dette kan du vende et snapbillede af din kodebase til UML-klasser og forme klassediagram yderligere. Ved at bringe kodeindhold i den visuelle UML-model hjælper dette programmerere eller softwareingeniører til at gennemgå en implementering, identificere potentielle fejl eller mangel og se efter mulige forbedringer.

Bortset fra dette kan udviklere vende et kodebibliotek som UML-klasser og konstruere model med dem, gerne vende en generisk indsamlingsramme og udvikle din egen ramme ved at udvide den generiske. I dette kapitel vil vi gennemgå det øjeblikkelige omvendt af Python.

Objekter og primere

For fuldt ud at forstå de indre funktioner i Python, skal man først blive bekendt med, hvordan Python udarbejder og udfører kode. Når kode er samlet i Python er resultatet et kodeobjekt. Et kodeobjekt er uforanderligt og indeholder alle de oplysninger, som tolken har brug for til at køre koden. En byte-kodeinstruktion er repræsenteret som en byte-opcode-værdi efterfulgt af argumenter, når det kræves. Der henvises til data ved hjælp af et indeks i en af ​​kodeobjektets andre egenskaber.

En byte-kodestreng ser sådan ud:

\ x64 \ X02 \ x64 \ x08 \ x66 \ X02

Python-byte-kode fungerer på en stak med genstande. En mere initiativrig udvidelse ville være at forsøge at dekompilere byte-koden tilbage til læsbar Python-kildekode, komplet med objekt- og funktionsnavne. Python-kode kan distribueres i binær form ved hjælp af marskalkmodulet. Dette modul giver mulighed for at serialisere og deserialisere kodeobjekter vha. Butik og indlæse-funktionerne.

Det mest almindelige binære format er en kompileret Python-fil (.pyc), der indeholder et magisk nummer, et tidsstempel og et serialiseret objekt. Denne filtype produceres normalt af Python-fortolkeren som en cache til det kompilerede objekt for at undgå at skulle parse kilden flere gange. Disse teknikker er afhængige af let adgang til byte-kode og typeoplysninger.

Med et kodeobjekts bytekode kan kodelogik ændres eller endda udskiftes helt. Udtræk af typeoplysninger kan hjælpe med programdesignforståelse og identifikation af funktion og objektformål.

Tilsløring og hærdning af applikation-byte-kode vil altid være et løb mellem implementerne og dem, der søger at bryde den. For at forsøge at forsvare mod hentning af byte-kode er det logiske første skridt hen imod en oversættelsesløsning til runtime.

Egenskaber ved et kodeobjekt kan gemmes i ethvert underskrevet, krypteret eller på anden måde tilsløret format, der er fjernet eller oversat under kørslen og brugt til at instantisere et nyt objekt. Man kunne endda ændre den måde, variabelt navnopslag fungerer inden for tolken for at skjule navneoplysninger. Ved at tilføje et oversættelseslag mellem opslag af de faktiske navne og navnene i kildekoden, kunne en udvikler yderligere afbøde vendeforsøg.

Konklusion

Nu, efter at have læst alle disse, kan du føle behovet for at gå og eksperimentere et par af vejafgiftene derude. Så her er nogle værktøjer, der kan hjælpe dig med at vende tilbage til din python-kode:

  1. Paimei
  1. Sulley
  1. Carrera-samlingen
  1. PyEmu
  1. IDAPython
  1. ImmDbg

Alle disse er gode kodestykker, men hvad der virkelig gør dem fremragende er, når de bruges sammen. Husk, at dette på ingen måde er en komplet liste, bare dem, jeg bruger mest, og tænk, viser hvordan pythons fleksibilitet kan gøre en så kompliceret opgave, såsom reverse engineering, der er håndterbar.

Anbefalede artikler

Her er nogle artikler, der hjælper dig med at få flere detaljer om Reverse Engineering med Python, så bare gå gennem linket.

  1. 25 mest fantastiske Python-interviewspørgsmål og svar
  2. Kom i gang med Python og Django til webudvikling
  3. Hvad er fordelene og begrænsningerne ved at bruge Python?
  4. Karrierer i Python
  5. Reverse Engineering Tools

Kategori: