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

Python - это язык высокого уровня. Хотя многие из вас могут подумать, что это язык программирования, это не так. Это язык сценариев. Это не имеет ничего общего с машинным кодом или машинным языком. Тогда что же делает Python таким интересным? Если у вас есть какой-либо опыт в тестировании пент-тестов или у вас был разговор со многими экспертами по веб-безопасности или анализаторами вредоносного ПО, они всегда предлагали бы Python в качестве основного языка для разработки вредоносных программ или эксплойтов.

Хотя некоторые люди могут предпочесть C, C ++ или Perl, я бы лично проголосовал за Python. Причина в том, что он не только полезен в качестве инструмента для написания программы, но и полезен для ее разрушения.

Что такое обратный инжиниринг?

Обратный инжиниринг - это очень широкое понятие. На самом деле нельзя определить это с помощью простых синтаксисов. Правильная концепция обратного инжиниринга состоит в том, чтобы разбить код на более простые части, понять его, изменить и улучшить его в соответствии с нашими собственными целями, а затем собрать его в соответствии с нашими потребностями. Чтобы сделать это немного проще, позвольте мне привести несколько очень распространенных примеров.

Давайте возьмем пример мобильного телефона Android. Производители создают складские запасы и продают их своим потребителям. Но в большинстве случаев он содержит много раздуваемого программного обеспечения и становится медленным. Таким образом, на сайтах, таких как XDA и androidcentral, есть люди, которые воссоздают свой путь в ПЗУ, улучшают его и делают его более устойчивым к задержкам. Одним из практических примеров был бы CyanogenMod 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 rebuilder - это инструмент для перекомпиляции / реинжиниринга сгенерированных Pyinstaller исполняемых файлов без доступа к исходному коду. При запуске EXE - он распаковывается в память. Это включает в себя файлы .pyc (код Python, который преобразуется в байт-код). В основном то, что делают такие инструменты, как pyinstaller и py2exe, - это библиотеки пакетов и зависимости вместе, так что вы можете запустить «автономный» EXE без необходимости загружать их или подготавливать машину с интерпретатором python.

Существует также еще один инструментарий, который приведет вас очень близко к исходному коду. Название - PyRetic, что означает байт-код Python для Reverse Engineer. Этот инструментарий позволяет вернуть объект в памяти обратно в исходный код без необходимости доступа к байт-коду непосредственно на диске. Это может быть полезно, если приложения на диске запутываются одним из многих способов.

Рекомендуемые курсы

  • Тренинг по Java Hibernate
  • Сертификационный онлайн-тренинг по Java Spring
  • Программа 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. Sulley
  1. Коллекция Carrera
  1. PyEmu
  1. IDAPython
  1. ImmDbg

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

Рекомендуемые статьи

Вот несколько статей, которые помогут вам получить более подробную информацию о Reverse Engineering с Python, так что просто перейдите по ссылке.

  1. 25 самых удивительных вопросов и ответов на Python.
  2. Начните с Python и Django для веб-разработки
  3. Каковы преимущества и ограничения использования Python?
  4. Карьера в Python
  5. Инструменты обратной инженерии