Анатомия Android: что же такое reverse engineering?




Скачать 95.56 Kb.
НазваниеАнатомия Android: что же такое reverse engineering?
Дата публикации28.03.2013
Размер95.56 Kb.
ТипДокументы
shkolnie.ru > География > Документы
http://android-shark.ru/google-otkryvaet-uchebnyj-kurs-programmirovanija-pod-android/
Тренинг от Google: создание программ под Android
Под флагом Google стартовал обучающий курс для разработчиков приложений под Android. Тренинг представляет собой линейку уроков (часть которых еще находится в стадии разработки), освещающую разнообразные детали программирования под Android.

Среди уже доступных широкому кругу пользователей имеются: уроки по обмену различной информацией, в том числе мультимедиа, персонализация приложения, уроки, связанные с дизайном конструктивного пользовательского интерфейса. Помимо этого, рассматриваются специфические темы, связанные с оптимизацией расхода батареи, монетизацией приложений и важные моменты в создании корпоративных приложений (повышение уровня безопасности).
Все уроки делятся на несколько статей, в каждой статье поэтапно описываются алгоритмы действий по решению часто возникающих проблем или внедрению новых возможностей в приложение Android. Все шаги сопровождаются примерами сниппетов и программных кодов.
Главная цель курса состоит в том, чтобы посторонние разработчики научились делать реально полезные и адаптированные приложения под Android, улучшая свои навыки посредством предоставленных уроков. В ближайшем времени учебный курс будет расширяться новыми статьями и будет значительно увеличен. Данный тренинг обещает быть весьма полезным, а главное – актуальным для всех разработчиков приложений.

Следите за информацией на нашем сайте!

http://android-shark.ru/hirurgiya-android-vvedenie-v-reverse-engineering/
^ Анатомия Android: что же такое reverse engineering?
На первый взгляд может показаться, что программирование под Android и обратная разработка под него – две совершенно не соприкасающиеся сферы. Но это не совсем так. Зачастую, разрабатывая программы под Android необходимо обращаться к знаниям reverse engineering, и, наоборот, второе немыслимо без первого. К тому же, обратная разработка может послужить началом в создании чего-то уникального.
Понятие обратной разработки
Комплекс методов и приемов для изучения работы приложения – это и есть определение обратной разработки в самом общем его виде. Нас в области данного понятия будут интересовать APK-файлы (Android Package – архивные исполняемые файлы-приложения под Android, имеют формат .apk), запускающиеся в виртуальной машине Dalvik, одной из составляющей Google Android OS.
В контексте нашего изучения рассчитывается, что объект – это некая машина, алгоритмов и программ работы которой мы не знаем и можем наблюдать лишь за её поведением. Получить все компоненты мозаики при таком раскладе, тем не менее, обычно удается при анализе данных входа-выхода. Однако, для Android можно выбрать и другой способ – получение исходного кода приложения. В нашем случае этот процесс будет вполне выполним, несмотря на нередкие трудности в получении этого кода. Для этого существует множество методов, среди которых, к примеру, можно выделить обфускацию.


-------------------------------------------------------------------------------------------------------------------

Обфускация (англ. obfuscate — делать неочевидным, запутанным, сбивать с толку) – приведение исходного кода программы к виду, сохраняющему её функциональность, но затрудняющему анализ и понимание алгоритмов работы.

---------------------------------------------------------------------------------------------------------------------
Принципиальная необходимость reverse engineering на этапе разработки
Очень часто обратная разработка применяется к взлому приложений или же детальному изучению вирусов. Главные же моменты, которые будут интересовать нас:

  • первое и самое важное – изучение алгоритмов работы других программ для воссоздания протоколов и для создания дополнений и клиентов в постороннем ПО;

  • немножко неприятный, но полезный момент – копирование исходного когда из сторонних проектов в свой.


В новых статьях рассмотрим способы получения доступа к коду APK-файлов с наглядными примерами.

http://android-shark.ru/hirurgiya-android-potroshim-apk/
Анатомия Android: изучаем APK-файлы.
Итак, настало время «разобрать по косточкам» APK, или Android package, файлы. Принципиальные моменты:

  • APK-файлы являются архивными и исполняемыми,

  • Важно! Запомните, файлы данного формата – это обычные архивы, которые можно распаковать любым архиватором, они не шифруются!


Процесс распаковки APK-файлов
Стартовым моментом для обратной разработки является именно распаковка APK-файлов и самым эффективным и простым способом превращения APK-файла в обычный архив служит изменение расширения APK на ZIP и последующее извлечение его с помощью нехитрых архиваторов.
Рассмотрим наглядный пример. Для этого возьмем программу из open-source Vanilla music player. Кстати, проводить подобные опыты потрошения приложений лучше всего именно на таких программах, находящихся в свободном доступе. Обусловлено это элементарным отсутствием кодов защиты внутренностей приложений. Вернемся к нашему приложению:


Все, что мы здесь видим – стандартные файлы и папки, присутствующие в каждом архиве. Пройдемся по каждому компоненту.
Начинка APK-файлов
Директории:
1. Assets.
Данная папка не часто, но встречается внутри приложений. Что же это такое? Ресурсы, или «активы», только без идентификаторов. Чтобы получить доступ к файлам, нужно использовать класс AssetManager. Нас эта папка особо интересовать не будет, но самые любознательные могут в ней покопаться, вдруг отыщется что-нибудь интересное.

2. META-INF
Данная папка состоит полностью из метаданных, открываемых текстовым редактором. Метаданные – если просто, это сведения о данных. Вот некоторые из них:

  • MANIFEST.MF – файл манифеста с данными об APK-архиве (версия стандарта JAR, по которой создан APK, контрольные суммы SHA-1 и пути к файлам, а так же многое другое),

  • Файл с расширением SF – пути к ресурсам и их контрольные суммы.


3. res
В данной папке находятся все ресурсы приложения, разнесенные по различным директориям. Обычно каждой подпапке присваивается название под тип ресурса, который в ней лежит (к примеру, drawable – изображения и иконки, используемые в программе).

К слову, во взятом приложении Vanilla music player (по-сути, что первое попалось, то и было загружено), которое является бесплатным, в ресурсах оказалась «интересная» папка raw с конфигурациями sms-биллинга. Среди них был и файл списка коротких номеров smsc.txt:


^ Мораль сей басни такова: всегда скачивайте приложения для Android с официальных ресурсов.
Вот мы и добрались до самих файлов:
1. resources.arsc
Скомпонованный XML-файл, состоящий из данных о ресурсах, задействованных в приложении, и о строковых переменных. Открыть его можно текстовым редактором.
2. AndroidManifest.xml
Файл манифеста, который содержит в себе сведения об отображаемом пользователю названии приложения, необходимой версии OS, название пакета, библиотеки и права, необходимые программе, а также путь к иконке и название запускаемого класса. Данные являются важными для правильного функционирования приложения в Android.

Чтобы прочесть данный файл, необходимы утилиты apktool или AXMLPrinter2 (о них подробнее в следующем уроке).
3. classes.dex
Самая интересная часть приложения. Classes.dex – главная составляющая APK, в которой и находится программный код, выполняемый в Dalvik VM.
Изначально пишется программа на Java (получаем файлы .class), затем собираем полученные файлы утилитой Dx в модуль с одноименным разрешением – DEX, обрабатываемый виртуальной машиной. Вскрыть модуль можно программой dex2jar. В итоге, чтобы получить понятный и читабельный java-код, необходимо полученный комплект .class декомпилировать утилитой типа jad.
Данный процесс, если все операции проведены правильно, позволяет удачно «перевернуть» приложение под Android. Подробнее обо всём этом – в следующих статьях.
http://android-shark.ru/hirurgiya-android-ispolzuem-apktool-dlya-obratnoy-razrabotki-prilozheniy-android/
^ Анатомия Android: вооружаемся APKTool
Итак, в предыдущей статье мы разобрались с тем, что же такое APK, рассмотрели его основные составляющие и их структуру. Теперь перейдем к более детальному описанию самых трудных моментов.
Тут же перед нами возникает проблема наличия скомпилированных XML-файлов в папках, что сильно затрудняет дальнейшее изучение анатомии приложения, потому что файлы эти имеют совершенно нечитабельный вид. Примерно вот такой:


Для решения этой проблемы и преобразования бессмысленного набора букв в корректные данные мы обратимся к APKTool.

APKTool – один из инструментов для обратной разработки приложений под ^ Android, основополагающей возможностью которой является декодирование XML в аналогичный изначальному формат. Эта возможность сделает код читабельным и позволит внести в него необходимые изменения, а также скомпилировать файлы назад.

Еще одна возможность утилиты – декомпиляция в smali (язык Dalvik VM).
Работа с APKTool
Всё необходимое для работы программы (сама утилита, скрипты и наборы зависимости для её правильной работы) мы берем с официального ресурса по этой ссылке - http://code.google.com/p/android-apktool/ . На данный момент утилита доступна для Windows, Linux и MacOS. Устанавливается программа во всех перечисленных OS аналогично следующему алгоритму (на примере Windows):


  1. Apktool-install-windows-версия.tar.bz2 – находим архив и загружаем его;

  2. Затем загружаем архив apktool-версия.tar.bz2;

  3. Все архивы нужно распаковать в системную директорию (к примеру, D:\Windows).


Пример применения APKTool


  1. Win+R, пишем «cmd», нажимаем Enter – вызываем консоль;

  2. Теперь нам нужно изучить справку о программе, в консоли вводим apktool:




  1. Останавливаем наше внимание на операции d(decode). Данная операция обрабатывает APK-файлы и декодирует необходимые исходники. Путь к папке с результатом разбора, название файла и набор флагов передаются как параметры.


Все наши операции продолжаем проводить с приложением Vanilla music player (бесплатная программа). Применим к ней функционал APKTool, получаем такой набор команд:


В нашем приложении после данных операций в директории APK-файла должна появится разобранная папка с читабельными файлами:


В папке res можно найти файлы XML и AndroidManifest.xml. После их анализа у нас выстроится достаточно целостная картина алгоритма и принципов работы приложения. Если открыть AndroidManifest.xml, можно увидеть ранее упомянутую подшивку с требованиями отправить SMS на короткие номера:


Графический интерфейс программы находится в директории res/layout.
Для тех, кто любит наглядные уроки:
http://www.youtube.com/watch?feature=player_embedded&v=1Aa9zsh6F7A

http://android-shark.ru/hirurgiya-android-classes-dex/
^ Анатомия Android: classes.dex
Сегодня в нашей статье мы наконец рассмотрим самую содержательную часть для обратной разработки программы, несущую в себе исходный код всего приложения под Android.
Начнем с разбора самого файла DEX или Dalvik Executable. Как видно из названия, файл содержит в себе код для работы виртуальной машины Dalvik. В прошлой статье уже рассказывалось о процессе превращения java, в котором обычно и пишутся приложения для Android, в .class-файлы. После этой операции данные файлы при помощи инструмента Dx компонуются в файл classes.dex, который, в свою очередь, и является главным компонентом APK-файла.
^ Итак, переходим к этапам обратной разработки (всего их будет два)
I. Цель этапа: обратное преобразование DEX в JAR-файлы, zip-архив с метаданными и java-файлами.

Инструмент операции: dex2jar (скачать можно здесь - http://code.google.com/p/dex2jar/downloads/list). Программа достаточно проста в использовании – нужно просто переместить вручную APK-файл (или необходимый файл classes.dex) на программу, или же задать это действие через консоль.

^ При удачном выполнении операции получится файл, необходимый для дальнейшей работы - «<имя приложения>_dex2jar.jar».
II. Цель этапа: обратная разработка файла JAR (напомню, что данный архив состоит из набора файлов .class, по сути являющих собой скомпилированный java-код).

Инструмент операции: программа ^ Java Decompiler (JAD). С помощью данной программы открываем JAR-файл, который мы создали на первом этапе (программа имеет понятный интерфейс).

Вот он и заветный код приложения под Android. Среди многочисленных файлов, которые вы увидите, хотелось бы отметить Manifes.xml – файл содержит информацию о стартовых классах.

Чтобы не потерять читабельность файлов, нужно сохранить их в одном архиве следующей командой: File – Save All Sources. В будущем это значительно облегчит работу с ними.


Похожие:

Анатомия Android: что же такое reverse engineering? iconКтд «Что такое хорошо и что такое плохо?»
Данное мероприятие включает в себя четыре творческих конкурса, номера художественной самодеятельности, показ отрывка из мультфильма...
Анатомия Android: что же такое reverse engineering? iconЧто такое нравственность?
Что такое нравственность? Что такое нравственный выбор? Заглянем в толковый словарь и узнаем, что нравственность- это внутренние,...
Анатомия Android: что же такое reverse engineering? iconПрограмма так же была обновлена 7 июля 2012 года, были добавлены...
Представляю Вашему вниманию 2 программы для ос android, направленные на систематизацию коллекции Советских и Российских монет, как...
Анатомия Android: что же такое reverse engineering? iconКонспект непосредственно образовательной деятельности для детей подготовительной...
Народная пословица гласит: “Жизнь прожить – не поле перейти”. Овладение наукой жизни начинается с поисков ответов на вечные философские...
Анатомия Android: что же такое reverse engineering? iconПояснительная записка Программа научно-технической направленности...
Программа научно-технической направленности «Анатомия и физиология человека» рассчитана на учеников 9 – 11 классов школ с общим и...
Анатомия Android: что же такое reverse engineering? iconЧто такое «молярная масса» вещества?
Что такое «энтальпия»? Как эта функция состояния системы связана с законом Гесса?
Анатомия Android: что же такое reverse engineering? iconУбийство из милосердия?
...
Анатомия Android: что же такое reverse engineering? iconРазумеется Мне просто кое-что непонятно
Укладывается на парту, за которой сидит Лектер, принимает позу готовности слушать* Профессор, а расскажите, что подвигло вас на создание...
Анатомия Android: что же такое reverse engineering? iconГк РФ. Ответьте на вопросы: Что такое норма права?
Гражданском кодексе Российской Федерации статью 1074. Внимательно прочитайте, проанализируйте структуру статьи, ее место в структуре...
Анатомия Android: что же такое reverse engineering? iconВ. И. Даль «Я прекрасно знаю, что такое время, пока не думаю об этом....
«Прошлое уже прошло, будущее еще не наступило, а настоящее не имеет длительности – что же тогда остается от времени?»
Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2014
shkolnie.ru
Главная страница