Bildekilde: pixabay.com

Python er et høyt nivå språk. Selv om mange av dere kanskje tenker, det som et programmeringsspråk, er det ikke. Det er et skriftspråk. Den kommer ingen steder i nærheten av maskinkoden eller maskinspråket. Hva er det da som gjør python så interessant? Hvis du har noen erfaring med å pentesting eller du har hatt en samtale med mange websikkerhetseksperter eller malware-analysatorer, vil de alltid foreslå python som deres primære språk for å utvikle malwares eller exploits.

Mens noen mennesker kanskje foretrekker C, C ++ eller perl, vil jeg personlig stemme på python. Årsaken er at det ikke bare er nyttig som et verktøy for å skrive et program, det er også nyttig å bryte det.

Hva er omvendt teknikk?

Reverse Engineering er et veldig bredt konsept. Man kan faktisk ikke definere det med enkle syntaks. Riktig konsept med Reverse Engineering er å dele opp en kode i enklere deler, forstå den, endre og forbedre den i henhold til vårt eget formål og deretter sette den sammen igjen for å passe til våre behov. For å gjøre det litt enklere, la meg gi deg noen ekstreme vanlige eksempler.

La oss ta et eksempel på en Android-mobiltelefon. Produsenter Lag en aksjeliste og selg den til sine forbrukere. Men de fleste av gangene inneholder den mye bloatware, og den blir hengende. Så det er mennesker på nettsteder som XDA og androidcentral som omgjør ingeniører seg inn i ROM-en, forbedrer den og gjør den forsinket. Et praktisk eksempel er CyanogenMod Rom.

Men dette var bare et eksempel for å få deg til å forstå hva det er. Reverse Engineering har det samme konseptet, men det er for komplisert til å bare endre en ROM.

Samling og Python

Hvis du har erfaring med Python, vet du at når du skriver et python-skript, kan det være et virus, nyttelast, trojan eller hva filen er, det vil bare fungere på datamaskiner der python er installert. Så, la oss si, jeg har skrevet en utmerket datatrojan som kan omgå ethvert antivirus, og jeg begynner å distribuere det i et windows-system, men hvis windows-systemet ikke har python-tolken installert, vil det ikke fungere. Så, man trenger å samle hver fil av det skrevne python-skriptet til en kjørbar og deretter distribuere den i windows system.

Omvendt engineering Windows kjørbare

Nå vet du at vi trenger å sette sammen python-skript for å kjøre i windows, du må også vite at det må være en kompilator, som konverterer python-skript til en kjørbar. Ja det er. Navnet er Py2exe. Py2exe er et enkelt installasjonsprogram som konverterer python-skript til frittstående windows-programmer. Nå er det også et annet verktøy som konverterer Windows-kjørbare filer skrevet i python tilbake til python-skript. Navnet er Pyinstaller Exe Rebuilder.

Pyinstaller exe-ombygger er et verktøy for å rekompilere / reversere pyinstaller-genererte kjørbare filer uten å ha tilgang til kildekoden. Når du starter EXE - pakkes den i minnet. Dette inkluderer .pyc-filene (python-kode som er konvertert til bytecode). I utgangspunktet hva verktøy som pyinstaller og py2exe gjør er pakke biblioteker og avhengigheter alt sammen, slik at du kan kjøre den "frittstående" EXE uten å måtte laste ned dem eller klargjøre maskinen med en python-tolk.

Det er også et annet verktøysett som tar deg til nær kildekoden. Navnet er PyRetic som står for Reverse Engineer Obfuscated Python Bytecode. Denne verktøysettet lar deg ta et objekt i minnet tilbake til kildekoden, uten å ha tilgang til bytekoden direkte på disken. Dette kan være nyttig hvis programmene som er på disken blir obcuscated på en av mange måter.

Anbefalte kurs

  • Trening på Java Hibernate
  • Online sertifiseringstrening i Java Spring
  • WordPress-programmet
  • Sertifiseringstrening i Ruby

Reversering Den harde måten

Nå er ovennevnte del lett å forstå og praktisk gjøre det når du minst basiskunnskaper i python. Men det er ikke alltid tilfelle. Noen ganger har du ikke dokumentasjon eller kommentarer i python-skriptet, og det er også filer som du kan forstå for deg selv. Nå er det en fantastisk bok om denne delen, men jeg vil ikke konsentrere meg mye om det.

Navnet på boka er “Working Effective with Legacy Code”. Boken er uavhengig av python eller noe annet språk, og vil gi deg en ide for omvendt prosjektering på nesten alle språk. Nøkkelfokuset, når du prøver å forstå et stykke kode, er grunnen til at du vil forstå det.

Enten du vil reversere koden for å endre den, eller å porte den, vil tilnærmingen for begge være ganske annerledes. Så å instrumentere den gamle arven, med batterier og stillaser av tester og spore / logge, er den avgjørende banen på den lange, harde slog for å forstå og endre trygt og ansvarlig.

Reverse Engineering Tools

Nå er det en annen metode for å gjøre det litt enkelt som du kan følge sammen med å følge trinnene ovenfor. Det er et nettsted som heter Epydoc. På dette nettstedet, vil du sjekke koden og lage noe dokumentasjon for den. Resultatet vil ikke være like bra som den originale dokumentasjonen, men det vil i det minste gi deg en ide om hvordan den fungerer nøyaktig. Og ved å gjøre dette, kan du begynne å skrive din egen dokumentasjon, og etter å ha skrevet dokumentet delvis, kan du igjen generere det gjenværende delvise dokumentet fra nettstedet for den gjenværende delen.

Du kan til og med bruke IDE-verktøyet til å analysere koden. Dette gir deg typisk kodeutførelse, men enda viktigere i dette tilfellet, det gjør det mulig å bare ctrl-klikke på en variabel for å se hvor den kommer fra. Dette fremskynder virkelig ting når du vil forstå andre folks kode.

Du må også lære en feilsøking. I vanskelige deler av koden må du gå gjennom dem i en feilsøking for å se hva koden faktisk gjør. Pythons pdb fungerer, men mange IDE-er har integrerte feilsøkere, som gjør avlusing enklere. PyReverse fra Logilab og PyNSource fra Andy Bulka er også nyttige for generering av UML-diagram.

Det er en prosess å produsere UML-klassemodell fra en gitt innføring av kildekode. Med dette kan du reversere et øyeblikksfoto av kodebasen til UML-klasser og danne klassediagram videre. Ved å bringe kodeinnhold i visuell UML-modell, hjelper dette programmerere eller programvareingeniører til å gjennomgå en implementering, identifisere potensielle feil eller mangel og se etter mulige forbedringer.

Bortsett fra dette kan utviklere reversere et kodebibliotek som UML-klasser og konstruere modell med dem, som å reversere et generisk samlingsrammeverk og utvikle ditt eget rammeverk ved å utvide det generiske. I dette kapittelet vil vi gå gjennom øyeblikkelig reversering av Python.

Objekter og grunning

For å forstå Pythons indre virkning, må man først bli kjent med hvordan Python kompilerer og utfører kode. Når kode er satt sammen i Python er resultatet et kodeobjekt. Et kodeobjekt er uforanderlig og inneholder all informasjonen som tolken trenger for å kjøre koden. En byte-kodeinstruksjon er representert som en byte-opkodeverdi etterfulgt av argumenter når det er nødvendig. Data refereres til ved å bruke en indeks til en av de andre egenskapene til kodeobjektet.

En bytekodestreng ser slik ut:

\ x64 \ x02 \ x64 \ X08 \ x66 \ x02

Python-byte-kode fungerer på en bunke med elementer. En mer initiativrik utvidelse vil være å forsøke å dekompilere byte-koden tilbake til lesbar Python-kildekode, komplett med objekt- og funksjonsnavn. Python-kode kan distribueres i binær form ved å bruke marsjmodulen. Denne modulen gir muligheten til å serialisere og deserialisere kodeobjekter ved å bruke butikk- og lastfunksjonene.

Det hyppigste binære formatet er en kompilert Python-fil (.pyc) som inneholder et magisk nummer, en tidsstempel og et serialisert objekt. Denne filtypen er vanligvis produsert av Python-tolken som en hurtigbuffer for det kompilerte objektet for å unngå å måtte analysere kilden flere ganger. Disse teknikkene er avhengige av enkel tilgang til byte-kode og typeinformasjon.

Med et kodeobjekts bytekode kan kodelogikken endres eller til og med erstattes helt. Utpakking av typeinformasjon kan hjelpe i programdesignforståelse og identifisering av funksjons- og objektformål.

Tilsløring og herding av applikasjonens byte-kode vil alltid være et løp mellom implementatorene og de som søker å bryte den. For å forsøke å forsvare seg mot henting av byte-koder, er det logiske første skrittet mot en oversettelsesløsning for kjøretid.

Egenskaper til et kodeobjekt kan lagres i hvilket som helst signert, kryptert eller på annen måte tilslørt format som blir avbløffet eller oversatt under kjøretid og brukt til å instantisere et nytt objekt. Man kan til og med endre måten oppslag av variabel navn fungerer i tolken for å tilsløre navninformasjon. Ved å legge til et oversettelseslag mellom oppslaget av de faktiske navnene og navnene i kildekoden, kunne en utvikler redusere reverseringsforsøk ytterligere.

Konklusjon

Nå, etter å ha lest alle disse, kan du føle behov for å gå og eksperimentere noen få bompenger der ute. Så her er noen verktøy som kan hjelpe deg med å reversere deg inn i din python-kode:

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

Alle disse er gode kodestykker, men det som virkelig gjør dem enestående er når de brukes sammen. Husk at dette på ingen måte er en fullstendig liste, bare de jeg bruker mest og tror viser hvordan fleksibiliteten til python kan gjøre en så kompleks oppgave som omvendt engineering.

Anbefalte artikler

Her er noen artikler som vil hjelpe deg å få mer detaljert informasjon om Reverse Engineering med Python, så bare gå gjennom lenken.

  1. 25 mest fantastiske Python-intervjuspørsmål og svar
  2. Kom i gang med Python og Django for nettutvikling
  3. Hva er fordelene og begrensningene ved å bruke Python?
  4. Karrierer i Python
  5. Reverse Engineering Tools