Bildkälla: pixabay.com

Python är ett språk på hög nivå. Även om många av er kanske tror att det är ett programmeringsspråk så är det inte. Det är ett skriptspråk. Det kommer ingenstans nära maskinkoden eller maskinspråket. Vad är det då som gör python så intressant? Om du har någon erfarenhet av att pentesting eller har haft en konversation med många webbsäkerhetsexperter eller skadliga analysatorer, skulle de alltid föreslå python som sitt primära språk för att utveckla malwares eller exploater.

Medan vissa människor kanske föredrar C, C ++ eller perl, skulle jag personligen rösta på python. Anledningen är att det inte bara är användbart som ett verktyg för att skriva ett program, det är också användbart att bryta det.

Vad är omvänd teknik?

Reverse Engineering är ett mycket brett koncept. Man kan faktiskt inte definiera det med enkla syntaxer. Rätt koncept med omvänd teknik är att dela upp en kod i enklare delar, förstå den, ändra och förbättra den enligt vårt eget syfte och sedan sätta ihop den igen så att den passar våra behov. För att göra det lite enklare, låt mig ge dig några extrema vanliga exempel.

Låt oss ta ett exempel på en Android-mobiltelefon. Tillverkare Skapa en aktierum och sälja den till sina konsumenter. Men de flesta gånger, innehåller det mycket bloatware och det blir laggy. Så det finns människor på webbplatser som XDA och androidcentral som omvänder sig till ROM, förbättrar det och gör det fördröjd. Ett praktiskt exempel skulle vara CyanogenMod Rom.

Men detta var bara ett exempel för att få dig att förstå vad det är. Reverse Engineering har samma koncept men det är för komplicerat för att bara ändra en ROM.

Sammanställning och Python

Om du har erfarenhet av Python, vet du att när du skriver ett python-skript, kan det vara ett virus, nyttolast, trojan eller vad filen än är, det fungerar bara i datorer där python är installerat. Så, låt oss säga, jag har skrivit en utmärkt datortrojan som kan kringgå alla antivirusprogram, och jag börjar distribuera det i ett windows-system, men om windows-systemet inte har python-tolk installerat, kommer det inte att fungera. Så måste man sammanställa varje fil i det skrivna pythonskriptet till en körbar och sedan distribuera den i windows system.

Omvänd teknik Windows körbara

Nu vet du att vi måste kompilera pythonskript för att köras i windows, du måste också veta att det måste finnas en kompilator, som omvandlar pythonskript till en körbar. Ja, det finns det. Den heter Py2exe. Py2exe är ett enkelt installationsprogram som konverterar pythonskript till fristående Windows-program. Nu finns det också ett annat verktyg som konverterar Windows-körbara filer skrivna i python tillbaka till python-skript. Det heter Pyinstaller Exe Rebuilder.

Pyinstaller exe-ombyggare är ett verktyg för att kompilera / omvända ingenjörer som genereras körbara pyinstaller utan att ha tillgång till källkoden. När du startar EXE - packas det upp i minnet. Detta inkluderar .pyc-filerna (pythonkod som konverteras till bytekod). I princip vad verktyg som pyinstaller och py2exe gör är paketbibliotek och beroenden tillsammans så att du kan köra den "fristående" EXE utan att behöva ladda ner dem eller förbereda maskinen med en python-tolk.

Det finns också en annan verktygssats som tar dig till mycket nära källkoden. Namnet är PyRetic som står för Reverse Engineer Obfuscated Python Bytecode. Med den här verktygssatsen kan du ta ett objekt i minnet tillbaka till källkoden utan att behöva åtkomst till bytkoden direkt på disken. Detta kan vara användbart om applikationerna som visas på disken döljs på ett av många sätt.

Rekommenderade kurser

  • Träning i Java Hibernate
  • Online certifieringsträning i Java Spring
  • WordPress-program
  • Certifieringsträning i Ruby

Reverse Engineering The Hard Way

Nu är ovanstående del lätt att förstå och praktiskt göra det när du åtminstone baserar kunskapen i python. Men så är inte alltid fallet. Ibland har du inte någon dokumentation eller kommentarer i pythonskriptet, och det finns alltför många filer för att du ska förstå allt själv. Nu finns det en fantastisk bok om den här delen, men jag kommer inte att koncentrera mig mycket på det.

Namnet på boken är "Working Effectively with Legacy Code". Boken är oberoende av python eller något annat språk och kommer att ge dig en idé för omvänd teknik på nästan vilket språk som helst. Nyckelfokuset när du försöker förstå en kod är orsaken till att du vill förstå det.

Oavsett om du vill omvända koden för att modifiera den, eller för att hamna i den, skulle tillvägagångssättet för båda vara helt annorlunda. Så, instrumentering av den äldre koden, med batterier och byggnadsställningar av tester och spårning / loggning är den avgörande vägen på den långa, hårda slog för att förstå och ändra säkert och ansvarsfullt.

Reverse Engineering Tools

Nu finns det en annan metod för att göra det lite enkelt som du kan följa tillsammans med att följa stegen ovan. Det finns en webbplats som kallas Epydoc. På denna webbplats kommer du att kontrollera koden och skapa dokumentation för den. Resultatet blir inte lika bra som originaldokumentationen, men det kommer åtminstone att ge dig en uppfattning om hur den fungerar exakt. Och genom att göra detta kan du börja skriva din egen dokumentation, och efter att du delvis har skrivit dokumentet kan du igen generera det återstående deldokumentet från webbplatsen för den återstående delen.

Du kan till och med använda IDE-verktyget för att analysera koden. Detta ger dig vanligtvis kodavslutning, men ännu viktigare är det att det bara är möjligt att bara klicka på en variabel för att se var den kommer ifrån. Detta påskyndar verkligen saker när du vill förstå andra människors kod.

Du måste också lära dig en felsökare. I svåra delar av koden måste du gå igenom dem i en felsökare för att se vad koden faktiskt gör. Pythons pdb fungerar, men många IDE har integrerade felsökare, vilket underlättar felsökning. PyReverse från Logilab och PyNSource från Andy Bulka är också användbara för generering av UML-diagram.

Det finns en process för att producera UML-klassmodell från en given inmatning av källkod. Med detta kan du vända ett snapshot av din kodbas till UML-klasser och bilda klassdiagram ytterligare. Genom att föra kodinnehåll i visuell UML-modell, hjälper detta programmerare eller programvaruingenjörer att granska en implementering, identifiera potentiella buggar eller brister och leta efter möjliga förbättringar.

Utöver detta kan utvecklare vända ett kodbibliotek som UML-klasser och konstruera modell med dem, gillar att vända ett generiskt samlingsramverk och utveckla ditt eget ramverk genom att utöka det generiska. I det här kapitlet kommer vi att gå igenom Pythons omedelbara omvändhet.

Objekt och grundare

För att fullt ut förstå de inre verkningarna av Python bör man först bekanta sig med hur Python sammanställer och kör kod. När kod sammanställs i Python är resultatet ett kodobjekt. Ett kodobjekt är oföränderligt och innehåller all den information som tolkaren behöver för att köra koden. En byte-kodinstruktion representeras som ett en-byte-opkodvärde följt av argument när det krävs. Data refereras med hjälp av ett index till en av de andra egenskaperna för kodobjektet.

En byte-kodsträng ser ut så här:

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

Python-byte-kod fungerar på en bunt med artiklar. En mer initiativrik förlängning skulle vara att försöka att dekompilera byte-koden tillbaka till läsbar Python-källkod, komplett med objekt- och funktionsnamn. Python-kod kan distribueras i binär form genom att använda marshalmodulen. Denna modul ger möjlighet att serialisera och deserialisera kodobjekt med hjälp av butiks- och lastfunktionerna.

Det vanligaste binära formatet är en kompilerad Python-fil (.pyc) som innehåller ett magiskt nummer, en tidsstämpel och ett serialiserat objekt. Denna filtyp produceras vanligtvis av Python-tolkaren som en cache för det sammanställda objektet för att undvika att behöva analysera källan flera gånger. Dessa tekniker förlitar sig på enkel åtkomst till byte-kod och typinformation.

Med ett kodobjekts byte-kod kan kodlogiken ändras eller till och med ersättas helt. Att extrahera typinformation kan hjälpa till att förstå programdesign och identifiering av funktions- och objektändamål.

Förstörning och härdning av applikation-byte-kod kommer alltid att vara ett lopp mellan implementatörerna och de som vill bryta den. För att försöka försvara mot hämtning av byte-kod är det logiska första steget mot en översättningslösning för runtime.

Egenskaper för ett kodobjekt kan lagras i alla signerade, krypterade eller på annat sätt dolda format som avlägsnas eller översättas under körning och används för att instansera ett nytt objekt. Man kan till och med ändra hur variabla namnuppslag fungerar inom tolkarna för att dölja namninformation. Genom att lägga till ett översättningslager mellan sökningen av de verkliga namnen och namnen i källkoden kan en utvecklare ytterligare mildra omvändningsförsök.

Slutsats

Nu, efter att ha läst alla dessa, kanske du känner behovet av att gå och experimentera några av vägtullarna där ute. Så här är några verktyg som kan hjälpa dig att omvända dig in i din pythonkod:

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

Alla dessa är bra kodkoder, men det som verkligen gör dem enastående är när de används tillsammans. Kom ihåg att det inte alls är en komplett lista, bara de som jag använder mest och tror att hur pythons flexibilitet kan göra en så komplex uppgift som omvänd teknik hanterbar.

Rekommenderade artiklar

Här är några artiklar som hjälper dig att få mer information om Reverse Engineering med Python så bara gå igenom länken.

  1. 25 mest fantastiska Pythonintervjufrågor och svar
  2. Kom igång med Python och Django för webbutveckling
  3. Vilka är fördelarna och begränsningarna med att använda Python?
  4. Karriärer i Python
  5. Reverse Engineering Tools

Kategori: