Kuvan lähde: pixabay.com

Python on korkean tason kieli. Vaikka monet teistä saattavat ajatella, että se on ohjelmointikieli, niin ei ole. Se on skriptikieli. Se ei tule lähelle konekoodia tai konekieltä. Mikä sitten tekee pythonista niin mielenkiintoisen? Jos sinulla on kokemusta uusien kokeiden testaamisesta tai sinulla on ollut keskustelu monien verkkoturva-asiantuntijoiden tai haittaohjelmien analysaattoreiden kanssa, he suosittelisivat pythonia ensisijaisena kielenään haittaohjelmien tai hyväksikäyttöjen kehittämisessä.

Vaikka jotkut ihmiset voivat mieluummin C, C ++ tai perl, äänestän henkilökohtaisesti pythonin puolesta. Syynä on, että se ei ole vain hyödyllinen työkalu ohjelman kirjoittamiseen, se on myös hyödyllinen rikkoa se.

Mikä on käänteinen suunnittelu?

Käänteinen suunnittelu on erittäin laaja käsite. Sitä ei voida määritellä yksinkertaisilla syntaksilla. Oikea käänteisen suunnittelun käsite on hajottaa koodi yksinkertaisemmiksi osiksi, ymmärtää se, muokata ja parantaa sitä oman tarkoituksemme mukaan ja koota sitten se uudelleen tarpeidemme mukaan. Jotta se olisi hieman yksinkertaisempi, saanen antaa joitain äärimmäisen yleisiä esimerkkejä.

Annetaan esimerkki Android-matkapuhelimesta. Valmistajat luovat varasto-rom ja myyvät sen kuluttajilleen. Mutta useimmiten se sisältää paljon bloatware-ohjelmia ja siitä tulee viivästynyt. Joten XDA: n ja androidcentralin kaltaisissa verkkosivustoissa on ihmisiä, jotka suunnittelevat tiensä ROM: iin, parantavat sitä ja tekevät siitä viivytyksen. Yksi käytännöllinen esimerkki olisi CyanogenMod Rom.

Mutta tämä oli vain esimerkki saadaksesi ymmärtämään, mikä se on. Käänteinen tekniikka on sama käsite, mutta aivan liian monimutkainen kuin vain muokkaaminen ROM.

Kokoelma ja Python

Jos sinulla on kokemusta Pythonista, tiedät, että python-skriptiä kirjoitettaessa voi se olla virus, hyötykuorma, troijalainen tai mikä tahansa tiedosto, se toimii vain tietokoneissa, joihin python on asennettu. Joten sanotaan, että olen kirjoittanut erinomaisen tietokone troijalaisen, joka voi ohittaa kaikki virustorjunta, ja aloitan sen käyttöönoton Windows-järjestelmässä, mutta jos Windows-järjestelmään ei ole asennettu python-tulkkia, se ei toimi. Joten on käännettävä jokainen kirjoitetun python-komentosarjan tiedosto suoritettavaksi ja otettava sitten käyttöön Windows-järjestelmässä.

Käänteinen suunnittelu Windows-suoritettavia

Nyt tiedät, että meidän on käännettävä python-skriptejä Windowsissa ajamiseksi, sinun on myös tiedettävä, että on oltava kääntäjä, joka muuntaa python-komentosarjat suoritettavaksi. Kyllä on. Sen nimi on Py2exe. Py2exe on yksinkertainen asennusohjelma, joka muuntaa python-skriptit erillisiksi Windows-ohjelmiksi. Nyt on myös toinen työkalu, joka muuntaa pythonissa kirjoitetut Windows-suoritettavat tiedostot takaisin python-skripteiksi. Sen nimi on Pyinstaller Exe Rebuilder.

Pyinstaller exe rebuilder on työkalu kääntää / kääntää insinöörin pyinstaller-ohjelmiston tuottamat suoritettavat tiedostot ilman pääsyä lähdekoodiin. Kun käynnistät EXE - se on pakkaamattoman muistissa. Tämä sisältää .pyc-tiedostot (python-koodi, joka muunnetaan tavukoodiksi). Periaatteessa mitä työkaluja kuten pyinstaller ja py2exe tekevät, ovat pakettikirjastot ja riippuvuudet kaikki yhdessä, jotta voit suorittaa ”itsenäisen” EXE: n joutumatta lataamaan niitä tai valmistelemaan konetta python-tulkilla.

On myös toinen työkalupakki, joka vie sinut hyvin lähelle lähdekoodia. Nimi on PyRetic, joka tarkoittaa Reverse Engineer Obfusposed Python-tavakoodia. Tämän työkalupakin avulla voit viedä muistissa olevan objektin takaisin lähdekoodiin ilman, että tarvitset pääsyä tavukoodiin suoraan levyltä. Tämä voi olla hyödyllinen, jos levyllä olevat pyc-tiedostot hävitetään yhdellä monista tavoista.

Suositellut kurssit

  • Koulutus Java Hibernate -sovelluksessa
  • Online-sertifiointikoulutus Java-keväällä
  • WordPress -ohjelma
  • Sertifiointikoulutus Rubyssa

Käänteinen suunnittelu vaikea tapa

Nyt yllä oleva osa on helppo ymmärtää ja tehdä se käytännössä, kun ylität perustiedot pythonissa. Mutta se ei aina ole niin. Joskus sinulla ei ole dokumentteja tai kommentteja python-komentosarjasta, ja myös tiedostoja voi olla, jotta ymmärrät kaikki itse. Nyt tästä aiheesta on mahtava kirja, mutta en keskity paljon siihen.

Kirjan nimi on ”Working Effectively with Legacy Code”. Kirja on riippumaton pythonista tai muusta kielestä, ja antaa sinulle idean käänteistekniikasta melkein millä tahansa kielellä. Kun yrität ymmärtää koodinosaa, painopiste on syy, miksi haluat ymmärtää sen.

Haluatko kääntää koodin suunnittelijaksi sen muuttamiseksi tai porttiksi, lähestymistapa molemmille olisi aivan erilainen. Joten vanhan koodin instrumentointi akkuilla ja testien telineillä sekä jäljitys / kirjaaminen on ratkaiseva tie pitkällä, kovalla logolla ymmärtää ja muokata turvallisesti ja vastuullisesti.

Käänteiset suunnittelutyökalut

Nyt on toinen tapa tehdä siitä hieman helppoa, jota voit seurata yllä olevien vaiheiden seuraamiseksi. On sivusto nimeltään Epydoc. Tarkistaa tällä sivustolla koodin ja luo siihen joitain asiakirjoja. Tulos ei ole yhtä hyvä kuin alkuperäinen dokumentaatio, mutta antaa ainakin kuvan siitä, kuinka se toimii tarkasti. Ja tekemällä tämän, voit aloittaa omien dokumenttien kirjoittamisen, ja kun olet kirjoittanut asiakirjan osittain, voit luoda uudelleen jäljellä olevan osan asiakirjasta sivustosta jäljelle jäävälle osalle.

Voit analysoida koodia jopa IDE-työkalulla. Tämä tyypillisesti antaa sinulle koodin loppuun saattamisen, mutta mikä vielä tärkeämpää, tässä tapauksessa on mahdollista yksinkertaisesti ctrl-napsauttaa muuttujaa nähdäksesi mistä se tulee. Tämä todella nopeuttaa asioita, kun haluat ymmärtää muiden kansojen koodin.

Lisäksi sinun on opittava virheenkorjaaja. Koodin hankalissa osissa joudut asentamaan ne läpi virheenkorjaimessa nähdäksesi, mitä koodi todella tekee. Pythons pdb toimii, mutta monilla IDE: llä on integroidut virheenkorjaimet, jotka helpottavat virheenkorjausta. PyReverse Logilabista ja PyNSource Andy Bulkalta ovat hyödyllisiä myös UML-kaavioiden luonnissa.

On olemassa prosessi, jolla tuotetaan UML-luokan malli annetusta lähdekoodin syötöstä. Tällä voit kääntää koodipohjasi kuvan UML-luokkiin ja muodostaa luokkakaavion edelleen. Tuomalla koodisisältö visuaaliseen UML-malliin, tämä auttaa ohjelmoijia tai ohjelmistosuunnittelijoita tarkistamaan toteutuksen, tunnistamaan mahdolliset virheet tai puutteet ja etsimään mahdollisia parannuksia.

Tämän lisäksi kehittäjät voivat kääntää koodikirjaston UML-luokiksi ja rakentaa mallin niiden kanssa, esimerkiksi kääntää geneerisen kokoelmakehyksen ja kehittää oman kehyksesi laajentamalla yleistä. Tässä luvussa käydään läpi Pythonin välitön peruutus.

Esineet ja alukkeet

Pythonin sisäisen toiminnan ymmärtämiseksi tulisi ensin perehtyä siihen, kuinka Python kokoaa ja suorittaa koodia. Kun koodi kootaan Pythoniin, tulos on koodiobjekti. Koodiobjektio on muuttumaton ja sisältää kaikki tiedot, joita tulkki tarvitsee koodin suorittamiseen. Tavukoodikäsky esitetään yhden tavun opcode-arvona, jota seuraa argumentit tarvittaessa. Tietoihin viitataan indeksillä yhdeksi muista koodiobjektin ominaisuuksista.

Tavukoodijono näyttää tältä:

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

Python-tavukoodi toimii pinoyksiköissä. Yrittäjällisempi laajennus olisi yrittää dekompoloida tavukoodi takaisin luettavissa olevaan Python-lähdekoodiin, joka sisältyy esineiden ja toimintojen nimiin. Python-koodi voidaan jakaa binaarimuodossa marsalkkimoduulia hyödyntämällä. Tämä moduuli tarjoaa kyvyn sarjoittaa ja ansaita koodiobjektit tallennus- ja lataustoimintojen avulla.

Yleisimmin esiintyvä binaarimuoto on käännetty Python-tiedosto (.pyc), joka sisältää maagisen numeron, aikaleiman ja sarjoitetun objektin. Python-tulkki tuottaa tämän tiedostotyypin yleensä käännetyn objektin välimuistina, jotta lähteen ei tarvitse jäsentää useita kertoja. Nämä tekniikat luottavat tavu- ja tyyppitietojen saatavuuden helppoon.

Koodiobjektin tavukoodilla koodilogiaa voidaan muuttaa tai jopa korvata kokonaan. Tyyppitietojen purkaminen voi auttaa ohjelmasuunnittelussa ymmärtämään ja tunnistamaan toiminnon ja objektin tarkoitukset.

Sovellustavujen hämärtäminen ja kovettuminen ovat aina kilpailua toteuttajien ja sitä rikkovien pyrkijöiden välillä. Yrittää puolustautua tavukoodin noutoilta looginen ensimmäinen askel on kohti ajonaikaista käännösratkaisua.

Koodiobjektin ominaisuudet voitaisiin tallentaa mihin tahansa allekirjoitettuun, salattuun tai muuten häivytettyyn muotoon, joka on purettu tai käännetty ajon aikana ja jota käytetään uuden objektin pilkkomiseen. Voitaisiin jopa muuttaa tapaa, jolla muuttujien nimien haku tulkin sisällä toimii nimeämistietojen hämärtämiseksi. Lisäämällä käännöskerroksen todellisten nimien ja lähdekoodin nimien väliin kehittäjä voisi edelleen lieventää peruutusyrityksiä.

johtopäätös

Nyt, kun olet lukenut kaikki nämä, saatat tuntea tarpeen mennä kokeilemaan joitain siellä olevista tiemaksuista. Joten, tässä on joitain työkaluja, jotka voivat auttaa suunnittelemaan tiesi python-koodisi:

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

Kaikki nämä ovat hienoja koodinpätkiä, mutta mikä todella tekee niistä erinomaisen, on se, että niitä käytetään yhdessä. Muista, että tämä ei ole mitenkään täydellinen luettelo, vain eniten käyttämäni luettelot osoittavat, kuinka pythonin joustavuus voi tehdä sellaisesta monimutkaisesta tehtävästä kuin käänteistekniikka hallittavissa.

Suositellut artikkelit

Tässä on artikkeleita, jotka auttavat sinua saamaan lisätietoja Python-tekniikan käänteisestä suunnittelusta, joten käy vain linkin läpi.

  1. 25 upeinta Python-haastattelua koskevat kysymykset ja vastaukset
  2. Aloita verkkoratkaisujen Python ja Django
  3. Mitkä ovat Pythonin käytön edut ja rajoitukset?
  4. Ura Pythonissa
  5. Käänteiset suunnittelutyökalut