Как открыть файл uid на андроид

Обновлено: 18.05.2024

Сегодня я продолжу рассматривать безопасность на уровне немного выше ядра. Во второй части мы рассмотрим, откуда появляются system.img, userdata.img и cache.img, а также как обеспечивается безопасность в Native user space.
Всем кому интересно, добро пожаловать!

Список статей

Что подразумевается под Native user space

Под Native user space подразумеваются все компоненты пространства пользователя, которые выполняются вне Dalvik Virtual Machine, и которые не являются частью Linux kernel. Native user space — это исполняемые файлы, скомпилированные под определенную архитектуру. К ним относятся исполняемые файлы, которые запускаются из init скрипта автоматически или в случае наступления какого-либо события, toolbox утилиты, а также некоторые исполняемые файлы, которые пользователь может запустить из-под shell.

Начало

Как я уже рассказывал в первой части, в основе Android лежит Linux kernel. Как и во всех Linux системах, в основе безопасности Android лежит access control. Т.е. каждый ресурс (например, файл) содержит мета-информацию о том, кто создал этот файл — owner (владелец) — и к какой основной группе (owner group) принадлежит owner (владелец). Каждый процесс запускается от имени какого-то user (пользователя). У каждого пользователя есть основная группа. Кроме того он может являться членом других групп. Таким образом, если к каждому ресурсу прикрепить информацию (в формате rwxrwxrwx) о том, кто может читать/писать/исполнять ресурс (например, файл), то можно контролировать доступ к этому файлу. Например, файлу можно назначить разрешения: что может делать с этим файлом owner (владелец) этого файла; что могут делать пользователи, которые входят в состав owner group; что могут творить все остальные. Здесь об этом можно почитать подробнее.

Но у Android есть некоторые отличия. Во-первых, изначально Android — это операционная система для телефонов, которые, как известно, относятся к очень личным вещам и которые мы не любим давать в чужие руки. То есть она была задумана как операционная система, у которой только один пользователь. Поэтому было принято решение использовать различных Linux users для обеспечения безопасности (для каждого приложения — отдельный пользователь, как я уже рассказывал в первой статье). Во-вторых, в Android некоторые user (пользователи) и их UID (идентификаторы) были жестко запрограммированы в систему, что вызывает очень много нареканий людей связанных с безопасностью (хотя я, если честно, не очень понимаю, почему критикуется такой подход). Мы уже видели этих пользователей в файле system/core/include/private/android_filesystem_config.h Например, root имеет идентификатор 0, а system — 1000.

Как я уже отмечал, процесс запускается от имени того же пользователя (UID), что и процесс, который запускает этот новый процесс, т.е. UID(calling_process) == UID (called_process). Первый процесс, который запускается в Android — init — запускается от имени root (UID == 0). Таким образом, по-идее, все процессы также должны быть запущены от имени того же пользователи. Так оно, наверное, бы и было. Но, во-первых, процессы, запущенные от имени привилегированного пользователя (а так же те, кто обладает определенными capabilities), могут изменять свой UID на менее привилегированный. А во-вторых, в Android при запуске демонов в init.rc скрипте так же можно указать, с привилегиями какого пользователя и каких групп запускать данный процесс.


Все процессы, которые будут запущены через этих демонов, уже не будут иметь root привилегии.

System, data и cache

Я столько раз анонсировал эту тему, что можно было подумать, что она очень сложная и запутанная. На самом деле, это не так. System.img, userdata.img и cache.img — то, что получается в результате компиляции операционной системы Android. То есть в результате сборки системы получаются эти три файла, которые мы и записываем на наше устройство.

Но самое важно здесь не это. Благодаря тому, что в Android системе user name и UID системных пользователей жестко запрограммированы, уже на этапе компиляции мы можем определить права доступа различных системных пользователей к различным директориям в данных образах. Эти права доступа указаны в файле system/core/include/private/android_filesystem_config.h, который мы уже рассматривали в первой статье. Права доступа определяются отдельно для директорий (android_dirs[]) и отдельно для файлов (android_files[]) следующим образом:


А функция static inline void fs_config(const char *path, int dir, unsigned *uid, unsigned *gid, unsigned *mode, uint64_t *capabilities), которая определена дальше в этом файле отвечает за выставление owner, owner group, capabilities и прав доступа. Эта функция вызывается во время сборки образа.

В общем здесь всё должно быть более-менее понятно, за исключением установки флагов прав доступа (setuid и setgid) для некоторых файлов (например, для «system/xbin/su» права доступа определены как 06755, где первая 6 означает, что выставлен флаг установки ID пользователя (4) и флаг установки ID группы (2)). Установка этих флагов означает, что пользователь может повысить права запускаемого процесса до уровня owner (владельца) файла или owner group (группы владельца). В случае Android, каждое приложение — это пользователь со своими UID и GID. Таким образом, по умолчанию если вы из своего приложения запускаете какой-нибудь native executable, он исполняется с теми же UID и GID, как и приложение его вызвавшее. Установка данных флагов прав доступа позволяет выполнить native executable с правами владельца. В нашем случае, владелец — AID_ROOT (root). Происходит это следующим обрзазом system/extras/su/su.c:


Т.е. вызываются функции setuid и setgid. В этом случае, если данные функции выполнились успешно, то процесс начинает работать от имени owner и owner group данного файла. В нашем примере, данный процесс получает права суперпользователя, т.е. он может делать всё, что ему пожелается :) Подобная анархия не всегда оправдана, поэтому в Linux ввели понятие capabilities. Так приложению «run-as» не нужны всё права суперпользователя, ему достаточно иметь возможность только менять свой идентификатор, чтобы запускать приложения от имени различных пользователей. Кстати, capabilities похоже появились недавно — в Android 2.3.x я их не встречал.

Безопасность

В случае привилегированных программ (типа, su) необходимо ограничивать круг приложений, которые могут вызывать эти программы. В противном случае любое приложение может получить права суперпользователя. Поэтому очень часто в такие программы встраивают проверку по UID:


Т.е. программа вначале проверяет, от чьего имени запущен вызывающий процесс, используя функцию getuid(). А потом сравнивает эти значения со значениями, которые жестко запрограммированы в систему. В данном случае, только процессы запущенные от имени пользователей «system» и «root» имеют право использовать su.

Заключение

В данной статье мы закончили разбирать, как обеспечивается безопасность на уровне Native user space. В следующих статьях я планирую разобрать, как работают permission (разрешения), но в связи с большой текущей загрузкой не знаю, когда приступлю к их написанию. Как всегда, буду очень рад дополнениям и исправлениям.

Это может быть очень неприятно, когда у вас есть файл UID, и вы не можете открыть его. Но не волнуйтесь, в большинстве случаев решение вашей проблемы очень простое. Следуйте инструкциям в шагах 1-4, перечисленным ниже, и вы сможете решить вашу проблему и легко открыть файл UID.

  1. 1. UID расширение файла
  2. 2. Как открыть файл UID?
    1. 2.1 Проверьте UID файл на наличие ошибок
    2. 2.2 Как решить возникшие проблемы?
      1. 2.2.1 Программы, открывающие файлы UID

      UID расширение файла

      • Тип файла IBM Voice Type Users
      • Разработчик файлов IBM
      • Категория файла Другие файлы
      • Рейтинг популярности файлов

      Как открыть файл UID?

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

      Проверьте UID файл на наличие ошибок

      • В системе не установлена программа, которая поддерживает UID файлы
      • С этим расширением не связано ни одной программы, поддерживающей файлы UID (в системном реестре нет записей, связанных с программами, которые следует использовать для открытия файлов UID)
      • Файл имеет неизвестное или непроверенное происхождение и, скорее всего, заражен. В этом случае пользователь должен проявлять крайнюю осторожность, чтобы вирус не распространялся на другие файлы в системе (следуйте инструкциям, отображаемым в диалоговом окне антивирусного программного обеспечения.
      • UID файл может быть неполным, что не позволит системе открыть его (это может быть в случае с файлом, загруженным из Интернета или скопированным из других источников)
      • Файл поврежден

      Как решить возникшие проблемы?

      Чтобы решить следующие проблемы, следуйте инструкциям:

      Шаг 1. Выберите, загрузите и установите соответствующее программное обеспечение. Список программ, поддерживающих файлы с расширением UID, можно найти ниже:

      Программы, которые поддерживают UID расширение файла

      Ниже приведена таблица со списком программ, которые поддерживают UID файлы. Файлы с расширением UID, как и любые другие форматы файлов, можно найти в любой операционной системе. Указанные файлы могут быть переданы на другие устройства, будь то мобильные или стационарные, но не все системы могут быть способны правильно обрабатывать такие файлы.

      Программы, обслуживающие файл UID

      Как открыть файл UID?

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

      Шаг 1. Установите IBM Voice Type программное обеспечение

      Install software to open UID file

      Основная и наиболее частая причина, препятствующая открытию пользователями файлов UID, заключается в том, что в системе пользователя не установлена программа, которая может обрабатывать файлы UID. Решение этой проблемы очень простое. Загрузите IBM Voice Type и установите его на свое устройство. В верхней части страницы находится список всех программ, сгруппированных по поддерживаемым операционным системам. Если вы хотите загрузить установщик IBM Voice Type наиболее безопасным способом, мы рекомендуем вам посетить сайт IBM и загрузить его из официальных репозиториев.

      Шаг 2. Обновите IBM Voice Type до последней версии

      Update software that support file extension UID

      Если у вас уже установлен IBM Voice Type в ваших системах и файлы UID по-прежнему не открываются должным образом, проверьте, установлена ли у вас последняя версия программного обеспечения. Может также случиться, что создатели программного обеспечения, обновляя свои приложения, добавляют совместимость с другими, более новыми форматами файлов. Это может быть одной из причин, по которой UID файлы не совместимы с IBM Voice Type. Последняя версия IBM Voice Type должна поддерживать все форматы файлов, которые совместимы со старыми версиями программного обеспечения.

      Шаг 3. Назначьте IBM Voice Type для UID файлов

      После установки IBM Voice Type (самой последней версии) убедитесь, что он установлен в качестве приложения по умолчанию для открытия UID файлов. Следующий шаг не должен создавать проблем. Процедура проста и в значительной степени не зависит от системы

      Associate software with UID file on Windows

      Изменить приложение по умолчанию в Windows

      • Выберите пункт Открыть с помощью в меню «Файл», к которому можно щелкнуть правой кнопкой мыши файл UID.
      • Далее выберите опцию Выбрать другое приложение а затем с помощью Еще приложения откройте список доступных приложений.
      • Чтобы завершить процесс, выберите Найти другое приложение на этом. и с помощью проводника выберите папку IBM Voice Type. Подтвердите, Всегда использовать это приложение для открытия UID файлы и нажав кнопку OK .

      Изменить приложение по умолчанию в Mac OS

      Шаг 4. Убедитесь, что UID не неисправен

      Вы внимательно следили за шагами, перечисленными в пунктах 1-3, но проблема все еще присутствует? Вы должны проверить, является ли файл правильным UID файлом. Отсутствие доступа к файлу может быть связано с различными проблемами.

      Check UID file for viruses

      1. Проверьте UID файл на наличие вирусов или вредоносных программ.

      Если файл заражен, вредоносная программа, находящаяся в файле UID, препятствует попыткам открыть его. Немедленно просканируйте файл с помощью антивирусного инструмента или просмотрите всю систему, чтобы убедиться, что вся система безопасна. UID файл инфицирован вредоносным ПО? Следуйте инструкциям антивирусного программного обеспечения.

      2. Проверьте, не поврежден ли файл
      3. Проверьте, есть ли у пользователя, вошедшего в систему, права администратора.

      Иногда для доступа к файлам пользователю необходимы права администратора. Выйдите из своей текущей учетной записи и войдите в учетную запись с достаточными правами доступа. Затем откройте файл IBM Voice Type Users.

      4. Убедитесь, что ваше устройство соответствует требованиям для возможности открытия IBM Voice Type

      Если в системе недостаточно ресурсов для открытия файлов UID, попробуйте закрыть все запущенные в данный момент приложения и повторите попытку.

      5. Проверьте, есть ли у вас последние обновления операционной системы и драйверов

      Регулярно обновляемая система, драйверы и программы обеспечивают безопасность вашего компьютера. Это также может предотвратить проблемы с файлами IBM Voice Type Users. Устаревшие драйверы или программное обеспечение могли привести к невозможности использования периферийного устройства, необходимого для обработки файлов UID.

      Вы хотите помочь?

      Если у Вас есть дополнительная информация о расширение файла UID мы будем признательны, если Вы поделитесь ею с пользователями нашего сайта. Воспользуйтесь формуляром, находящимся здесь и отправьте нам свою информацию о файле UID.


      01:49 01-05-2007 DimonVideo

      Видел на форуме и сайте кучу вопросов, таких как:
      -"А че такое уид??"
      -"Зачем нужен uid?"
      -"Где взять этот uid?"
      -"Что такое, и с чем едят uid?"
      -"Расскажите про уид!"
      И вот, решил написать статейку для непосвященных =)
      Итак, начнем.
      UID - это составной идентификатор, с помощью которого идентифицируются объекты в Symbian OS. UID состоит из трех 32-битных отдельных чисел. Эти числа, называются компонетами
      UID и обычно когда о них заходит речь, на них ссылаются как на UID1-, UID2- и UID3-компоненты. В Symbian OS UID'ы используются в самых различных случаях:
      - UID-ы используются для идентификации типов различных объектов как во время исполнения так и во
      время загрузки. Например исполняемые файлы, DLL, файловые хранилица и многое другое имеет свои собственные
      UID.
      - UID-ы используютя для проверки, что объект, который предполается загрузить обеспечит совместимый
      и ожидаемый от него интерфейс.Таким образом можно проверить, что DLL относится к ожидаемому типу
      или что используемое файловое хранилище имеет строго определнный тип.
      - UID-ы - это значения которые однозначно связывают документы и приложения для их обработки. Например,
      графические приложения с определенной программой их просмотра.

      В Symbian OS UID-ы используются повсеместно для разнообразных идентификаций типов
      файлов и увязки файлов с теми или иными приложениями. Конечно, пользователю более понятны обычные
      имена файлов и Symbian OS гибко поддерживает имена файлов различной длинны. Но с точки зрения системы,
      32-битные номера обеспечивают большую однозначность, систематичность и более легкую идентификацию.
      Поэтому UID-ы являются фундаметальной характеристикой ОС.

      По определению, UID-тип объекта состоит из трех отдельных UID-ов используемых
      в комбинациях. Составные компоненты UID-ов называются UID1, UID2 и UID3 имеют следующие основные
      характеристики:
      - UID1- может быть рассмотрен как идентификатор на уровне системы; например, исполняемые файлы,
      DLL, файловые хранилища все различаются по UID1.
      - UID2-различия между объектами имеющими один и тот же UID1 и могут быть рассмотрены как идентификатор
      интерфейса; например, статический интерфейс (разделяемая библиотека) и полиморфический интерфейс
      (приложение или встраеваемая программная оболочка) DLL-ки отличаются по UID2.
      - UID3-идентифицирует объекты, имеющие конкретный UID2 и может рассматриваться как идентификатор
      проекта; например, UID3 может быть разделен между всеми объектами, принадлежащими данной программе,
      включая библиотеки, если имеются, DLL-ки каркасов,и все документы.

      UID-тип это объект типа TUidType, которой можно создать из комбинаций всех
      или некоторых из трех возможных UID-ов. Если переменная имеет прелставляет собой UID, то можно выяснить
      и значения составляющих её компонентов UID1, UID2 и UID3.

      Объект в Symbian OS и, особенно, многие файлы в Symbian OS могут иметь все, несколько,
      или вообще не иметь не одного из трех возможных UID-ов.
      Вариант с отсутсвием UID-ов необходим для того, чтобы можно было взаимодействовать
      с другими системами, позволяя легко и свободно использовать по назначению в Symbian OS не родные
      файлы данных. Symbian OS позволяет создавать настраиваемые файловые ассоциации и идентификации даже
      когда UID-ы отсутсвуют. Это делается по расширениям имен файлов.

      Каждый "родной" документ должен иметь соотвествующий UID1. его значение задается
      приложением, создавщим этот документ.

      Необходимым является только UID1, но в большинстве случаев разработчики захотят
      определить второй и третий UID-ы для документов, которые создает и использует их приложение. Значения
      этих UID используются каркасом архитектуры приложения, чтобы управлять связями между приложениями
      и их документами. Например, это позволяет при открытии файла определить и запустить связанное с ним
      приложение, а также правильно отображать иконку этого приложения, возле файла документа. И наоборот
      это позволяет приложению, отсортировывать свои файлы среди прочих.

      UID задается из диапазона 0х01000000 до 0x0fffffff.

      UID можно в любое время посмотреть, зайдя например в программу SmartFileMan, и нажав клавишу "5" на нужном файле.На экране появятся все три UID-a.

      Об использовании android: sharedUserId = "android.uid.system"

      После долгого поиска в Интернете я обнаружил, что есть два способа решить эту проблему:

      Один из них - скомпилировать с помощью make в среде исходного кода системы Android:

      1. Добавьте атрибут android: sharedUserId = "android.uid.system" в узел манифеста в AndroidManifest.xml приложения. .

      2. Измените файл Android.mk и добавьте строку LOCAL_CERTIFICATE: = platform.

      3. Используйте команду mm для компиляции, и сгенерированный apk будет иметь право изменять системное время.

      Этот метод не может быть скомпилирован с .mk, поэтому я должен обратиться ко второму методу:
      1. Добавьте атрибут android: sharedUserId = "android.uid.system". ,

      2. Используйте eclipse для компиляции неподписанного файла apk, но этот файл apk использовать нельзя.

      3. Используйте ключ платформы целевой системы, чтобы повторно подписать файл apk.

      Этот шаг более сложен, сначала найдите файл ключа, расположение в моем каталоге исходного кода Android - «build / target / product / security»,

      Следующие два файла - это platform.pk8 и platform.x509.pem. Затем используйте инструмент Signapk, предоставляемый Android, чтобы подписать,

      Исходный код signapk находится в папке «build / tools / signapk», используется «signapk platform.x509.pem platform.pk8 input.apk output.apk»,

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

      Наконец, чтобы объяснить принцип, сначала добавьте атрибут android: sharedUserId = "android.uid.system".

      С помощью общего идентификатора пользователя можно настроить несколько APK-файлов с одним и тем же идентификатором пользователя для работы в одном процессе.

      Затем сопоставьте UID программы с android.uid.system, то есть позвольте программе работать в системном процессе, чтобы у вас было право изменять системное время.

      Недостаточно просто добавить UID. Если APK-файл установлен в это время, он не будет установлен, а подпись не будет совпадать.

      Причина в том, что программа хочет запускаться в системном процессе, но также имеет ключ платформы целевой системы, которым являются два файла platform.pk8 и platform.x509.pem, упомянутые во втором методе выше.

      После подписания этими двумя ключами apk фактически может быть помещен в системный процесс. Добавление LOCAL_CERTIFICATE: = platform к первому методу фактически использует эти два ключа для подписи.

      Также существует проблема, то есть программа, сгенерированная таким образом, может использоваться только в исходной системе Android или системе, скомпилированной вами, потому что такая система может получить два файла platform.pk8 и platform.x509.pem.

      Если Android, сделанный другой компанией, даже не может быть установлен. Попробуйте подписать ключ в исходном Android, программа работает на эмуляторе ОК, но при установке на G3 сразу же выдается запрос «Пакет . не имеет подписей, соответствующих подписям общего пользователя android.uid.system». Защитите безопасность системы.

      Наконец, атрибут android: sharedUserId может не только помещать apk в системный процесс, но также настраивать несколько APK для работы в одном процессе.

      Обмен данными должен быть полезным.

      Как мы все знаем, Pid - это идентификатор процесса, Uid - это идентификатор пользователя, но Android - это не то же самое, что компьютер. У каждого пользователя компьютера есть Uid, который запускает программу, Uid этой программы - это этот пользователь, и каждая программа в Android Существует Uid. По умолчанию Android назначает Uid с разным общим уровнем для каждой программы. Если вы звоните друг другу, только Uid может быть одинаковым. Это обеспечивает определенную степень безопасности общих данных. Данные не могут быть получены произвольно между программами.

      Существует три типа UID системного процесса:

      • android:sharedUserId="android.uid.system"
      • android:sharedUserId="android.uid.shared"
      • android:sharedUserId="android.media"
        Давайте поэкспериментируем с первым. Две другие реализации будут такими же.

      Объявить UID

      Во-первых, нам нужно объявить UID приложения в манифесте:

      Фирменная упаковка

      Предварительным условием для упаковки подписи является наличие файла подписи системы, который обычно находится в каталоге build / target / product / security исходного кода, а пользовательские системы некоторых производителей размещаются в других каталогах. Например, Nanopc3, который я использую, находится в следующем каталоге, который может быть глобальным Найдите его. Сначала я также использовал каталог сборки, но его не удалось установить после упаковки. Позже я обнаружил, что в каталоге vendor также был / (ㄒ o ㄒ) /

      загрузка… повторно загрузитьОтмена загрузка… повторно загрузитьОтмена

      Среди них android: sharedUserId = "android.uid.system" соответствует двум файлам platform.pk8 и platform.x509.pem.
      Вот три распространенных способа импорта системных подписей:

      • Повторно подписать сгенерированный apk
      • Повторно подписать собственный файл подписи приложения
      • Скомпилировать из mk файла

      Уже есть apk

      Созданный файл apk можно повторно подписать с помощью следующей команды через файл signapk.jar в каталоге исходного кода / out / host / linux-x86 / framework.

      java -jar signapk.jar platform.x509.pem platform.pk8 my.apk new.apk

      Обратите внимание, что четыре файла signapk.jar, platform.x509.pem, platform.pk8 и my.apk должны находиться по одному и тому же пути при использовании этой инструкции, в противном случае вам нужно изменить путь самостоятельно.

      Восстановить подпись

      После создания собственного файла ключа используйте инструмент keytool-importkeypair для повторного создания подписи с помощью следующей команды:

      keytool-importkeypair -k demo.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias demo

      • demo.jks: файл подписи
      • 123456: пароль файла подписи
      • platform.pk8, platform.x509.pem: файл подписи системы
      • демо: псевдоним файла подписи

      Используйте файл mk для компиляции в исходной среде

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

      Читайте также: