- Как открыть файл .bin файл на Андроиде?
- Что такое BIN формат?
- Как открыть .bin файл на телефоне?
- Второй способ
- Программы для просмотра и редактирования BIN файлов
- Основы безопасности операционной системы Android. Native user space, ч.1
- Вступление
- Список статей
- Что подразумевается под Native user space
- Файловая система Android
- Процесс загрузки Android
- Заключение
- Ссылки
- Еще один [почти] неудаляемый троянец под Android
- Android 5.1? В 2019 году?
- Основные функции троянца
- Установщик
- Модифицированная системная библиотека libc.so
- Как бороться с таким троянцем?
Как открыть файл .bin файл на Андроиде?
Бывают ситуации, когда пользователям необходимо открыть файл формата «.bin» на Андроид смартфоне. Изначально система смартфона не позволяет открывать эти файлы для просмотра, поскольку это набор исполняемых команд для компьютера. В статье рассмотрим как можно просмотреть такой файл на Андроиде или с компьютера.
Что такое BIN формат?
Бин файл с расширением «.bin» на конце – это набор строк в бинарном формате, который состоит из одной или нескольких команд. Содержимое файла кодируется в привычный текст, но изначально идет в двоичном формате и состоит из нулей и единиц (0 и 1).
Обратите внимание, что запускать данный файлы может быть опасно, тем более на компьютерах. Если вы скачали что-то из Интернета – исполняемый файл может содержать угрозы и вирусы.
Если запустить такой файл в Windows – компьютер выполнит по очереди все команды записанные внутри. Обычно там содержатся ключи активации к программам, играм, различные «Кряки» и «Таблетки» к приложениям.
По этому если вы собрались запускать такой файл необходимо понять что это вообще и для чего и откуда вы его скачивали.
Как открыть .bin файл на телефоне?
Что бы увидеть содержимое файла можно попытаться открыть его в текстовом формате в блокноте на ПК или Андроид. Если у вас под рукой только смартфон. Понадобиться зайти в файловый менеджер (можно использовать встроенный в ваш смартфон):
- Если загружали из интернета файл скорее всего лежит в папке «Загрузки» или «Downloads».
- Найдите файл в памяти смартфона и нажмите «Еще» или иконку с тремя точками «…».
- Затем выберите из списка «Открыть как» или «Открыть с помощью» или «Открыть как текст». Названия пунктов могут отличаться в зависимости от модели вашего смартфона.
- Запустить данный файл прямо на смартфоне скорее всего НЕ ПОЛУЧИТСЯ, т.к. он предназначит для компьютера. Но просмотреть его содержимое вполне реально.
Лайфхак: если открыть через файловый менеджер не удается можно переименовать файл. Вместо расширения «имя_файла.bin» изменить на «имя_файла.txt». Мы получим текстовый файл, который можно открыть в любом текстовом редакторе и увидеть его содержимое. Затем измените расширение .txt обратно на .bin.
Второй способ
Если открыть БИН на смартфоне не получается или оказалось проблематично можно воспользоваться компьютером. Для этого достаточно перекинуть файл по USB кабелю на ваш ПК. Можно скопировать на любой диск или смартфон. Не запускайте файл двойным кликом! Сначала просмотрите его содержимое:
- Кликните правой кнопкой мыши по файлу.
- Наведите на пункт меню «Открыть с помощью».
- В выпадающем окне выберите вариант «Блокнот».
Открываем BIN файл на компьютере
Если вы хотели загрузить файлы игры или образ диска – вам понадобиться специализированная программа. Для Андроида таких программ нет, а для настольного пк можно выбрать одну из списка ниже:
Программы для просмотра и редактирования BIN файлов
Если возникла острая необходимость увидеть содержимое именно со своего смартфона – можно установить бесплатную программу для просмотра и редактирования БИН содержимого. В Google Play достаточно набрать в поисковой строке «Bin редактор», затем загрузить и установить любую программу. Можно использовать универсальный конвертер ISO Extractor или специальную утилиту BIN Opener.
Для большинства программ потребуется включить отладку по USB в настройках смартфона согласно документации.
Евгений Загорский
IT специалист. Автор информационных статей на тему Андроид смартфонов и IOS смартфонов. Эксперт в области решения проблем с компьютерами и программами: установка, настройка, обзоры, советы по безопасности ваших устройств. В свободное время занимается дизайном и разработкой сайтов.
Источник
Основы безопасности операционной системы Android. Native user space, ч.1
Вступление
В этой статье я попробую рассмотреть безопасность чуть-чуть повыше ядра, а именно: как работает безопасность в Native user space. Мы коснемся темы процесса загрузки операционной системы и рассмотрим структуру файловой системы Android. Как я уже говорил, я не очень силен в Linux, поэтому если заметите неточности, то исправляйте — меня научите и статью улучшите. Так как эта тема довольно обширная, я решил разбить её на две части. В первой части мы рассмотрим процесс загрузки операционной системы и особенности файловой системы. Всем кому интересно, добро пожаловать!
Список статей
Что подразумевается под Native user space
Под Native user space подразумеваются все компоненты пространства пользователя, которые выполняются вне Dalvik Virtual Machine, и которые не являются частью Linux kernel.
Файловая система Android
Для начала давайте рассмотрим структуру файловой системы Android. Хотя Android и базируется на Linux kernel, привычную нашему глазу структуру файловой системы мы здесь не увидим. Давайте запустим эмулятор и посмотрим, что у нас есть. Для этого выполним комманду:
В моем терминале для эмулятора на Android 4.2 я вижу следующий результат:
Я отмечу здесь только главные директории и те, которые нам пригодятся в будущем. В Интернете можно найти описание и предназаначение других директорий. Можно заметить, что некоторые директории такие же, как и в Linux, например, /dev, /proc, /sys, /mnt, /etc И их предназначение в основном такое же, как и в Linux. Кстати, отметьте, что мы не видим /bin и /lib директорий. Где они скрылись, я расскажу чуть позже.
C другой стороны можно заметить директории, которых в Linux вообще нет. Среди них нас интересуют /data, /system, /cache, /init, /init.rc Давайте рассмотрим их назначение поподробнее.
/system Это главная директория, где хранятся неизменяемые компоненты Android системы. Если проводить аналогию, то эта папка похожа на папку C:\windows\, доступную только для чтения. Т.е. изменять данные в этой директории мы не можем. Как раз здесь можно найти директории /bin и /lib, где хранятся различные исполняемые файлы и shared libraries. Кроме того, здесь же лежат системные приложения, которые встроены в операционку и которые, по умолчанию, нельзя удалить. Содержимое этой директории формируется во время компиляции операционной системы.
/data Т.к. /system у нас доступна только для чтения, то должна быть директория где хранятся изменяемые данные. /data как раз ею и является. Например, в эту директорию в /data/app сохраняются apk файлы устанавливаемых приложений, а в /data/data хранятся их данные (эту директорию мы подробно рассматривали в прошлой статье).
/cache Это просто временное хранилище. Также в эту директорию сохраняются, а потом из неё запускаются системные обновления.
Чтобы понять, что такое /init файл и для чего нужны непонятные файлы с расширением *.rc, рассмотрим процесс загрузки системы.
Процесс загрузки Android
Давайте рассмотрим несколько шагов процесса загрузки операционной системы Android. Эта картинка взята из книги «Embedded Android», там же можно найти и более детальное описание. Хотя в целом я и понимаю процесс, но для меня это больше магия 🙂
CPU. Когда вы нажимаете на кнопку включения, на процессор вашего устройства начинает подаваться напряжение. Так как до этого момента процессор был выключен, и так как он не способен сохранять свое состояние без подачи напряжения, то сразу после старта он находится в некотором неинициализированном состоянии. В данном случае процессор считывает из своего специального регистра некоторый жестко зашитый адрес и начинает выполнять инструкции начиная с него. Чаще всего, этот адрес указывает на чип, в который зашит bootloader (загрузчик).
Bootloader. Bootloader инициализирует RAM и загружает в неё Linux kernel. Кроме того Bootloader создает RAMdisk.
Linux kernel. Ядро инициализирует различные подсистемы, встроенные драйвера и монтирует root filesystem (корневую файловую систему). После этого ядро может запускать первую программу.
На этом магия заканчивается и дальше всё становится более-менее понятно.
Первой программой в случае Android является init. Исполняемый файл находится в корневой директории (/init). Именно эту программу стартует ядро после своей загрузки. Её исходники находятся в папке system/core/init/ Давайте в них слегка покопаемся. Нас интересует system/core/init/init.c:
Вначале мы создаем и монтируем некоторые необходимые для работы директории, а потом парсим файл /init.rc и выполняем то, что распарсили. Формат /init.rc файла очень хорошо описан в readme, там же можно найти и пример. Если кратко, то этот файл представляет собой набор actions (секций — именнованная последовательность комманд). Каждая последовательность команд срабатывает по определенному trigger (триггеру). Например, следующая последовательно — это action, в которой trigger — это fs, а последовательность команд — это набор mount команд:
Исходный файл /init.rc находится в system/core/rootdir/init.rc Давайте рассмотрим некоторые основные его части, хотя я вам очень советую просмотреть его полность. После этого многие вещи вам должны стать понятны. Итак, начинается наш файл следующими строками:
Они означают, что кроме init.rc файла нужно также импортировать настройки из файлов init.usb.rc, init.trace.rc и из файла с непонятным именем init.$
После этого происходит инициализация переменных, необходимых для работы устройства. Если вас заинтересует эта тема, то вы легко найдете информацию о той или иной комманде. Давайте подробно рассмотрим следующий блок (который я уже приводил в этой статье):
MTD — Memory Technology Devices. Если в общих чертах, то MTD — это специальный чип с энергонезависимой (т.е. данные на этом чипе сохраняются после перезагрузки или выключения) flash-памятью (типа NOR или NAND), на который сохраняются образы дисков. В этой статье более подробно рассказывается об этом типе устройств, а также об ограничениях. Специально для этих разновидностей flash-памяти были разработаны специальные файловые системы, например, YAFFS. Одно из самых важных ограничений этих типов памяти заключается в том, что для того чтобы записать данные в сектор, куда уже записаны какие-то данные, вам надо полностью сначала стереть весь сектор. Поэтому производители стали переходить на новый тип блочной flash-памяти (eMMC), на которые можно поставить обычную ext4 файловую систему и избавиться от указанного ограничения. Т.к. я показываю пример init.rc файла для эмулятора, где вся работа эмулируется, то в нем по умолчанию используется файловая система YAFFS2 (думаю, что это пережитки прошлого, т.к. YAFFS2 использовалась для всех устройств до Android 2.2). В реальном устройстве (это как раз один из примеров, когда необходимо использовать init.rc файл для определенного железа) эти комманды будут перезаписаны. Например, в случае устройства herring (Google Nexus S), в файле init.herring.rc эта секция выглядит следующим образом:
Где fstab.herring — это файл, содержимое которого выглядит следующим образом:
Как вы могли заметить, /system, /data, /cache — это просто mounting points (точки монтирования файловой системы), которые указывают либо на MTD устройства (в случае эмулятора), либо на блочные устройства (в случае настоящего устройства), куда записаны соответствующие дисковые образы (system.img, userdata.img и cache.img). Я не уверен, но думаю, что внутри смартфона находится один единственный чип с flash-памятью, разделенный на partitions (тома), в каждый из которых записан соответствующий образ. Этот чип с flash-памятью — то, что мы знаем под именем Internal storage (внутренняя память), объем которой — один из основных параметров смартфона.
Следует заметить, что /system смонтирован read-only (только для чтения). Это означает, что содержимое данного раздела не изменяется в процессе работы устройства, а только когда вы, например, обновляете систему на вашем устройстве (используя системные обновления).
Продолжим рассматривать наш init.rc. По триггеру post-fs-data формируется базовая структура файловой системы /data раздела. Там, в общем всё понятно — набор mkdir, chown, chmod команд.
Далее init.rc запускает несколько демонов. Если вернуться к рисунку в начале статьи, то они перечислены в блоке Native daemons. На этом мы пока остановимся. Как вы могли заметить из рисунка, я не полностью рассмотрел процесс загрузки операционной системы. Некоторые непокрытые этапы я рассмотрю в следующих статья.
Заключение
В следующей части я расскажу, откуда берутся образы system.img, userdata.img и cache.img и рассмотрю безопасность на уровне Native user space. Как всегда приветствуются исправления, дополнения, а так же предложения, о чем написать. И хотя у меня уже есть некоторый план, о чем писать в следующих статья, я готов его подкорректировать.
Ссылки
Update
- Комментарий от пользователя bmx666 про различные варианты размещения загузчика на MTD устройствах.
- Комментарий от пользователя SamOwaR про инициализацию CPU на разных SoC
Источник
Еще один [почти] неудаляемый троянец под Android
В конце прошлого года с помощью функции обнаружения изменений в системной области у некоторых наших пользователей было зафиксировано изменение системного файла /system/lib/libc.so. Это одна из главных библиотек операционных систем на базе Linux, которая отвечает за системные вызовы и основные функции. Подробное рассмотрение этого случая позволило выявить новые образцы из семейства троянцев Android.Xiny, известного нам с 2015 года.
У его представителей мы впервые увидели установку атрибута «неизменяемый» на файлы, что существенно усложняло удаление троянцев с устройств.
Выглядело это довольно занятно: на apk-файл установленного приложения ставился указанный атрибут, попытка удалить это приложение выглядела успешной, его данные удалялись, но сам apk-файл оставался на месте. После перезагрузки устройства приложение снова «появлялось». Об одном из таких троянцев мы рассказали в 2016 году. Для борьбы с подобными угрозами мы добавили в наш антивирус функцию сброса атрибутов у файлов, которая работает при условии, что пользователь предоставил антивирусу root-полномочия.
В этой статье мы рассмотрим еще один интересный метод самозащиты, применяемый новыми версиями Android.Xiny.
Android 5.1? В 2019 году?
Троянец, рассматриваемый в данной статье, работает под ОС Android до версии 5.1 включительно. Может показаться странным, что вредоносное ПО, рассчитанное на столь «древние» версии Android, всё ещё активно (версия 5.1 вышла в 2015 году). Но, несмотря на свой возраст, старые версии всё ещё используются. По данным корпорации Google на 7 мая 2019 года, 25.2% устройств работают под управлением Android 5.1 и ниже. Статистика по нашим пользователям даёт чуть большее число — около 26%. Это значит, что около четверти всех Android-устройств являются потенциальными целями, что не так уж и мало. Учитывая, что указанные устройства подвержены уязвимостям, которые никогда не будут исправлены, неудивительно, что старые версии ОС Android всё ещё представляют интерес для вирусописателей. Ведь права root, которые можно получить с помощью эксплуатации упомянутых уязвимостей, развязывают вирусописателям руки — с их помощью можно делать на устройстве всё что угодно. Хотя чаще всего это сводится к банальной установке приложений.
Основные функции троянца
Начиная с самых ранних версий, главная функция троянца Android.Xiny — установка на устройство произвольных приложений без разрешения пользователя. Таким образом злоумышленники могут зарабатывать, участвуя в партнёрских программах, которые платят за установку. Насколько можно судить, это один из основных источников дохода для создателей данного семейства. После запуска некоторых его представителей можно за несколько минут получить практически неработоспособное устройство, на котором будет установлено и запущено множество безвредных, но ненужных пользователю приложений. Кроме того, данные троянцы могут устанавливать и вредоносное ПО — всё зависит от команды, полученной с управляющего сервера.
Самое интересное, что выделяет новые версии троянца Android.Xiny — это защита от удаления. За неё отвечают два компонента. Рассмотрим их подробнее.
Установщик
sha1: f9f87a2d2f4d91cd450aa9734e09534929170c6c
детект: Android.Xiny.5261
Данный компонент запускается после получения прав root. Он подменяет собой системные файлы /system/bin/debuggerd и /system/bin/ddexe, чтобы обеспечить свой автоматический запуск, а оригиналы сохраняет под именами с суффиксом _server, действуя как классический вирус-компаньон. Также он копирует в системный раздел ещё несколько исполняемых файлов из папки, переданной в параметрах командной строки. Кроме того, троянец может обновлять компоненты, которые установил в системный раздел, если его запустить с особыми параметрами и указать папку, где лежат новые версии.
Android.Xiny.5261 содержит внушительный список файлов для удаления. В него входят пути, характерные для более старых представителей семейства, а также для конкурирующих семейств троянцев, устанавливающихся в системный раздел. Таких как, например, Triada.
Кроме того, Android.Xiny.5261 удаляет некоторые предустановленные приложения — возможно, чтобы освободить место. Наконец, он удаляет известные приложения для управления правами root – такие как SuperSU, KingRoot и другие. Таким образом, он лишает пользователя возможности использовать root-права, а значит, и удалить троянские компоненты, установленные в системный раздел.
Модифицированная системная библиотека libc.so
sha1: 171dba383d562bec235156f101879223bf7b32c7
детект: Android.Xiny.5260
Этот файл заинтересовал нас больше всего, и с него началось это исследование. При беглом взгляде на него в hiew можно заметить наличие исполняемого кода ближе к концу в секции .data, что подозрительно.
Открываем файл в IDA и смотрим, что это за код.
Выясняется, что в данной библиотеке были изменены следующие функции: mount, execve, execv, execvp, execle, execl, execlp.
Код изменённой функции mount:
int __fastcall mount ( const char * source , const char * target , const char * filesystemtype , unsigned int mountflags , const void * data )
<
unsigned __int8 systemPath [ 19 ] ; // [sp+18h] [bp-1Ch]
bool receivedMagicFlags ; // [sp+2Bh] [bp-9h]
int v13 ; // [sp+2Ch] [bp-8h]
v13 = MAGIC_MOUNTFLAGS ; // 0x7A3DC594
receivedMagicFlags = mountflags == MAGIC_MOUNTFLAGS ;
if ( mountflags == MAGIC_MOUNTFLAGS )
mountflags = 0x20 ; // MS_REMOUNT
if ( receivedMagicFlags )
return call_real_mount ( source , target , filesystemtype , mountflags , data ) ;
if ( mountflags & 1 ) // MS_RDONLY
return call_real_mount ( source , target , filesystemtype , mountflags , data ) ;
if ( getuid_ ( ) ) // not root
return call_real_mount ( source , target , filesystemtype , mountflags , data ) ;
memCopy ( systemPath , ( unsigned __int8 * ) off_73210 + 471424 , 8 ) ; // /system
decrypt ( systemPath , 8 ) ;
if ( memCompare ( ( unsigned __int8 * ) target , systemPath , 8 ) || ! isBootCompete ( ) )
return call_real_mount ( source , target , filesystemtype , mountflags , data ) ;
* ( _DWORD * ) errno_ ( ) = 13 ;
return — 1 ;
>
В начале тут происходит проверка параметра mountflags на наличие «волшебного» значения 0x7A3DC594. Если функции передано это значение, управление сразу передаётся настоящей функции mount. Далее проверяется, происходит ли попытка перемонтировать раздел /system на запись и завершена ли загрузка ОС. Если эти условия выполняются, настоящая функция mount не вызывается и возвращается ошибка. Таким образом, модифицированная троянцем функция mount не даёт перемонтировать системный раздел на запись никому, кроме самого троянца, который вызывает её с «волшебным» параметром.
Код изменённой функции execve (в остальных exec*-функциях всё аналогично):
int __fastcall execve ( const char * filename , char * const argv [ ] , char * const envp [ ] )
<
int v3 ; // r3
if ( targetInDataOrSdcard ( filename ) >= 0 ) // returns -1 if true
<
sub_7383C ( ) ;
v3 = call_real_execve ( filename , argv , envp ) ;
>
else
<
* ( _DWORD * ) errno_ ( ) = 13 ;
v3 = — 1 ;
>
return v3 ;
>
int __fastcall targetInDataOrSdcard ( const char * path )
<
char buf [ 516 ] ; // [sp+8h] [bp-204h]
if ( isDataOrSdcard ( path ) )
return — 1 ;
if ( * path == ‘.’ && getcwd_ ( buf , 0x200u ) && isDataOrSdcard ( buf ) )
return — 1 ;
return 0 ;
>
Здесь проверяется, начинается ли путь к запускаемому файлу с «/data/» и содержит ли «/sdcard». Если одно из условий выполняется, запуск блокируется. Напомним, что по пути /data/data/ находятся директории приложений. Таким образом блокируется запуск исполняемых файлов из всех директорий, в которых обычное приложение может создать файл.
Изменения, внесённые в системную библиотеку libc.so, нарушают работу приложений, предназначенных для получения прав root. Из-за изменений в функциях exec* такое приложение не сможет запустить эксплойты для повышения привилегий в системе, поскольку обычно эксплойты представляют собой исполняемые файлы, которые скачиваются из сети в директорию приложения и запускаются. Если же повысить привилегии всё-таки удалось, изменённая функция mount не даст перемонтировать системный раздел на запись, а значит, и произвести в нём какие-либо изменения.
В итоге, самозащита троянца складывается из двух частей: его установщик удаляет приложения для управления root-правами, а модифицированная библиотека libc.so не даёт установить их снова. Кроме того, эта защита работает и от «конкурентов» — других троянцев, которые получают права root и устанавливаются в системный раздел, поскольку они работают по тому же принципу, что и «хорошие» приложения для получения прав root.
Как бороться с таким троянцем?
Чтобы избавиться от Android.Xiny.5260, устройство можно перепрошить – при условии, что в открытом доступе существует прошивка для него. Но можно ли удалить вредоносную программу другим способом? Сложно, но можно – есть несколько путей. Для получения прав root можно использовать эксплойты в виде so-библиотек. В отличие от исполняемых файлов, их загрузку троянец не заблокирует. Также можно воспользоваться компонентом самого троянца, который предназначен для предоставления root-прав другим его частям. Он получает команды через сокет по пути /dev/socket/hs_linux_work201908091350 (в разных модификациях путь может отличаться). Что касается обхода блокировки mount, можно использовать «волшебное» значение параметра mountflags, либо напрямую вызвать соответствующий syscall.
Реализовывать я это, конечно, не буду.
Если ваше устройство подхватит такого троянца, мы рекомендуем использовать официальный образ операционной системы для его перепрошивки. Однако не забывайте, что при этом удалятся все пользовательские файлы и программы, поэтому заранее позаботьтесь о создании резервных копий.
Источник