Kujutise allikas: pixabay.com

Python on kõrgetasemeline keel. Kuigi paljud teist võivad arvata, et see on programmeerimiskeel, ei ole see nii. See on skriptikeel. See ei ole masinkoodi ega masina keele lähedal. Mis teeb pythonist nii huvitava? Kui teil on korrektse testimise kogemust või teil on olnud vestlusi paljude veebiturbeekspertide või pahavaraanalüsaatoritega, soovitavad nad pahavara või ekspluateerimise arendamiseks alati oma peamiseks keeleks python.

Kuigi mõned inimesed võivad eelistada C, C ++ või perli, hääletaksin ma isiklikult pythoni poolt. Põhjus on see, et see pole kasulik ainult programmi kirjutamiseks, vaid on kasulik ka sellest lahti saada.

Mis on pöördprojekteerimine?

Pöördtehnika on väga lai mõiste. Seda ei saa tegelikult lihtsate süntaksidega määratleda. Nõuetekohane pöördprojekteerimise kontseptsioon on kood jaotamine lihtsamateks osadeks, selle mõistmine, modifitseerimine ja täiustamine vastavalt meie enda eesmärkidele ning seejärel selle kokkupanek vastavalt meie vajadustele. Pisut lihtsamaks muutmiseks lubage mul tuua teile mõned tavalised näited.

Võtame näite Androidi mobiiltelefonist. Tootjad loovad lao rom ja müüvad selle oma tarbijatele. Kuid enamasti sisaldab see palju bloatware ja see muutub laggy. Niisiis, sellistel veebisaitidel nagu XDA ja androidcentral on inimesi, kes muudavad oma teed ROM-i, täiustavad seda ja muudavad selle mahajäämuse tõestamiseks. Üks praktiline näide oleks CyanogenMod Rom.

Kuid see oli vaid näide, et mõistaksite, mis see on. Pöördtehnoloogial on sama kontseptsioon, kuid see on liiga keeruline, kui lihtsalt ROM-i muutmine.

Kompileerimine ja Python

Kui teil on Pythoni kogemus, siis teate, et pythoni skripti kirjutades võib see olla viirus, kasulik koormus, troojalane või mis iganes fail see on, töötab see ainult arvutites, kuhu python on installitud. Ehk, ütleme nii, et ma olen kirjutanud suurepärase arvutiviiruse, mis suudab igast viirusetõrjest mööda minna, ja hakkan seda Windowsi süsteemi juurutama, kuid kui Windowsi süsteemis pole pythonitõlki installitud, siis see ei tööta. Niisiis, üks tuleb kompileerida iga kirjutatud pythoni skripti fail käivitatavasse faili ja seejärel see Windowsi süsteemi juurutada.

Windowsi käivitatavad pöördprojekteerimised

Nüüd teate, et me peame akendes käitamiseks Python-skripte kompileerima, peate teadma ka seda, et peab olema kompilaator, mis teisendab python-skriptid käivitatavaks. Jah seal on. Selle nimi on Py2exe. Py2exe on lihtne installija, mis teisendab pythoni skriptid eraldiseisvateks Windowsi programmideks. Nüüd on veel üks tööriist, mis teisendab pythoni kirjutatud Windowsi käivitatavad failid tagasi pythoni skriptideks. Selle nimi on Pyinstaller Exe Rebuilder.

Pyinstalleri exe ümberehitaja on tööriist püinstalleri loodud käivitatavate failide ümberkomponeerimiseks / pöördprojekteerimiseks ilma lähtekoodile juurdepääsuta. Kui käivitate EXE - see on mällu pakkimata. See hõlmab .pyc-faile (pythoni kood, mis teisendatakse baitkoodiks). Põhimõtteliselt on sellised tööriistad nagu püinstaller ja py2exe pakettraamatukogud ja sõltuvused kõik koos, nii et saate iseseisvat EXE-i käivitada ilma, et peaksite neid alla laadima või masinat python-tõlgi abil ette valmistama.

Samuti on veel üks tööriistakomplekt, mis viib teid lähtekoodi lähedale. Nimi on PyRetic, mis tähistab pöördinseneri hägustatud Pythoni baidikoodi. See tööriistakomplekt võimaldab teil võtta mälus oleva objekti tagasi lähtekoodi, ilma et oleks vaja juurdepääsu otse kettale kuuluvale baitkoodile. See võib olla kasulik, kui kettarakenduste pyc-d on mitmel viisil hägustatud.

Soovitatavad kursused

  • Koolitus Java Hibernate'is
  • Veebipõhine sertifitseerimise koolitus Java Kevadel
  • WordPressi programm
  • Atesteerimiskoolitus Ruby's

Pöördtehnika raske tee

Nüüd on ülaltoodud osast lihtne aru saada ja seda praktiliselt teha, kui teil on põhiteadmised pythonis vähemalt. Kuid see pole alati nii. Mõnikord ei ole teil Pythoni skriptis dokumente ega kommentaare ning võib-olla on ka faile, et saaksite kõik ise aru. Nüüd on sellest osast üks vinge raamat, kuid ma ei keskendu sellele kuigi palju.

Raamatu nimi on “Pärilikkoodiga tõhus töötamine”. Raamat ei sõltu pütoonist ega muust keelest ning annab teile idee pöördprojekteerimiseks peaaegu igas keeles. Kooditüki mõistmisel on põhirõhk põhjus, miks soovite sellest aru saada.

Ükskõik, kas soovite koodi muutmiseks selle muutmiseks pöördprojekteerida või teisaldada, oleks mõlema lähenemisviis üsna erinev. Niisiis, pärandkoodi seadistamine koos akude ja testide tellingute ning jälgimise / logimisega on pika ja kõva aja jooksul otsustav tee ohutu ja vastutustundliku mõistmise ja muutmise poole.

Pöördtehnilised tööriistad

Nüüd on veel üks meetod, mis muudab selle natuke lihtsaks, mida saate järgida koos ülaltoodud toimingute järgimisega. On olemas sait nimega Epydoc. Sellel saidil kontrollib koodi ja loob selle jaoks dokumendid. Tulemus ei ole küll nii hea kui originaaldokumentatsioon, kuid see annab teile vähemalt aimu, kuidas see täpselt töötab. Ja seda tehes võite hakata oma dokumente kirjutama ja pärast dokumendi osalist kirjutamist saate uuesti genereerida saidilt järelejäänud osa jaoks allesjäänud osalise dokumendi.

Koodi analüüsimiseks saate kasutada isegi IDE-tööriista. Tavaliselt annab see teile koodi lõpuleviimise, kuid veelgi tähtsam on see, et sel juhul on võimalik lihtsalt muutujal Ctrl klõpsata, et näha, kust see pärineb. See kiirendab tegelikult asju, kui soovite aru saada teiste inimeste koodidest.

Samuti peate õppima siluri. Koodi keerukates osades peate need silurist läbi vaatama, et näha, mida kood tegelikult teeb. Pythons pdb töötab, kuid paljudel IDE-del on integreeritud silurid, mis lihtsustavad silumist. PyReverse Logilabist ja PyNSource Andy Bulkast on abiks ka UML-diagrammide genereerimisel.

UML-klassi mudeli valmistamiseks antud lähtekoodi sisendist on protsess. Selle abil saate oma koodialuse hetkepildi ümber pöörata UML-klassidesse ja moodustada klassiskeemi veelgi. Koodisisu visuaalsesse UML-mudelisse viimisega aitab see programmeerijatel või tarkvarainseneridel teostust üle vaadata, tuvastada võimalikud vead või puudused ja otsida võimalikke parandusi.

Lisaks võivad arendajad kooditeeki UML-klassidena tagasi pöörata ja koos nendega mudeli konstrueerida, näiteks geneerilise koguraamistiku ümberpööramiseks ja teie enda raamistiku arendamiseks, laiendades seda. Selles peatükis tutvume Pythoni kohese tagasikäiguga.

Objektid ja praimerid

Pythoni sisemise töö täielikuks mõistmiseks tuleks kõigepealt tutvuda sellega, kuidas Python koodi kompileerib ja käivitab. Kui kood Pythonis kompileeritakse, on tulemuseks koodiobjekt. Koodiobjekt on muutumatu ja sisaldab kogu teavet, mida tõlk vajab koodi käivitamiseks. Baidikoodi käsk on esitatud ühebaidise opcode väärtusena, millele järgnevad vajadusel argumendid. Andmetele viidatakse indeksi abil koodiobjekti muudesse omadustesse.

Baidikoodi string näeb välja selline:

\ x64 \ x02 \ x64 \ x08 \ x66 \ x02

Pythoni baitkood töötab virna üksuste korral. Ettevõtlikum laiendus oleks katse baidikood dekompileerida loetavaks Pythoni lähtekoodiks koos objektide ja funktsioonide nimedega. Pythoni koodi saab binaarses vormis levitada marssalimooduli abil. See moodul annab võimaluse koodiobjekte järjestada ja neid realiseerida, kasutades salvestamise ja laadimise funktsioone.

Kõige sagedamini esinev kahendvorming on kompileeritud Pythoni fail (.pyc), mis sisaldab võlanumbrit, ajatemplit ja seeriaobjekti. Seda failitüüpi genereerib Pythoni tõlk tavaliselt kompileeritud objekti vahemälluna, et vältida allika korduvat parsimist. Need tehnikad tuginevad hõlpsale juurdepääsule baitkoodile ja tüüpi teabele.

Koodiobjekti baitkoodiga saab koodiloogikat muuta või isegi täielikult asendada. Tüübi teabe ekstraheerimine võib aidata programmi kavandamisel aru saada ning funktsiooni ja objekti eesmärke tuvastada.

Rakenduse baitkoodi häbistamine ja kõvendamine on alati võistlusprogramm rakendajate ja seda rikkuda püüdvate vahel. Baidikoodi hankimise eest kaitsmiseks on loogiline esimene samm käitustõlkelahenduse poole.

Koodiobjekti atribuute saab salvestada mis tahes allkirjastatud, krüptitud või muul moel hajutatud vormingus, mis on käituse ajal tühistatud või tõlgitud ja mida kasutatakse uue objekti kiirendamiseks. Võiks muuta isegi seda, kuidas muutujate nimeotsingud tõlgis töötavad, et nimeteavet hävitada. Lisades tõlkekihi tegelike nimede otsimise ja lähtekoodis olevate nimede vahele, saaks arendaja tagurduskatseid veelgi leevendada.

Järeldus

Nüüd, kui olete kõik need läbi lugenud, võite tunda vajadust minna proovima mõnda seal makstavat teemaksu. Niisiis, siin on mõned tööriistad, mis aitavad teil python-koodi kujundada:

  1. Paimei
  1. Sulley
  1. Carrera kollektsioon
  1. PyEmu
  1. IDAPython
  1. ImmDbg

Kõik need on suurepärased kooditükid, kuid need muudavad need silmapaistvaks just siis, kui neid koos kasutatakse. Pidage meeles, et see pole kaugeltki täielik loetelu, vaid need, mida ma kõige rohkem kasutan ja mis minu arvates näitavad, kuidas pythoni paindlikkus võib muuta sellise keeruka ülesande nagu pöördprojekteerimine juhitavaks.

Soovitatavad artiklid

Siin on mõned artiklid, mis aitavad teil Pythoni pöördprojekteerimist üksikasjalikumalt uurida, nii et lihtsalt minge lingi kaudu.

  1. 25 kõige hämmastavamat Pythoni intervjuu küsimust ja vastust
  2. Alustage veebiarenduse Pythoni ja Django kasutamist
  3. Millised on Pythoni kasutamise eelised ja piirangud?
  4. Karjäär Pythonis
  5. Pöördtehnilised tööriistad

Kategooria: