Източник на изображението: pixabay.com

Python е език на високо ниво. Въпреки че много от вас може да мислят, че това е език за програмиране, не е така. Това е език за скриптове. Той не се приближава до машинния код или езика на машината. Тогава какво прави питона толкова интересен? Ако имате опит в пенистирането или сте водили разговор с много експерти в областта на сигурността или анализатори на зловреден софтуер, те винаги биха предложили python като техен основен език за разработване на зловредни програми или експлоатации.

Докато някои хора могат да предпочитат C, C ++ или perl, аз лично бих гласувал за python. Причината е, че тя е не само полезна като инструмент за писане на програма, но също така е полезно да я разчупите.

Какво е обратен инженеринг?

Обратното инженерство е много широко понятие. Човек всъщност не може да го дефинира с прости синтаксиси. Правилната концепция на Reverse Engineering е да разгради код на по-прости части, да го разбере, модифицира и подобри според собствената ни цел и след това да го събере отново, за да отговаря на нашите нужди. За да е малко по-просто, нека ви дам някои крайни общи примери.

Да вземем пример за мобилен телефон с Android. Производителите създават ром за запаси и го продават на своите потребители. Но в повечето случаи той съдържа много средства за издуване и става мързелив. Така че, има хора в уебсайтове като XDA и androidcentral, които ревизират инженерно пътя си в ROM, подобряват го и го правят изоставащ. Един практически пример е CyanogenMod Rom.

Но това беше само пример, за да разберете какво е то. Reverse Engineering има същата концепция, но начинът й е твърде сложен, че просто модифицирането на ROM.

Компилация и Python

Ако имате опит в Python, тогава знаете, че когато пишете python скрипт, може да е вирус, полезен товар, троянски или какъвто и да е файл, той ще работи само в компютри, в които е инсталиран python. Така че, да кажем, написах отличен компютърен троянец, който може да заобиколи всеки антивирус и започвам да го внедрявам в Windows система, но ако системата Windows няма инсталиран интерпретатор на python, тогава той няма да работи. Така че, трябва да компилирате всеки файл от написания python скрипт в изпълним файл и след това да го разгърнете в Windows система.

Обратно изпълнение на Windows изпълними файлове

Сега знаете, че ние трябва да компилираме python скриптове, за да работи в Windows, вие също трябва да знаете, че трябва да има компилатор, който превръща python скриптове в изпълним файл. Да, има. Името му е Py2exe. Py2exe е обикновен инсталатор, който конвертира python скриптове в самостоятелни програми за Windows. Сега има и друг инструмент, който преобразува изпълними файлове на Windows, написани в python, обратно в python скриптове. Името му е Pyinstaller Exe Rebuilder.

Възстановителя на Pyinstaller exe е инструмент за прекомпилиране / обратен инженеринг, генериран от pyinstaller изпълними файлове, без да има достъп до изходния код. Когато стартирате EXE - той се разопакова в паметта. Това включва .pyc файлове (python код, който се преобразува в байт код). Основно това, което правят инструменти като pyinstaller и py2exe, са библиотеките на пакети и зависимостите всички заедно, така че можете да стартирате самостоятелния EXE, без да се налага да ги изтегляте или да подготвяте машината с интерпретатор на python.

Има и друг инструментариум, който ви отвежда много близо до изходния код. Името е PyRetic, което означава преобръщен обмен на Python Bytecode от Reverse Engineer. Този инструментариум ви позволява да върнете обект в паметта обратно към изходния код, без да се нуждаете от достъп до байт-кода директно на диска. Това може да бъде полезно, ако приложенията на pyc на диска са засечени по един от многото начини.

Препоръчителни курсове

  • Обучение на Java Hibernate
  • Обучение за онлайн сертифициране в Java пролет
  • Програма WordPress
  • Обучение за сертифициране в Ruby

Обратно инженерство Трудният начин

Сега горната част е лесна за разбиране и практически го направете, когато утвърдите основните знания в python. Но това не винаги е така. Понякога нямате никаква документация или коментари в скрипта на python и има твърде файлове, за да разберете сами. Сега има една страхотна книга в тази част, но няма да се концентрирам много върху това.

Името на книгата е „Работа ефективно с наследствен код“. Книгата е независима от python или друг език и ще ви даде идея за обратна инженерия на почти всеки език. Ключовият фокус, когато се опитвате да разберете парче код, е причината, поради която искате да го разберете.

Независимо дали искате да промените инженерния код, за да го модифицирате, или да го приставите, подходът и за двете би бил съвсем различен. И така, създаването на наследения код с батерии и скеле на тестове и проследяване / регистриране е решаващият път на дългия, твърд лозунг за разбиране и модифициране безопасно и отговорно.

Обратни инженерни инструменти

Сега има още един метод, за да го направите малко по-лесен, който можете да следвате, като следвате горните стъпки. Има сайт, наречен Epydoc. В този сайт ще проверите кода и ще създадете някаква документация за него. Резултатът няма да е толкова добър, колкото оригиналната документация, но най-малкото ще ви даде представа как точно работи. И като направите това, можете да започнете да пишете собствена документация и след като частично напишете документа, можете отново да генерирате оставащия частичен документ от сайта за останалата част.

Можете дори да използвате инструмента IDE за анализ на кода. Това обикновено ви дава завършване на код, но по-важното е, че в този случай е възможно просто да натиснете ctrl върху променлива, за да видите откъде идва. Това наистина ускорява нещата, когато искате да разберете кода на други хора.

Също така, трябва да научите грешка. В сложни части на кода ще трябва да преминете през тях в отстраняване на грешки, за да видите какво всъщност прави кодът. Pythons pdb работи, но много IDE имат интегрирани грешки, които правят отстраняването на грешки по-лесно. PyReverse от Logilab и PyNSource от Andy Bulka също са полезни за генериране на UML диаграми.

Има процес за производство на модел на клас UML от даден вход на изходния код. С това можете да обърнете моментна снимка на вашата кодова база към UML класове и по-нататък диаграма на класовете на формите. Чрез въвеждането на кодово съдържание във визуален UML модел, това помага на програмисти или софтуерни инженери да преразгледат внедряване, да идентифицират потенциални грешки или недостатъци и да търсят възможни подобрения.

Освен това, разработчиците могат да обърнат кодова библиотека като UML класове и да конструират модел с тях, като да обърнат обща рамка за колекция и да разработят своя собствена рамка, като разширят общата. В тази глава ще преминем през моменталния обрат на Python.

Обекти и грундове

За да разберете напълно вътрешната работа на Python, първо трябва да се запознаете с начина, по който Python компилира и изпълнява код. Когато кодът се компилира в Python, резултатът е кодов обект. Кодовият обект е неизменен и съдържа цялата информация, необходима на интерпретатора за стартиране на кода. Инструкцията за байтов код е представена като еднобайтов стойност на кода, последвана от аргументи, когато се изисква. Данните се препращат чрез индекс към едно от другите свойства на кодовия обект.

Низовият код на байт изглежда така:

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

Байтовият код на Python оперира върху стек от елементи. По-предприемчиво разширение би било да се опита да декомпилира байтовия код обратно в четим изходен код на Python, допълнен с имена на обекти и функции. Python код може да бъде разпространен в двоичен вид чрез използване на маршал модула. Този модул предоставя възможност за сериализиране и десериализиране на кодови обекти, използвайки функциите за съхранение и зареждане.

Най-често срещаният двоичен формат е компилиран Python файл (.pyc), който съдържа вълшебно число, времеви отпечатък и сериализиран обект. Този тип файл обикновено се произвежда от интерпретатора Python като кеш на компилирания обект, за да не се налага да анализирате източника няколко пъти. Тези техники разчитат на лекотата на достъп до информация за байт и тип.

С байтовия код на кодовия обект кодовата логика може да бъде променена или дори изцяло заменена. Извличането на информация от типа може да помогне при разбирането на дизайна на програмата и идентифицирането на функциите и целите на обекта.

Затъмняването и втвърдяването на байтовия код на приложението винаги ще бъде състезание между реализаторите и тези, които искат да го прекъснат. За да се опитате да се защитите срещу извличане на байтов код, логичната първа стъпка е към решение за превод по време на изпълнение.

Свойствата на кодовия обект могат да се съхраняват във всеки подписан, криптиран или по друг начин затъмнен формат, който се дезабюкира или превежда по време на изпълнение и се използва за създаване на нов обект. Човек може дори да промени начина, по който търсенето на променливото име работи в интерпретатора, за да обсеби информация за именуване. Чрез добавяне на слой за превод между търсенето на действителните имена и имената в изходния код, програмистът може допълнително да смекчи опитите за обръщане.

заключение

Сега, след като прочетете всичко това, може да почувствате нужда да отидете и да експериментирате няколко от пътните такси там. И така, ето няколко инструмента, които могат да ви помогнат да обърнете инженерния път към вашия python код:

  1. Paimei
  1. Съли
  1. Колекцията Carrera
  1. PyEmu
  1. IDAPython
  1. ImmDbg

Всичко това е страхотно парче код, но това, което наистина ги прави изключителни, е когато се използват заедно. Имайте предвид, че това по никакъв начин не е пълен списък, а само тези, които използвам най-много и мислят, показват как гъвкавостта на python може да направи толкова сложна задача като обратната инженерия да бъде управляема.

Препоръчителни статии

Ето няколко статии, които ще ви помогнат да получите повече подробности за Обратното инженерство с Python, така че просто преминете през линка.

  1. 25 най-удивителни Python интервюта въпроси и отговори
  2. Започнете с Python и Django за уеб разработка
  3. Какви са ползите и ограниченията от използването на Python?
  4. Кариера в Python
  5. Обратни инженерни инструменти