Реверс-инжиниринг для начинающих. Защита Android-приложений от реверс-инжиниринга

Реверс-инжинирингДля просмотра «внутренностей» программы необходимо использовать реверс-инжиниринг. Определение данной технологии, а также ее функциональность и процесс работы будут подробно описаны ниже.

Определение

Данный процесс представляет собой разбор определенного готового приложения на составляющие, для того, чтобы понять принцип его работы и внести в него необходимые изменения. Чаще всего для осуществления реверс-инжиниринга применяется ассемблер и отладчик. Определить длительность этого процесса с точностью невозможно, так как все зависит от качества написания исходной программы. От него же зависит и результат. Чтобы новичкам было понятнее о чем именно идет речь, следует объяснить процесс на примере. Допустим, для этого будет взято приложение, написанное для работы на операционной системе «Андроид». Итак, начнем.

Исправление приложения для «Андроид»

В отличие от отладчика и ассемблера, применяющихся на компьютере, в данной сфере эти же функции выполняет LogCat и байт код. Чтобы разбирать и исправлять программы, следует понимать принцип их работы и структуру написания. Любое приложение для данной операционной системы имеет расширение apk, упакованное, в свою очередь, архиватором zip. Чтобы начинать работу следует добраться до содержимого этого архива. Им является classes.dex, AndroidManifest.xml и ресурсы программы. Людям, уже сталкивающимся с программированием для данной операционки не может возникнуть вопросов к последним двум пунктам, но вот первый стоит описать лучше. Он и является байт кодом приложения, который в процессе реверс-инжиниринга будет компилироваться для виртуального устройства. Чтобы вытащить из него исходный «ява» код не достаточно будет применять только находящиеся в интернете средства. Можно будет использовать в этом случае dalvik opcodes, который является специальным набором команд, использующимся для виртуальной машины. По сути, это ассемблер местного применения. В процессе он также может превращаться в в файл с расширением «яр», который после декомпиляции перейдет в читаемый «ява» код. Именно данную технологию и стоит применить впервые.

Процесс декомпилирования

Выполнять его следует при помощи установленной на компьютере программы Apk Manger. Перед началом работы необходимо установить все драйверы для оптимальной работы программы или проверить их наличие. Помимо этого следует проверить работоспособность режима USB-debugging. После подключения всего необходимого выбранный файл программы следует переместить в apk_manager\place-apk-here-for-modding, а после этого активировать файл Script.bat. Если все сделано правильно, т перед пользователем возникнет окно консоли с зелеными надписями. Среди них необходимо выделить девятую строку с названием «Декомпилировать» и активировать ее. В это время будет запущен процесс, во время которого нельзя закрывать панель консоли. Когда процесс закончится необходимо открыть список apk файлов и извлечь оттуда classes.dex. Это делается с помощью архиватора. Следующий шаг является обработкой данного файла с помощью программы dex2jar. В это время файл перемещается на объект расширением файла .bat, после чего пользователь увидит файл с окончанием .jar. Основной шаг выполнен, но окно программы еще не следует закрывать.

Анализ информации

Для окончательного изменения программы необходимо определить предмет его основной активности. Для этого используется манифест. Внизу программы следует обратить внимание на наличие данных о лицензии. Если они есть, то дальнейший северс-инжиниринг будет выполнять сложнее. На этом этапе следует с точностью определить местонахождение нужных данных. Для этого следует переключиться на jd-gui. После разворота дерева пользователь несколько пространств. Одно из них имеет файлы с рекламой, другое менеджеры лицензий, а вот нужные данные будут находиться в отдельном пространстве. Зайдя в него, следует удалить данные о ключе и строки, которые проверяют лицензионность программы. После этого в программе Apk Manager находится место для размещения байт кода, после чего программа компилируется.

Складываем назад

Обратная сборка приложения происходит с помощью того же «менеджера». Для этого в окне консоли, которое было оставлено открытым ранее необходимо выделить пункт четырнадцать и запустить его. В случае сложного написания приложения при его запуске могут возникнуть проблемы. Для их устранения необходимо самостоятельно разобрать причину потери работоспособности, так как это строго индивидуально. Например, если при запуске программы возникает всплывающее окно на экране, следует разобрать ту часть кода программы, которая отвечает за данную функцию. В этом поможет jd-gui.
В общем, процесс реверс-инжиниринга довольно сложный и справиться с ним без определенного опыта и знаний невозможно. В случае без проблемного запуска все равно придется дополнительно его тестировать, чтобы выявить возможные неполадки заранее. Процесс необходимо повторять снова и снова, покуда не будут устранены все неполадки. Так что этот процесс не только сложный, а еще и длительный. Неизвестно, на какое время он затянется.

Защита от вмешательства

В случае, когда приложения наоборот требуется защита от возможности реверс-инжиниринга существует два варианта развития событий. Первый это использование специальных утилит, а второй кодировка конструкции приложения. Второй вариант слишком сложный, поэтому его смогут применить только высоко опытные специалисты. Таким образом, проще использовать первый. В данном случае можно использовать программу ProGuard, которая сокращает и оптимизирует код приложения. После того, как нужная программа пройдет через ProGuard она получит расширение *.apk, который будет меньше исходного файла. Теперь написанное в программе сложнее разобрать, но все же это возможно. Такая программа защиты доступна всем пользователям имеющим инструменты разработки и создания программ.

Вывод

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *