Как открыть код программы apk

Обновлено 2015-09-17: исправлены ссылки на программы

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

Вот этим мы и займёмся. Традиционно здесь всё рассказывается в контексте линукса, с остальными операционками разбирайтесь сами, хотя принцип ровно такой же.

Предварительная подготовка

Нам понадобится телефон с андроидом, дата-кабель к нему, настроенный для работы с ADB компьютер 1 , установленный Android SDK (каталоги tools и platform-tools должны быть вынесены в переменную окружения PATH ).

Также на телефоне необходимо разрешить отладку через USB.

Ещё необходимо добавить какой-нибудь каталог, в который вы можете писать, в переменную окружения $PATH, у меня туда добавлен каталог ~/bin .

Как посмотреть исходный код android приложения? Декомпиляция .apk файла (реверс инжиниринг)

Получение apk-файла приложения

Есть несколько способов добыть файл с пакетом приложения:

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

Первые два способа тривиальны, о них не будем рассказывать, а вот третий достоин внимания. Подключаем телефон кабелем к компьютеру, проверяем, что девайс видится командой adb :

% adb devices List of devices attached 3731276A498700EC device

Допустим, нас интересует приложение Google+, очевидно, что где-то в названии приложения должно быть слово plus , ищем:

% adb shell pm list packages -f plus package:/data/app/com.google.android.apps.plus-1.apk=com.google.android.apps.plus package:/data/app/org.geometerplus.zlibrary.ui.android-1.apk=org.geometerplus.zlibrary.ui.android

Что мы только что сделали? Мы выполнили команду на стороне девайса ( adb shell ), команда называется pm (т.е. package manager), опция команды list packages говорит сама за себя, опция -f включает отображение связанных с пакетом файлов; а plus — это фильтр.

Видим, что интересующее нас приложение лежит в файле /data/app/com.google.android.apps.plus-1.apk , вытаскиваем его на компьютер:

% adb pull /data/app/com.google.android.apps.plus-1.apk . 3132 KB/s (8913253 bytes in 2.778s)

Разбор apk-файла на части

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

% unzip -l com.google.android.apps.plus-1.apk Archive: com.google.android.apps.plus-1.apk Length Date Time Name ——— ———- —— —- 97360 2008-08-21 17:13 META-INF/MANIFEST.MF 97402 2008-08-21 17:13 META-INF/CERT.SF 1580 2008-08-21 17:13 META-INF/CERT.RSA 39212 2008-08-21 17:13 AndroidManifest.xml 3162 2008-08-21 17:13 assets/licenses.html 5293140 2008-08-21 17:13 classes.dex 7608988 2008-08-21 17:13 lib/armeabi/libgcomm_jni.so . тут пропущено много строчек 2493944 2008-08-21 17:13 resources.arsc ——— ——- 16786021 1042 files

Однако просто распаковать и дальше ковыряться в этом всём, к сожалению, не получится: эти файлы там лежат в бинарном оптимизированном для использования на девайсе формате, их нужно сначала декодировать в пристойный вид.

Декомпиляция Андройд приложений (подробно)

Для этого есть замечательный инструмент android-apktool, полная инструкция по установке описана на официальном сайте. Нас интересует версия 2.X, скачиваем jar-файл в каталог ~/bin , туда же скачиваем скрипт-обёртку, примерно так:

cd ~/bin/ wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.0.1.jar wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool chmod +x apktool

Проверяем в терминале, что команда apktool работает, просто набираем и смотрим. Если выдаётся ошибка, фиксим, например, пермиссии на файл. Когда всё заработает, можно приступать к декодированию, всё просто:

% apktool d com.google.android.apps.plus-1.apk gplus I: Baksmaling. I: Loading resource table. I: Loaded. I: Loading resource table from file: /home/USER/apktool/framework/1.apk I: Loaded. I: Decoding file-resources. I: Decoding values*/* XMLs.

I: Done. I: Copying assets and libs.

После завершения процесса внутри каталога gplus будут лежать декодированные (в некоторой степени) внутренности пакета. К примеру, там уже можно смотреть в нормальном виде xml-файлы (макеты интерфейса или манифест). Там даже можно увидеть слегка декодированные исходники приложения, но не в виде java-кода, а в виде smali-файлов, об этом формате подробнее можно тут прочитать, при желании их можно даже редактировать и затем собрать назад в apk-пакет (это также можно сделать при помощи apktool ).

Дизассемблирование до java-кода

Следующий шаг — попытаться добраться до близкого к оригинальному java-кода приложения. В этом нам поможет программа dex2jar, качаем с сайта проекта архив с программой (файл вида dex2jar-0.0.9.8.tar.gz), она тоже написана на java, внутри каталог с кучей файлов, из которых нам понадобится каталог lib (скопируем его целиком в ~/bin ):

Читайте также:
Задачи программы развития образования

$ cp -r ./lib ~/bin/

и dex2jar.sh , скопируем его туда же в ~/bin . Запускаем на примере нашего пакета (на большом пакете программа может долго работать):

% dex2jar.sh com.google.android.apps.plus-1.apk dex2jar version: translator-0.0.9.8 dex2jar com.google.android.apps.plus-1.apk -> com.google.android.apps.plus-1_dex2jar.jar Done.

После выполнения получим в этом же каталоге jar-файл (в нашем случае — com.google.android.apps.plus-1_dex2jar.jar ).

Это самый обычный java jar archive, содержащий обычные class-файлы со скомпилированным java-кодом.

Декомпиляция class-файлов в java-файлы

Финальный этап — это получение более-менее читабельного java-кода из class-файлов с байткодом. Эта задача частично решается программой из предыдущего раздела: скопируем в каталог ~/bin скрипт d2j-jar2jasmin.sh . Результатом работы скрипта является каталог с файлами в формате jasmin, что, однако, вовсе не java-код, но тоже может оказаться полезным для анализа:

% d2j-jar2jasmin.sh -o res com.google.android.apps.plus-1_dex2jar.jar disassemble com.google.android.apps.plus-1_dex2jar.jar -> res

Но можно получить и java-код! Для этого можно попробовать воспользоваться вот этим дизассемблером. Не факт, что сработает на вашем пакете, плюс не гарантируется извлечение компилируемого кода, но какие-то данные вы всё же получите.

Что осталось за кадром

Я не рассматриваю вопрос преобразования odex-файлов в dex-файлы. Об этом можно самому прочитать вот тут, например.

Аналогично вопрос обратной сборки файлов в apk-пакет тоже не рассматривается. Так же как и подписывание/выравнивание apk-пакета.

Ссылки

  1. особенности настройки линукс-машины для работы с телефоном по дата-кабелю раскрываются в соответствующей статье на сайте developer.android.com ↩

Комментарии

Алексей | 2012-04-14 в 01:37

Тут со своим кодом разобраться бы, а потом только за чужие файлы браться. Я что в ЯВЕ написал более двух месяцев назад, если код более 1000 строк уже с переводчиком должен смотреть.

Сергей | 2012-07-09 в 23:31

Да чё вы так всё усложнили?! Тут проще чем написать слово «молоко»! Просто поменяйте расширение «apk» в «rar». И всё!

P.S. Написано на Си.)

dafeuot | 2012-07-23 в 21:15

Читай статью повнимательней:

APK-файл фактически является обычным ZIP-архивом, внутри которого лежат скомпилированные исходники приложения, ресурсы и манифест.Однако просто распаковать и дальше ковыряться в этом всём, к сожалению, не получится: эти файлы там лежат в бинарном оптимизированном для использования на девайсе формате, их нужно сначала декодировать в пристойный вид.

Источник: blog.regolit.com

Android от А до Я: Что такое открытый исходный код и открытое ПО (open source)

Открытое программное обеспечение (open-source software) предназначено для свободного доступа к исходному коду для всех желающих. Существуют разные лицензии с разными условиями использования от GPL (GNU General Public License) и до более лояльной Apache License.

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

Ядро Linux, которое используется в ОС, попадает под действие GPL. Это означает, что все изменения исходного кода должны быть доступны общественности после официального выхода софта. На практике это должно выглядеть следующим образом: такие производители как HTC, Samsung, Motorola, выпуская новое устройство, обязаны делать открытый доступ к исходному коду с моменты выпуска этого устройства. В большинстве своем производители железа немного затягивают с этим.

Исходный код для ОС Android как правило попадает под действие Apache License. Каждый может загрузить исходный код и изменить его, при этом нет необходимости делать код доступным для всех. По этой причине Android не могут изменить или усовершенствовать HTC Sense или MotoBlur.

Несмотря на то, что подобная ситуация не нравится многим пользователям, она не может быть изменена в силу коммерческих причин. Если бы производители делали доступными все свои секреты, то отпала бы финансовая причина создавать различные инновации для опережения соперников в конкурентной борьбе. Таким образом, использование более лояльной лицензии является полностью оправданным. Выпуск новых устройств регулярно подтверждает это.

Android от А до Я: Что такое открытый исходный код и открытое ПО (open source):
рейтинг 80 из 80 на основе 80 оценок.
Всего 80 отзывов.

Источник: droidtune.com

Статья Начало работы в Android приложениях по пентестингу (Часть 1)

1588937136773.png

Стремительное развитие и рост мобильных приложений несут в себе кучу уязвимостей, которые злоумышленники готовы эксплуатировать. Если вы разрабатываете приложения для Android и iOS-устройств и не успеваете за стратегиями пентеста, тогда вы должны быстро в них разобраться.

В этой статье я расскажу не только о пентесте приложений для Android, но и о том, как настроить LAB/ENVIRONMENT для тестирования Android, включая различные инструменты и скрипты с открытым исходным кодом.

Читайте также:
Он поддерживает стиль программирования в котором программа представляет

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

Введение
Архитектура Android:

Android — это система с открытым исходным кодом на базе Linux, созданная для широкого спектра устройств. На диаграмме ниже показаны основные компоненты платформы Android.

1588937524273.png

Системные приложения:

Android поставляется с различными наборами приложений для SMS, Email, интернет-браузеров и т.д. Любое стороннее приложение может быть установлено пользователем по умолчанию.

Стандартные библиотеки C/C++:

Некоторые основные компоненты системы Android, такие как ART и HAL, собраны из стандартного кода, который требует использования нативных библиотек, написанных на C и C++.

Java API Framework:

ОС Android доступна через API, написанные на языке Java. Эти API формируют «строительные блоки», необходимые для создания Android-приложений, упрощая повторное использование основных, модульных компонентов системы.

Основой платформы Android является ядро Linux. Например, Android Runtime (ART) использует ядро Linux для базовых функций, таких как многопоточность и низкоуровневое управление памятью.

Модель безопасности Android:

  • Разделение UID
  • Песочница

Я не буду останавливаться на подробностях модели безопасности. Итак, давайте перейдем к главному.

Содержимое файла APK:

1588938236516.png

  • AndroidManifest.xml
  • Assets каталог
  • META-INF каталог
  • Lib каталог
  • Res каталог
  • Classes.dex
  • Resources.arsc

AndroidManifest.xml содержит имя приложения, версию, права доступа, ссылающиеся библиотеки и т.д. Этот файл обычно представлен в виде бинарного Android XML, который может быть преобразован с (Plain-text XML) в понятную форму с помощью различных инструментов.

Эта папка содержит активы приложения.

META-INF каталог:

  • MF (the Manifest File (файл манифеста)
  • RSA (сертификат приложения)
  • SF (содержит ресурсы и SHA1-Digest)
  • Armeabi (код для всех процессоров на базе ARM)
  • arm64-v8a (код для всех ARM64 процессоров )
  • x86 (скомпилированный код x86 процессоров )
  • MIPS (скомпилированный код для MIPS-процессоров)

Каталог Res содержит ресурсы, которые не скомпилированы в resources.arsc.

Classes.dex — это классы, которые скомпилированы в формате .dex файла, понятные виртуальной машине Dalvik. (Dalvik — это прекращающая работу виртуальная машина в операционной системе Google Android, которая выполняет приложения, написанные под Android).

Resources.arsc:

Этот файл содержит предварительно скомпилированные ресурсы.

Surface атака:

На рисунке ниже изображены все возможные аспекты атаки при тестировании приложения Android.

1588938505882.png

Настройка среды тестирования Android:

Пентестинг Android можно выполнить, как на реальных устройствах, так и на эмуляторах.

Мобильные устройства:

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

Выбор правильной операционной системы:

Android пентестинг на операционной системе Windows будет немного сложно выполнить из-за отсутствия инструментов для Windows OS. Однако, дистрибутив Оpen-Source Android приложения для пентестинга под названием

Ссылка скрыта от гостей

, специально создан для решения подобной ситуации.

Я бы порекомендовал использовать этот дистрибутив, если вы работаете под управлением Windows. Вы также можете использовать его в Linux или MacOS, но я бы не рекомендовал, так как это может замедлить работу вашей системы. Вы можете установить те же самые инструменты в Linux или MacOS.

Установка Android эмулятора:

Доступно много эмуляторов Android в Интернете, но какой из них хорош для пентестинга?

На мой взгляд, Genymotion является лучшим эмулятором Android, потому что его легко настроить и использовать, а также удобен для работы.

Вы можете скачать Genymotion Android эмулятор здесь:

Ссылка скрыта от гостей

Обратите внимание, что для работы с программой Genymotion необходимо установить VirtualBox. Эмулятор Genymotion не работает без этого, поэтому Вы можете скачать Genymotion одним пакетом с официального сайта Genymotion.

1588939031143.png

  • Google Nexus 5 (Android 8.0, API-26, Density-420).
  • Samsung Galaxy S7 (Android 6.0, API-23, Density-640 XXXHHDPI)
  • Samsung Galaxy S8 (Android 7.0, API-24, Density 640 XXXHHDPI)

1588939036504.png

Настройка эмулятора Android:

После установки эмулятора выберите любое устройство и установите его, затем запустите его из GUI.

Установите Open GApps из опции, расположенной в правом верхнем углу.

1588939047693.png

Genymotion — это эмулятор на x86 основе, поэтому если вы попытаетесь установить приложение, имеющее ARM-код, Genymotion выдаст ошибку:

an error occured while deploying the file.
This probably means that the app contains ARM native code and your Genymotion device cannot run ARM instructions. You should either build your native code to x86 or install an ARM translation tool in your device.

Читайте также:
Кто создает вредоносные программы

1588939063165.png

Эта ошибка не позволит вам установить множество приложений, которые вам нужно будет установить для баг баунта.

Решением этой ошибки является установка ARM-Translation-Tool, которую можно скачать здесь: m9rco/Genymotion_ARM_Translation.

После загрузки ARM-Translation-Tools просто перетащите его в Genymotion и перезапустите эмулятор, и он будет установлен.

1588939202732.png

Примечание: Пожалуйста, загрузите инструмент перевода в соответствии с вашей версией Android.

Android Debug Bridge (ADB):

  • Клиент, который отправляет команды. Клиент запускается на вашей машине разработки. Вы можете вызвать клиента из терминала командной строки, выполнив команду ADB.
  • Daemon(ADB), который выполняет команды на устройстве. Daemon запускается как фоновый процесс на каждом устройстве.
  • Сервер, который управляет связью между клиентом и daemon. Сервер запускается как фоновый процесс на машине разработки.

macOS:
brew cask install android-platform-tools

Linux/Debian:
sudo apt-get install adb

Fedora/ SUSE:
sudo yum install android-tools

В случае, если вышеуказанные команды не работают, вы можете скачать их здесь:

Ссылка скрыта от гостей

Подключение Adb к мобильному устройству по TCP и USB кабелю:

Если вы хотите протестировать приложения Android на вашем мобильном устройстве, то вы должны подключить Adb с мобильными устройствами с помощью кабеля передачи данных или TCP (через сеть).

Возьмите кабель для передачи данных и подсоедините мобильное устройство к ПК/ноутбуку. Теперь перейдите к настройкам мобильного телефона и включите USB отладку (необходимый шаг). Теперь следуйте командам, приведенным ниже.

1588939420954.png

Эта команда отобразит список устройств, подключенных к ADB.

Подключение по TCP:

Подключите телефон с помощью USB-кабеля к ПК/ноутбуку. Теперь введите следующую команду:

1588939448301.png

Вы увидите, что порт перезагружен, теперь отсоедините мобильный телефон (отсоедините USB кабель) и подключите телефон по TCP с помощью команд, приведенных ниже:

adb connect : adb devices

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

1588939508305.png

соединение будет успешным.

Настройка Genymotion с BurpSuit:

Прежде всего, вам нужно, чтобы BurpSuit перехватывал трафик. Скачать BurpSuit можно отсюда:

Ссылка скрыта от гостей

Теперь давайте настроим прокси. Откройте burp и перейдите к «Proxy Tab», а затем «Options Tab», отсюда снимите флажок с выбранного прокси, т.е. (127.0.0.1). Теперь откройте терминал и введите команду «ifconfig» и выполните поиск по «VBOX interface «, скопируйте этот IP и вставьте его в Burp new proxy-listener, как показано на нижеприведенных рисунках:

1588939763734.png

1588939768927.png

1588939773355.png

Откройте мобильный Wi-Fi и измените Wifi сеть с помощью того же прокси, который используется в BurpSuit.

1588939813789.png

Теперь откройте любой интернет-браузер и просмотрите «

Ссылка скрыта от гостей

«. В правом верхнем углу будет расположена опция для загрузки прокси-сертификата.

1588939879674.png

Следующим шагом является открытие любого файлового менеджера, переход в папку загрузки и переименование «cacert.der» в «cacert.crt», а затем переход в Mobile settings > Security > User Credentials > Install from SD Card, выбор сертификата и его установка.

1588939885962.png

1588939889980.png

Настройка Frida:

FRIDA — это динамический инструментарий для разработчиков, реверс-инженеров и исследователей в области безопасности. Он поможет вам внедрить JS-фрагменты в стандартные приложения Android, iOS, Linux, Mac и Windows. Другими словами, вы можете внедрять свои собственные скрипты в black-box процессы.

Вы можете установить Frida и Frida-Tools на ваш компьютер с помощью команд, приведенных ниже:

pip install frida-tools pip install frida

1588940391345.png

  • Запустите Android эмулятор и используйте ADB, чтобы получить оболочку. Теперь введите «uname -a» в оболочку ADB и проверьте, какая архитектура запущена.

1588940607100.png

  • Как вы можете заметить, это 32-битная архитектура, поэтому нам нужно найти 32-битную архитектуру Frida-Server.
  • Я запустил 12.8.14 версию Frida, поэтому нам нужно установить ту же версию Frida-Server на наш Android эмулятор.
  • Вы можете найти сервер Frida в соответствии с вашим эмулятором Android отсюда: frida/frida.
  • Теперь я должен найти сервер Frida Аndroid 12.8.14.
  • После загрузки сервера Frida Аndroid вы можете распаковать его по команде «unxz «.
  • Теперь переместите распакованный сервер Frida в каталог «/data/local/tmp» в эмуляторе Аndroid.

1588940688807.png

  • Измените файловые разрешения Frida-сервера с помощью команды «chmod 755 frida-server» и запустите сервер Frida.

1588940693364.png

  • Теперь откройте терминал в вашей системе и введите «frida-ps -U», после чего вы увидите, что появился список процессов.

1588940708546.png

Итак, это все для Части (1). В части (2) я напишу о различных атаках и других инструментах, необходимых для пентеста.

Спасибо за внимание

Также, взгляните на эту статью по возможности:

Источник: codeby.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru