Порой кто-то хочет посмотреть, а какая же начинка в определённой программе? Тогда ему приходится использовать реверс-инжиниринг. Что это такое? Как действует? Каким образом происходит этот процесс? Обо всём этом вы сможете узнать из данной статьи.
Что такое реверс-инжиниринг программ?
Так называют процесс разбора приложения с целью понять, как оно работает, чтобы в будущем воссоздать этот процесс с внесением необходимых изменений. Обычно для этих целей используются отладчик и ассемблер. В зависимости от качества используемого программного обеспечения будут отличаться результат и количество времени, которое необходимо потратить на его приведение в нормальный вид. Объяснять реверс-инжиниринг для начинающих лучше всего на примере. В качестве оного выступит приложение, написанное для Android. А теперь давайте будет узнавать, что и как.
Работа с Android-приложениями
Вам будет интересно:Почему «Касперский» не запускается? Что делать?
Для начала необходимо прояснить некоторые моменты. В приложениях используется байт-код и LogCat. Это местные аналоги ранее упомянутых отладчика и ассемблера. Также необходимо понимать структуру самих приложений. Так, каждая программа является файлом с расширением apk. Упаковывается он zip’ом. Нас интересует его содержимое – ресурсы приложения, classes.dex и AndroidManifest.xml. Если вы занимаетесь программированием на Android, то вопросов с первыми и последним быть не должно. А вот classes.dex – это байт-код программы, который компилируется специально для виртуальной машины. Выудить из него исходный код java представленными в интернете средствами не получиться. Но возможным является получение dalvik opcodes – специального набора команд, которые используются для виртуальной машины. Для аналогии можно сказать, что это ассемблер местного разлива. Также classes.dex может быть превращен в файл с расширением jar. Уже в таком случае после его декомпиляции можно получить java-код, который будет более-менее читаемым. По такому пути мы и пойдём.
Декомпиляция
Вам будет интересно:Как удалить Chrome Search: инструкции и советы
Этот процесс будет проводиться с использованием программы Apk Manger. Прежде чем приступать к работе, необходимо убедиться, что есть нужные драйверы для работы девайса, а также функционирует режим USB-debugging. Первоначально нам необходимо будет переместить файл, который будет разбираться в директиву apk_managerplace-apk-here-for-modding. После этого следует запустить Script.bat. Если никаких проблем нет, то запуститься консоль, на которой будут зелёные надписи. Выбираем пункт номер девять – «Декомпилировать». После того как будет запущен процесс, необходимо не закрывать консоль. Потом следует открыть интересующий apk-файл с помощью архиватора и извлечь из него classes.dex, который нужно обработать программой dex2jar. Для необходимого нам результата его надо переместить на объект с расширением .bat. Появится файл, который будет заканчиваться на .jar. Пока что окно не закрываем.
Анализируем данные
Чтобы получить информацию о приложении, необходимо открыть его манифест. По нему определяем, что выступает в роли главной активности. Она-то и представляет для нас сейчас наибольшую важность. Также желательно посмотреть в самый низ программы. Если внизу будет информация о менеджере лицензий, то это существенно усложнит проведение реверсного инжиниринга. Если переключиться на jd-gui и развернуть дерево, то мы увидим несколько пространств имён. Допустим, что их три. В первом находятся файлы, связанные с рекламой. Во втором будут классы менеджера лицензий. В третьем находятся нам необходимые данные. В него-то мы и заходим. Здесь необходимо будет найти и удалить ключ, а потом и остальные строки, которые проверяют, является ли лицензионной работающая версия. Всё это нужно почистить. Потом в нашем Apk Manager ищем место, куда указано размещать байт-код. Теперь сделаем небольшое отступление и закомментируем команды, с которыми потенциально могут возникнуть проблемы. После этого нам осталось только скомпилировать программу.
Сборка приложения
В этом нам поможет всё тот же Apk Manager. В окне консоли, которое нами не закрывалось, выбираем пункт №14. Далее дело техники. Если приложение довольно сложное, то при запуске оно может частично или полностью потерять свою работоспособность. Не огорчайтесь, это значит, что мы только на полпути и есть ещё куда идти. Продолжаем проводить реверс-инжиниринг Android-приложений. Сказать, что нужно делать в конкретном случае, общими словами, увы, невозможно. Поэтому искать проблемное место придётся самостоятельно. Так, если окно приложения блокируется всплывающим окном, то необходимо просмотреть код и удалить ту его часть, что отвечает за данный диалог. Помочь с этим сможет jd-gui. Как видите, реверсный инжиниринг не является лёгким делом, и он требует наличия значительного багажа знаний. Даже если всё без проблем запустилось, необходимо будет протестировать работоспособность приложения. То есть реверс-инжиниринг является ещё затратным по времени действием. Продолжаем работать, пока не будут выявлены все проблемы.
Безопасность
А что, если нам нужна защита Android-приложений от реверс-инжиниринга? В таком случае есть два варианта: использование специальных программ или создание кодовой конструкции, которая будет мешать совершать разбор написанного. Последний вариант подходит исключительно опытным специалистам, поэтому мы рассмотрим только первый способ защиты. В качестве специализированного программного обеспечения используем ProGuard. Это приложение, которое используется для сокращения, обфускации и оптимизации кода. Если программу «прогнать» через него, то мы получим файл с расширением *.apk меньшего размера, чем он был. В таком случае его будет значительно сложней разобрать. Причем преимуществом данной программы является то, что она даже была внедрена в систему сборки Андроид-приложений с обновления r9. Поэтому воспользоваться ею может любой разработчик, который имеет стандартные инструменты создания и разработки.
Заключение
Нельзя сказать, что реверс-инжиниринг можно представить как что-то однородно плохое или хорошее. Конечно, с точки зрения разработчиков, которые создали приложение, это совсем не радостное событие. Но с другой стороны, во многих случаях написание опытными программистами необходимых файлов может быть по времени менее затратным, нежели использование подобного инструментария. Хотя для начинающих разработчиков реверс-инжиниринг может сослужить неплохую службу, если нет представления о том, как реализовать что-то, даже примерные и не совсем понятные наброски могут помочь с достижением поставленной цели.