Resources arsc что это
Как устроен билд APK файла внутри
Процесс создания APK и компиляции кода
Рассматриваемые темы
Архитектура процессоров и зачем нужна виртуальная машина
Андроид после того как вышел в 2007 году претерпел множество изменений связанный с билд процессом, средой исполнения и улучшениями производительности.
У андроида много удивительных характеристик и одна из них разные архитектуры процессоров такие как ARM64 и x86
Невозможно скомпилировать код, который поддерживает каждую архитектуру. Вот именно поэтому используется Java виртуальная машина.
Понимание Java виртуальной машины
JVM это виртуальная машина, позволяющая устройству запускать код, который скомпилирован в Java байткод
Используя JVM, вы избавляетесь от проблемы с разной архитектурой процессоров.
JVM предоставляет переносимость и она позволяет запускать Java код в виртуальной среде, вместо того, чтобы запускать его сразу «на железе»
Но JVM была создана для систем с большими мощностями по ресурсам, а наш андроид имеет сравнительно мало памяти и заряда батареи.
По этой причине Google создал адаптированную под андроид виртуальную машину, которая называется Dalvik.
Компилируем исходный код
Для котлина есть kotlinc компилятор, который делает совместимый с Java байткод.
Байткод — это набор инструкций, который выполняется на целевом устройстве.
Java байткод — это набор инструкций для Java виртуальной машины.
Андроид виртуальная машина
Каждое андроид приложение работает на своей виртуальной машине. С версий 1.0 до 4.4, это был Dalvik. В андроид 4.4, вместе с Dalvik, Google представил в качестве эксперимента новый андроид runtime, который назывался ART
Но у андроида есть свой собственный оптимизированный формат байткода, который называется Dalvik bytecode — это просто инструкции машинного кода для процессора также как и JVM байткод.
Dex — это аббревиатура с английского — Dalvik Executable.
ART против Dalvik
Преимущество ART над Dalvik проявляется в том, что приложения запускаются быстрее, потому что весь DEX байткод транслируется в машинный код во время установки, не нужно дополнительного времени на компиляцию в рантайме.
ART и Dalvik совместимы, так что приложения разработанные для Dalvik должны работать и на ART.
Компиляция Dalvik (JIT- just in time) имела такие минусы как — быстрая трата батареи, лаги в приложениях и плохой перформанс. В Dalvik трансляция происходит только когда это нужно. Мы открываем новый экран и только в этот момент происходит трансляция, за счет этого установка происходит быстрее, но при этом проседает перформанс.
Это причина по которой Google сделал Android Runtime (ART).
ART — основан на AOT (ahead of time) компиляции, она происходит до того как приложение запустится.
В ART компиляция происходит во время установки приложения. Это ведет к более долгому времени установки, но уменьшает трату батареи и избавляет от лагов, которые были на Dalvik.
В андроид 7.0 JIT вернулся. Гибридная среда сочетает фичи как от JIT компиляции так и
от ART
Среда запуска байткода это очень важная часть андроида и она вовлечена в процесс запуска и установки приложения
Каждый этап описанного процесса
Source Code (Исходный код)
Это Java и Kotlin файлы в src пакете.
Resource Files
Файлы находящиеся в директории с ресурсами
AIDL Files
AIDL — аббревиатура Android Interface Definition Language, позволяет вам описать интерфейс межпроцессорного взаимодействия.
AIDL — может использоваться между любыми процессами в андроиде.
Library Modules
Модули библиотек содержат Java или Kotlin классы, компоненты андроида и ресурсы.
Код и ресурсы бибилотеки компилируются и пакуются вместе с приложением.
Поэтому модуль библиотеки может считаться компайл тайм артефактом.
AAR Libraries
Андроид библиотеки компилируются в AAR — android archive файл, который вы можете использовать как зависимость для вашего android app модуля.
AAR файлы могут содержать андроид ресурсы и файл манифеста, что позволяет вам упаковать туда общие ресурсы такие как layouts и drawables в дополнение к Java или Kotlin классам и методам.
JAR Libraries
JAR это Java библиотека и в отличие от AAR она не может содержать андроид ресурсы и манифесты.
Android Asset Packaging Tool
AAPT2 — аббревиатура (Android Asset Packaging Tool) — компилирует манифест и файлы ресурсов в один APK.
Этот процесс разделен на два шага компиляцию и линковку Это улучшает производительность так как если вы поменяете один файл, вам нужно компилировать только его и прилинковать к остальным файлам командой ‘link’
AAPT2 может компилировать все типы андроид ресурсов, таких как drawables и XML файлы.
При вызове AAPT2 для компиляции, туда передается по одному ресурсному файлу на каждый вызов
resources.arsc
APK содержит AndroidManifest, бинарные XML файлы и resources.arsc
resource.arsc содержит всю мета информацию о ресурсах, такую как индексы всех ресурсов в пакете
Это бинарный файл и APK который может быть запущен. APK который вы обычно создаете и запускаете не сжат и может быть использован просто посредством размещения в памяти.
R.java файл это выходной файл вместе с APK ему назначен уникальный id, который позволяет Java коду использовать ресурсы во время компиляции.
arsc это индекс ресурса который используется во время запуска приложения
D8 и R8
Начиная с андроид студии 3.1 и далее, D8 был сделан дефолтным компилятором.
D8 производит более маленькие dex файлы с лучшей производительностью, если сравнивать со старым dx.
R8 используется для компиляции кода. R8 это оптимизированная версия D8
D8 играет роль конвертера класс файлов в Dex файлы, а также производит дешугаринг функций из Java 8 в байткод, который может быть запущен на андроиде
R8 оптимизирует dex байткод. Он предоставляет такие фичи как оптимизация, обфускация, удаление ненужных классов.
Обфускация уменьшает размер вашего приложения укорачивая названия классов, методов и полей.
Обфускация имеет и другие преимущества для предотвращения реверс инжиниринга, но основная цель уменьшить размер.
Оптимизация уменьшает размер Dex файла путем переписывания ненужных частей кода и инлайнинга.
С помощью дешугаринга мы можем использовать удобные фичи языка Java 8 на андроиде.
Dex and Multidex
R8 дает на выходе один DEX файл, который называется classes.dex
Если количество методов приложения переваливает за 65,536, включая подключенные библиотеки, то произойдет ошибка при билде
Реверс-инжиниринг
Вы потеряли исходник своей программы и вам нужно восстановить код. Вы скачали программу с вирусом и хотите узнать, что он делает.
Программы под Android распространяются в архивах. Эти архивы имеют расширение «.apk». Такие файлы не шифруются и являются по сути файлами «zip». Можете переименовать apk-файл в zip, чтобы убедиться в этом.
Вам необходимо поковыряться в APK-файле и получить какие-то данные. Можно потренироваться на кошках. Возьмём свою программу «Hello Kitty», найдём его apk-файл в папке проекта app\build\outputs\apk и переместим в отдельную папку для опытов.
Так как пользовательские приложения для Android выполняются в java-машине, то APK-файлы наследуют все характерные черты JAR-файлов.
Содержимое архива обычно выглядит примерно так:
Каталог META-INF содержит:
CERT.RSA — сертификат приложения
CERT.SF — контрольные суммы файлов ресурсов (картинок, звуков и т.д.)
MANIFEST.MF — служебная информация, описывающая сам apk-файл
Каталог res содержит ресурсы — значки в нескольких разрешениях, описание размещения элементов на форме в xml-файле.
AndroidManifest.xml — служебная информация о приложении. В этом файле содержатся и так называемые «permission» — разрешения, которые требуются для работы приложения (например, доступ к сети или доступ к телефонной книге).
classes.dex — исполняемый код приложения. Именно этот файл интересует нас в первую очередь.
resources.arsc — таблица ресурсов. В этом файле собраны xml-описания всех ресурсов.
Вот и вся краткая информация, которую нужно знать, приступая к разбору вредоносных программ под Android.
Теперь рассмотрим популярные утилиты, используемые для изучения программ.
Apktool
Для начала скачиваем утилиту Apktool, который представляет собой jar-файл с номером версии. Для удобства переименовываем его в короткий вид apktool.jar, так как будем работать в командной строке. Подопытный файл разместите в той же папке с утилитой.
Запускаем в окне командной строки утилиту с флагом d:
Появится отдельная папка, имя которой будет совпадать с именем вашего файла. Зайдите в неё и исследуйте файлы. Вы заметите, что XML-файлы теперь доступны для чтения в нормальном виде. Таким образом, мы можем открыть файл activity_main.xml и узнать разметку своей активности.
В папке вы также найдёте множество системных файлов, которые проект тянет с собой при создании приложения. На них не обращаем внимания. Вам нужно искать только те файлы, которые создавали программисты, хакеры, вы.
При изучении своей или чужой программы вам надо посмотреть на файл манифеста, чтобы узнать используемые разрешения, список активностей, сервисов и т.д. А в папке res изучить все ресурсы, относящиеся к программе.
Моя тестовая программа была слишком проста. В других примерах могут быть дополнительные папки, например, assets, которая может содержать файлы, картинки и т.д. Там могут находиться html-файлы с сценариями на Javascript, которые ведут на вредные страницы.
В папке smali находятся уже файлы классов с тем же расширением smali. Код выглядит как в ассемблере и при желании можно понять листинг, но очень неудобно. Оставив файлы пока в покое.
Первую часть задачи мы выполнили.
dex2jar
Вторая утилита dex2jar, позволяет преобразовать файлы dex в jar. Скачиваем последнюю версию и распаковываем архив утилиты. Утилита содержит множество файлов для различных ситуаций. Можете поизучать их на досуге.
Запускаем команду d2j-dex2jar.bat app-debug.apk и получаем на выходе файл app-debug-dex2jar.jar. Это стандартный тип файлов для Java, но для нас пока не слишком полезный. Тем не менее мы выполнили второй шаг и получили промежуточный файл.
JD-GUI
Утилита, которая поможет нам прочитать jar-файл, называется JD-GUI. На странице разработчика можно найти ссылки на плагины к средам разработки и даже онлайн-версию.
Запускаем программу и перетаскиваем на него jar-файл. И весь код на ладони.
Обратите внимание, что код немного будет отличаться. Например, код в студии:
Сравните с кодом в утилите.
Иными словами, вместо констант из класса R подставляются их реальные значения. Вам придётся попотеть, чтобы сопоставить данные. Но вы справитесь, я в вас верю.
Burp Suite
Burp Suite позволит вам просматривать HTTP-траффик на эмуляторе. Скачайте последнюю версию.
Далее следует настроить прокси и другие параметры.
Разбор вредоносной программы
В качестве примера возьмем программу suspicious.apk, который детектируется разными антивирусами как вредоносная программа.
Чтобы лучше понять, что именно искать, нужно проанализировать файл «AndroidManifest.xml» — посмотреть, какие именно разрешения требуются анализируемому приложению. Данный файл бинарный, а не обычный текстовый xml. Для того, чтобы его прочитать нужно воспользоваться консольной утилитой «aapt» из комплекта Android SDK. Она находится в каталоге «platform-tools». Так как графического интерфейса нет, то команду нужно вводить в консоли. Например, для Windows:
Разумеется, вы должны подставить свои пути. В Linux команда будет такой же с очевидными отличиями (не будет букв дисков и расширения «exe» у утилиты). Для большего удобства вывод можно перенаправить в файл:
В файле нужно найти секцию «Android manifest» и искать перечисление разрешений. В анализируемом файле это выглядит так:
Из этой информации становится понятно, что программа может получать состояние телефона (сюда включаются, например «телефон в режиме вызова», «телефон в режиме принятия данных»). Это разрешение нужно и для получения номера телефона, на котором запущена программа, работать с сетью и мониторить приход СМС. На этих аспектах и нужно сосредоточить внимание при дальнейшем анализе.
Для того, чтобы получить доступ к коду нужно выполнить два шага — преобразовать apk-файл в jar-файл и декомпилировать полученный байткод в более понятный для человека вид.
Воспользуемся конвертером «dex2jar»:
Сконвертированный файл будет находится в том же каталоге, что и оригинальный файл. К его имени будет добавлено «.dex2jar.jar», то есть в данном примере это будет «suspicious.apk.dex2jar.jar».
Этот файл можно открыть декомпилятором. Иерархия пакета в окне декомпилятора выглядит так:
На этом подготовительные шаги заканчиваются — дальнейший успех зависит только от вашего знания Java и умения пользоваться поисковиком.
К счастью, экземпляр выбранный для примера имеет довольно скромные размеры — финальный jar всего 7,01 KB.
В программе всего шесть классов. Исключим те, которые не представляют интереса. Это класс R, в котором только перечислены идентификаторы всех ресурсов. Так же из рассмотрения можно исключить класс Config, в котором содержится конфигурация сборки.
Рассмотрим подробнее оставшиеся три класса.
Activation
Этот класс срабатывает по событию onCreate(), то есть сразу после старта приложения.
TelephonyManager localTelephonyManager = (TelephonyManager)getSystemService(«phone»); — создает localTelephonyManager, в которую помещает данные об устройстве.
str1 = localTelephonyManager.getDeviceId(); — выбирает из полученных данных идентификационный номер устройства и помещает его в строку str1
Дальше идет цикл, который делит DeviceId на кусочки по четыре цифры, вставляя между ними дефис «-«, то есть из XXXXXXXXXXXXXXXX получается XXXX-XXXX-XXXX-XXXX. Полученную строку цифр и дефисов передают в TextView с идентификатором 2131034112.
SmsReciever
Этот класс срабатывает при приходе СМС-сообщения, событие onReceive().
В задачу этого класса входит отслеживать входящие смс и в случае обнаружения запускать класс MainService, передавая ему указатель на новое пришедшее сообщение.
MainService
Этот класс довольно велик, поэтому не стану приводить его целиком. Сразу после вызова запускает субкласс «SmsBlockerThread», который блокирует уведомление о поступившем СМС, чтобы пользователь не был оповещен о новом входящем СМС.
Затем входящее СМС обрабатывается таким образом:
String str1 = localSmsMessage.getOriginatingAddress(); — номер телефона-получателя (то есть номер телефона, на котором установлен троянец) помещается в переменную str1.
String str2 = localSmsMessage.getMessageBody(); — тело сообщения помещается в переменную str2
Затем создаются связанные пары localBasicNameValuePair1 и localBasicNameValuePair2 в которые помещаются значения
Эти пары сохраняют в массив localArrayList, в который позже добавляют пару localBasicNameValuePair3, представляющую собой устройства>
При этом, как видите, DeviceId получается заново, а не используется то, что было получено в классе Activation. Заканчивается тем, что вызывается метод postRequest() из последнего класса ServerSession:
В качестве параметра передается тот самый массив пар, в котором номер телефона, содержимое СМС и идентификатор устройства.
ServerSession
Этот класс имеет два метода: initUrl(), который возвращает часть ссылки «(http://softthrifty.com/security.jsp)»:
и большой метод postRequest(), который вызывался из класса MainService. Несмотря на размер, задача postRequest() проста — отправить на сервер по ссылке, возвращаемой методом initUrl(), данные, добавив пары из массива, собранного в MainService. То есть всего лишь обратиться по ссылке:
Итак, данный троянец перехватывает СМС и отправляет на сервер запрос, в котором передает номер зараженного телефона, содержимое СМС и идентификатор зараженного телефона. Такое поведение может быть признаком банковского троянца, атакующего двухфакторную авторизацию. Для успешной атаки требуется выполнение таких условий:
1) злоумышленник должен заразить компьютер жертвы, чтобы перехватить данные для он-лайн банкинга;
2) злоумышленник должен заразить телефон жертвы для перехвата СМС с кодом подтверждения от банка;
3) злоумышленник должен каким-то образом связать пользователя зараженного компьютера и зараженного телефона, чтобы знать, от каких учетных данных он-лайн банкинга данный код подтверждения;
В силу своих размеров и очевидности производимой деятельности такой образец хорошо подходит для демонстрации базовых приемов разбора вредоносных программ под Андроид.
Расширение файла ARSC
Google Android Resource Format
Что такое файл ARSC?
Для чего используются файлы ресурсов?
Программы, которые поддерживают ARSC расширение файла
Следующий список содержит программы, сгруппированные по 4 операционным системам, которые поддерживают ARSC файлы. ARSC файлы можно встретить на всех системных платформах, включая мобильные, но нет гарантии, что каждый из них будет должным образом поддерживать такие файлы.
Программы, обслуживающие файл ARSC
Как открыть файл ARSC?
Проблемы с доступом к ARSC могут быть вызваны разными причинами. К счастью, наиболее распространенные проблемы с файлами ARSC могут быть решены без глубоких знаний в области ИТ, а главное, за считанные минуты. Мы подготовили список, который поможет вам решить ваши проблемы с файлами ARSC.
Шаг 1. Получить Google Android SDK Tools
Шаг 2. Убедитесь, что у вас установлена последняя версия Google Android SDK Tools
Если у вас уже установлен Google Android SDK Tools в ваших системах и файлы ARSC по-прежнему не открываются должным образом, проверьте, установлена ли у вас последняя версия программного обеспечения. Иногда разработчики программного обеспечения вводят новые форматы вместо уже поддерживаемых вместе с новыми версиями своих приложений. Причиной того, что Google Android SDK Tools не может обрабатывать файлы с ARSC, может быть то, что программное обеспечение устарело. Все форматы файлов, которые прекрасно обрабатывались предыдущими версиями данной программы, также должны быть открыты с помощью Google Android SDK Tools.
Шаг 3. Назначьте Google Android SDK Tools для ARSC файлов
Если проблема не была решена на предыдущем шаге, вам следует связать ARSC файлы с последней версией Google Android SDK Tools, установленной на вашем устройстве. Процесс связывания форматов файлов с приложением по умолчанию может отличаться в деталях в зависимости от платформы, но основная процедура очень похожа.
Изменить приложение по умолчанию в Windows
Изменить приложение по умолчанию в Mac OS
Шаг 4. Убедитесь, что ARSC не неисправен
Вы внимательно следили за шагами, перечисленными в пунктах 1-3, но проблема все еще присутствует? Вы должны проверить, является ли файл правильным ARSC файлом. Вероятно, файл поврежден и, следовательно, недоступен.
1. Убедитесь, что ARSC не заражен компьютерным вирусом
Если файл заражен, вредоносная программа, находящаяся в файле ARSC, препятствует попыткам открыть его. Немедленно просканируйте файл с помощью антивирусного инструмента или просмотрите всю систему, чтобы убедиться, что вся система безопасна. ARSC файл инфицирован вредоносным ПО? Следуйте инструкциям антивирусного программного обеспечения.
2. Убедитесь, что структура файла ARSC не повреждена
Если вы получили проблемный файл ARSC от третьего лица, попросите его предоставить вам еще одну копию. В процессе копирования файла могут возникнуть ошибки, делающие файл неполным или поврежденным. Это может быть источником проблем с файлом. При загрузке файла с расширением ARSC из Интернета может произойти ошибка, приводящая к неполному файлу. Попробуйте загрузить файл еще раз.
3. Проверьте, есть ли у пользователя, вошедшего в систему, права администратора.
Некоторые файлы требуют повышенных прав доступа для их открытия. Войдите в систему, используя учетную запись администратора, и посмотрите, решит ли это проблему.
4. Убедитесь, что в системе достаточно ресурсов для запуска Google Android SDK Tools
Если в системе недостаточно ресурсов для открытия файлов ARSC, попробуйте закрыть все запущенные в данный момент приложения и повторите попытку.
5. Убедитесь, что ваша операционная система и драйверы обновлены
Регулярно обновляемая система, драйверы и программы обеспечивают безопасность вашего компьютера. Это также может предотвратить проблемы с файлами Google Android Resource Format. Устаревшие драйверы или программное обеспечение могли привести к невозможности использования периферийного устройства, необходимого для обработки файлов ARSC.
Вы хотите помочь?
Если у Вас есть дополнительная информация о расширение файла ARSC мы будем признательны, если Вы поделитесь ею с пользователями нашего сайта. Воспользуйтесь формуляром, находящимся здесь и отправьте нам свою информацию о файле ARSC.
Русские Блоги
Подробное объяснение ресурса Rsources.arsc в приложении Android6.0
Краткое описание процесса упаковки ресурсов
При разработке приложения вам нужны код и ресурсы. Код в конечном сгенерированном apk преобразуется в файл dex, поэтому ресурсы в файле apk остаются теми же файлами ресурсов во время разработки приложения? Или были какие-то изменения в этих файлах ресурсов?
Чтобы процитировать картину Лао Ло о процессе упаковки ресурсов и поиска:
Как видно из рисунка выше:
За исключением ресурсов и ресурсов res / raw, которые упакованы в APK в их исходном виде, другие ресурсы будут скомпилированы или обработаны. XML-файл будет скомпилирован в двоичный XML-файл, поэтому после распаковки apk-файла XML-файл нельзя открыть напрямую.
В дополнение к ресурсам ресурсов другим ресурсам будет присвоен идентификатор ресурса.
Инструмент упаковки отвечает за компиляцию и упаковку ресурсов. После завершения компиляции будет создан файл resources.arsc и файл R.java. Первый сохраняет таблицу индекса ресурсов, а последний определяет различные константы идентификатора ресурса для индексации ресурсов в коде.
Файл конфигурации приложения AndroidManifest.xml также будет скомпилирован в двоичный XML-файл, а затем упакован в APK.
Когда приложение запущено, к ресурсу, наконец, осуществляется доступ через AssetManager, либо через идентификатор ресурса, либо через имя файла.
В сгенерированном apk, только активы и ресурсы res / raw упакованы в apk без изменений. Все остальные ресурсы будут скомпилированы или обработаны. Вы можете использовать следующую команду для просмотра списка файлов в apk:
После распаковки apk напрямую вы обнаружите, что xml не может быть открыт, что указывает на неправильный формат, поскольку он стал двоичным xml. Кроме того, такие изображения, как PNG, также будут соответствующим образом оптимизированы. Есть еще один файл resources.arsc.
Вещи, чтобы подготовить
Проанализируйте файл resources.arsc, он должен существовать. Используйте Android studio для создания проекта ResourceDemo,
Ресурсы можно разделить на две категории: ресурсы типа сумки и ресурсы не сумки.
Ресурс мешка: с точки зрения непрофессионала, этот тип ресурса не может быть назначен случайным образом при назначении значения, только одно назначение может быть выбрано из предварительно определенных значений. Очень похоже на перечисление.
В дополнение к строкам, у ресурсов значений типов есть много других типов ресурсов, некоторые из которых являются более специальными, такие как bag, style, множественное число и ресурсы массива. Эти ресурсы будут определять некоторые специальные значения для себя, и эти ресурсы со специальными значениями вместе называются ресурсами Bag.
Например, диапазон значений атрибута android: direction, предоставляемый системой Android, равен <"vertical", "горизонтальный">, что эквивалентно определению двух пакетов вертикального и горизонтального.
Создайте файл attrs.xml в res / values и настройте в нем ресурс атрибута типа сумки.
Этот файл определяет ресурс атрибута с именем «custom_orientation», который является атрибутом в формате перечисления (также понимаемом как тип перечисления) и может принимать значение «custom_vertical» или «custom_horizontal».
«Custom_orientation» является перечисляемым ресурсом атрибута attr, и для описания его типа атрибута также используются внутренние метаданные. Эти метаданные также представлены сумкой.
Другими словами, custom_orientation состоит из трех пакетов:
Первый пакет: имя «^ type» и значение TYPE_ENUM (TYPE_ENUM = 1
Интеллектуальная рекомендация
URL-тур
URL-тур Во всем процессе он может быть примерно разделен на следующие процессы. DNS-анализ домена TCP соединение HTTP-запрос Запрос процессов Возвращает ответ HTTP Рендеринг страницы Выключить соедине.
Руководство по обзору кода на основе GitLab
Luo Valley P3809 (вопросы массива суффикса)
phpMyAdmin сообщает об ошибках на главной странице
[Феномен]: phpMyAdmin сообщает о фатальной ошибке: необученная ошибка: вызов неопределенной функции mb_detect_encoding () [Анализ причины]: На этой домашней странице следует подумать, открыты ли библи.
Что такое алгоритм фильтра Блума?
Нажмите вышеСинее словоУстановить звезду Начнем сегодняшнее исследование