Что такое загрузчик в Android и как его разблокировать – Huawei Devices

fefdf Новости
Содержание
  1. Что дает разблокировка
  2. Что такое bootloader и зачем разблокировать загрузчик на xiaomi
  3. «смешанный код»
  4. 1 способ: через меню в телефоне
  5. Bios прерывания и очистка экрана
  6. Bootloader: как разблокировать и зачем это нужно
  7. Cdisplay — реализация
  8. Cstring реализация
  9. Startpoint.asm — реализация
  10. Usb host
  11. Архитектура программы
  12. Блокировка загрузчика xiaomi с помощью adb-файлов
  13. Возможные ошибки
  14. Для linux
  15. Для сломаны, поврежденные или полностью застряли устройства android
  16. Как заблокировать загрузчик xiaomi: популярные причины блокировки bootloader
  17. Как увеличить шанс на одобрение разблокировки
  18. Какой компилятор вам нужен
  19. Память
  20. Перезагружаемся в download mode
  21. Подготовка файла прошивки
  22. Порядок действий
  23. Работа с disk explorer для ntfs
  24. Создание виртуальной машины
  25. Способ 2 – через компьютер
  26. Цифровая подпись aboot и boot разделов
  27. Часть 1 – действия на телефоне
  28. Часть 2 – действия на пк
  29. Этап 3: установка кастомной прошивки
  30. Узнайте больше о Huawei

Что дает разблокировка

Разблокировка бутлоадера открывает файловую систему и дает возможность изменять ее извне. Это используют для:

  1. Смены прошивки китайского телефона. Иногда с aliexpress продают телефоны, предназначенные для внутреннего рынка. У них китайская прошивка и меньше цена. Чтобы такой телефон “превратить” в нормальный с русским языком нужен доступ к файловой системе;
  2. Установка кастомных (самодельных) прошивок от сторонних разработчиков. Из этих версий убирают лишний мусор, оптимизируют быстродействие, добавляют новые возможности и интерфейс. Из минусов стоит отметить низкую безопасность и возможную нестабильность;
  3. Установка модифицированного загрузчика. С его помощью можно легко делать резервную копию, получить рут доступ (root права), устанавливать стороннее программное обеспечение и полностью удалять встроенное.

Что такое bootloader и зачем разблокировать загрузчик на xiaomi

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

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

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

Если необходимая прошивка создана сторонним разработчиком или заточена под другую версию смартфона, то без разблокировки загрузчика поставить такую прошивку не получится. А ведь установка модифицированной (кастомной) прошивки зачастую открывает доступ к целому ряду ранее скрытых дополнительных опций, благодаря которым можно оптимизировать функционал, повысить производительность и даже увеличить автономность работы смартфона.

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

В некоторых случаях стремление разблокировать загрузчик Xiaomi объясняется банальной необходимостью, ведь некоторые компании продают китайские версии телефонов под видом европейских аналогов (читайте об отличиях глобальной и китайской версий Xiaomi).

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

«смешанный код»

Компилятор C поддерживает встроенный Ассемблер, то есть при написании кода на языке высокого уровня вы можете также использовать язык низкого уровня. Инструкции ассемблера, которые используются на высоком уровне, также называют asm вставками. Они состоят из ключевого слова “__asm” и блока ассемблерных инструкций:

__asm ;  ключевое слово, которое показывает начало ASM вставки
{ ;  начало блока
    … ; какой нибудь ассемблеровский код
} ;  конец блока

Чтобы продемонстрировать пример смешанного кода мы будем использовать ранее упомянутый код на ассемблере, который выполняет очистку экрана и объединим его с кодом написанный на C .

void ClearScreen()
{
    __asm

    {
        mov al, 02h; настройка графического режима 80x25 (текст)
        mov ah, 00h; код функции изменения видео режима
        int 10h; вызов прерывания
    }
}

1 способ: через меню в телефоне

Самый простой способ, встроенный в ваше устройство и не требующий дополнительных программ.

  1. Открываем стандартные «Настройки» смартфона;
  2. Переходим в пункт «О телефоне»;
  3. Теперь 5 раз нажимаем по строке «Версия MIUI», появится надпись «Вы успешно стали разработчиком«.
  4. Возвращаемся в основное меню и находим пункт «Расширенные настройки», нажимаем на него.
  5. Ищем пункт «Для разработчиков», переходим в него.
  6. Теперь нужно найти строку «Статус Mi Unlock«. При первом входе нужно дать разрешение и согласится с предупреждением.
  7. Если загрузчик заблокирован в самом верху будет соответствующая надпись «Загрузчик заблокирован, устройство защищено«. Если загрузчик разблокирован — на весь экран будет надпись «Загрузчик разблокирован«.

Bios прерывания и очистка экрана

Чтобы вывести сообщение на экране, мы должны очистить его для начала. Мы будем использовать специальные BIOS прерывания для этой цели.

BIOS предлагает ряд прерываний для работы с железом, таким как видеокарта, клавиатура, системный диск. Каждое прерывание имеет следующую структуру:

int [number_of_interrupt];

Где «number_of_interrupt» является числом прерывания.

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


mov al, 02h; настройка графического режима 80x25 (текст) 
mov ah, 00h; код функции изменения видео режима
int 10h; вызов прерывания

Мы будем рассматривать только те прерывания и функции, которые будут использоваться в нашем приложении. Нам понадобится:

int 10h, function 00h – выполняет меняет видео режим и очищает экран; 
int 10h, function 01h – устанавливает тип курсора; 
int 10h, function 13h – показывает строку на экране;

Bootloader: как разблокировать и зачем это нужно

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

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

Любой производитель мобильной техники предусматривает работу с таким компонентом, как Bootloader. Как разблокировать его? Обычно это делается при помощи специальных утилит, устанавливаемых на ПК при соединении с мобильным девайсом через USB-интерфейс. Заметьте, права суперпользователя в данном случае не требуются.

Для большинства устройств, включая, например, гаджеты Sony и HTC, подразумевается использование утилиты Adb Run, причем для Sony придется дополнительно использовать специальные драйверы Sony Fastboot, да еще и обратиться к специальному разделу Unlocker на официальном сайте. Как видим, процедура хоть и выполнимая, но достаточно сложная.

Cdisplay — реализация

  // CDisplay.h

#ifndef __CDISPLAY__
#define __CDISPLAY__

//
// colors for TextOut func
//

#define BLACK			0x0
#define BLUE			0x1
#define GREEN			0x2
#define CYAN			0x3
#define RED			0x4
#define MAGENTA		0x5
#define BROWN			0x6
#define GREY			0x7
#define DARK_GREY		0x8
#define LIGHT_BLUE		0x9
#define LIGHT_GREEN		0xA
#define LIGHT_CYAN		0xB
#define LIGHT_RED	                0xC
#define LIGHT_MAGENTA   	0xD
#define LIGHT_BROWN		0xE
#define WHITE			0xF

#include "Types.h"
#include "CString.h"

class CDisplay
{
    public:
    static void ClearScreen();

    static void TextOut(
        const char far* inStrSource,
        byte            inX = 0,
        byte            inY = 0,
        byte            inBackgroundColor   = BLACK,
        byte            inTextColor         = WHITE,
        bool            inUpdateCursor      = false
    );

    static void ShowCursor(
        bool inMode
    );
};

#endif // __CDISPLAY__

// CDisplay.cpp

#include "CDisplay.h"

void CDisplay::TextOut( 
        const char far* inStrSource, 
        byte            inX, 
        byte            inY,  
        byte            inBackgroundColor, 
        byte            inTextColor,
        bool            inUpdateCursor
        )
{
    byte textAttribute = ((inTextColor) | (inBackgroundColor << 4));
    byte lengthOfString = CString::Strlen(inStrSource);

    __asm

    {		
        push    bp
        mov     al, inUpdateCursor
        xor	     bh, bh	
        mov     bl, textAttribute
        xor	     cx, cx
        mov     cl, lengthOfString
        mov     dh, inY
        mov     dl, inX  
        mov     es, word ptr[inStrSource   2]
        mov     bp, word ptr[inStrSource]
        mov     ah, 13h
        int	     10h
        pop	     bp
    }
}
void CDisplay::ClearScreen()
{
    __asm

    {
        mov  al, 02h
        mov  ah, 00h
        int     10h
    } 
}

void CDisplay::ShowCursor(
        bool inMode
        )
                                 
{
    byte flag = inMode ? 0 : 0x32;

    __asm
    {
        mov     ch, flag
        mov     cl, 0Ah
        mov     ah, 01h
        int     10h
    }
}

Cstring реализация

CString класс предназначен для работы со строками. Он включает в себя метод Strlen(), который получает в качестве параметра указатель на строку и возвращает количество символов в этой строке.

CDisplay класс предназначен для работы с экраном. Он включает в себя несколько методов:

  1. TextOut() — выводит строку на экране.
  2. ShowCursor() — управляет курсором представления на экране: показать, скрыть.
  3. ClearScreen() — изменяет видео режим и таким образом очищает экран.
// CString.h 

#ifndef __CSTRING__
#define __CSTRING__

#include "Types.h"

class CString 
{
    public:
    static byte Strlen(const char far* inStrSource);
};

#endif // __CSTRING__

// CString.cpp

#include "CString.h"

byte CString::Strlen(const char far* inStrSource)
{
    byte lenghtOfString = 0;
        
    while(*inStrSource   != '')
    {
          lenghtOfString;
    }

    return lenghtOfString;
}

Startpoint.asm — реализация

;------------------------------------------------------------
.286							   ; CPU type
;------------------------------------------------------------
.model TINY						   ; memory of model
;---------------------- EXTERNS -----------------------------
extrn				_BootMain:near	   ; prototype of C func
;------------------------------------------------------------
;------------------------------------------------------------   
.code   
org				07c00h		   ; for BootSector
main:
				jmp short start	   ; go to main
				nop
						
;----------------------- CODE SEGMENT -----------------------
start:	
        cli
        mov ax,cs               ; Setup segment registers
        mov ds,ax               ; Make DS correct
        mov es,ax               ; Make ES correct
        mov ss,ax               ; Make SS correct        
        mov bp,7c00h
        mov sp,7c00h            ; Setup a stack
        sti
                                ; start the program 
        call           _BootMain
        ret
        
        END main                ; End of program

Usb host

Добавляем

USB Host service

в режиме

mass storageКак разблокировать загрузчик Bootloader и установить кастомный Recovery на Андроид инструкция

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

Для работы стека USB хоста прописываем в свойствах проекта два определения:

USB_MASS_STORAGE_ENABLE=true
ACCESS_MEM_TO_RAM_ENABLED=true

Для этого щелкаем правой кнопкой мыши по проекту, выбираем

Properties -> Toolchain -> ARM/GNU C Compiler -> Symbols

Комментируем строку

“#define Lun_usb_unload — NULL”USB LUNs Definitions

в файле

conf_access.h

для предотвращения ошибок при компиляции.

Для отслеживания подключенных устройств на шине USB вводится обработчик прерывания (callback) по событию

Start of Frame

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

Обработчик прерывания прописываем в файле

conf_usb_host.h

Для этого добавляем прототип функции

main_usb_sof_event()

в начале файла

conf_usb_host.h

после всех #include’ов.

void main_usb_sof_event(void);

Так же добавляем в этот файл строку:

# define UHC_SOF_EVENT() main_usb_sof_event()

Теперь требуется глобально определить переменную-счетчик в файле

main.c

, именно ее будем увеличивать при каждом вызове соответствующего обработчика:

volatile static uint16_t main_usb_sof_counter = 0;

Добавляем собственно обработчик прерывания (callback):

void main_usb_sof_event(void)
{
   main_usb_sof_counter  ;
}

Архитектура программы

Мы разрабатываем загрузчик для себя. Его задачами являются только следующие:

  1. Правильная загрузка в память по адресу 0000:7 C00.
  2. Вызов BootMain функции, которую мы написали в языке высокого уровня.
  3. Вывести на дисплей фразу — ”Hello, world…”, from low-level.

Архитектура программы.

Первый объект это StartPoint, который написан исключительно в ассемблере, поскольку в языках высокого уровня нет необходимых нам инструкции. Это говорит компилятору, какой тип памяти должен использоваться, и адрес команды в RAM, которая должна выполняться после его чтения. Он также исправляет регистры процессора и передает управление функции BootMain, которая написано на языке высокого уровня.

Следующий объект- BootMain — является аналогом main, что, в свою очередь является основной функцией в которой сконцентрированы все функции программы.

Классы CDisplay и CString заботиться о функциональной части программы и выводит сообщение на экран. Как вы можете видеть на предыдущей картинки, класс CDisplay использует класс CString в своей работе.

Блокировка загрузчика xiaomi с помощью adb-файлов

Примерно в 50% случаев этот метод позволяет заблокировать загрузчик Xiaomi без удаления с телефона важной информации. Однако нельзя считать, что способ гарантирует сохранность данных. Следовательно, бэкап является обязательным мероприятием. Если, конечно, в памяти телефона присутствует что-то важное.

Важно: Данные на телефонах при выполнении представленной инструкции сохраняются далеко не всегда. Не ленитесь делать копии файлов. Более того, блокировка загрузчика возможна лишь на официальной прошивке Xiaomi (для Fastboot). При попытках установки локализованных или кастомных версий прошивок телефон может перейти в режим циклической перезагрузки. А поскольку избавиться от этой проблемы практически невозможно, то и рисковать не стоит.

Непосредственно блокировка загрузчика Xiaomi с помощью ADB-файлов производится в несколько этапов:

  • копируем на компьютер ADB-файлы (размещать их нужно в корневом каталоге диска С);
  • проверяем наличие на ПК всех необходимых драйверов;
  • переводим смартфон в режим Fastboot уже знакомым способом;
  • подключаем телефон по USB и ждем его распознавания компьютером;
  • переходим в директорию, в которой размещены файлы ADB и Fastboot;
  • открываем командную строку;
  • прописываем fastboot devices;
  • повторно проверяем статус загрузчика (fastboot oem device-info);
  • продолжаем работу только в случае, если система показывает значение true;
  • добавляем команду fastboot oem lock;
  • ждем подтверждения верности действий в виде появления символов OK;
  • повторно проверяем статус Bootloader (командой fastboot oem device-info);
  • убеждаемся в успешности разблокировки (система должна показывать значение false);
  • выполняем перезагрузку смартфона введением fastboot reboot.

Если что-то не получается внимательно читайте инструкцию заново и повторно, а главное, последовательно выполняйте шаги – до достижения требуемого результата. Если вариант кажется чересчур сложным (а для новичков он таким и является), то сохраните данные с телефона и пробуйте заблокировать загрузчик первым способом (с помощью программы Mi Flash).

Видео с демонстрацией последнего способа блокировки загрузчика представлена на видео.

Важно: Выполнение блокировки может превратить ваш телефон в «кирпич»! Не блокируйте загрузчик без крайне необходимости!

Возможные ошибки

Во время разблокировка загрузчика Сяоми могут возникать различные ошибки. Ниже приведены типичные ошибки и их решения:

  • Current account is not bound to this device сообщает, что этот аккаунт не привязан к устройству. Нужно сначала привязать телефон к аккаунту, а затем повторить процедуру разблокировки.
  • Your device isn’t supported by Mi Unlock говорит, что телефон не поддерживается конкретной версией Mi Flash Unlock. Вероятно, у вас стоит китайская прошивка или кастомная версия. Нужно прошиться на Global Stable и затем повторить процедуру.
  • Unknownerror 90000 возникает в случае, если на ПК уже было разблокировано 5 устройств. Провести такую же процедуру с 6 программа не даст. Нужно сменить ПК или операционную систему.
  • Ошибка 501 — нужно переустановить драйверы ADB. Именно они вызывают ошибку с таким кодом. После переустановки перезагрузите ПК и начните заново.
  • NetworkError — ошибка сети. Попробуйте включить/выключить VPN и повторить процедуру. Если это не помогло, то проблема на серверах Xiaomi. Нужно просто подождать.
  • Mi Unlock not connected to the phone — для решения этой ошибки нужно переместить программу Mi Flash Unlock в корень диска. И проследите, чтобы в пути к файлу EXE не было никаких кириллических символов.
  • Unlock failed return to fastboot говорит, что разблокировка не удалась. Переустановите драйверы, включите/выключите VPN и повторите процедуру. Если ничего не помогает, попробуйте заменить кабель USB.

Разблокированный загрузчик даёт пользователям свободу действий. Но в то же время он негативно влияет на безопасность и не позволяет получать необходимые обновления. Так что без острой необходимости разблокировать Bootloader не нужно.

Для linux

Подходит для Linux-подобных ОС (ubuntu/debian).

  1. Скачиваем драйвера из верхнего пункта;
  2. Включаем на смартфоне fastboot (кнопка включения и уменьшения громкости);
  3. Подключаем телефон к ПК через usb кабель;
  4. В терминале пишем команду:

adb – sudo apt-get install android-tools-adb android-tools-fastboot

  1. В отчете стоит смотрим на две строки:

sudo fastboot devices – номер вашего устройства

sudo fastboot oem device-info – статус загрузчика

Если видите сообщение «< waiting for device >», значит, команда выполнена не от администратора или с устройством нет связи по какой-то причине.

Для сломаны, поврежденные или полностью застряли устройства android

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

fone — Восстановление (Android) может быть исключительно удобно. dr.fone — Восстановление (Android) это специально разработанный инструмент для восстановления данных из сломано, поврежденные или замороженные Android устройств. Вот некоторые из особенностей этого удобного программного обеспечения.

  • Это первое когда-либо программное обеспечение для извлечения данных из сломанного Android устройств
  • dr.fone — Восстановление (Android) Можно восстановить удаленные фотографии из внутренней памяти Android ,
    восстановить данные из разбитого Android
    И восстанавливать данные с поврежденных, сломанные или неисправные устройства
  • Он имеет лучшую скорость поиска данных в отрасли
  • Восстановление различных файлов, включая журналы вызовов, Сообщения, контакты, фото, видео, документы, и т.д.
  • Он работает с устройствами Samsung Galaxy, а также.

Заметка: Если вы не можете получить свой Android устройства обратно к нормальной работе, Вы не должны чувствовать себя беспомощными. В таком случае, Вы можете использовать dr.fone — Восстановление (Android) чтобы получить все ваши данные.

Как заблокировать загрузчик xiaomi: популярные причины блокировки bootloader

Целесообразность блокировки загрузчика Сяоми обоснована несколькими причинами:

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

Если эти моменты для вас существенны, то лучше заблокировать загрузчик Xiaomi. Тем более сделать это можно буквально за полчаса, и далее мы расскажем, как именно нужно производить блокировку.

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

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

Как увеличить шанс на одобрение разблокировки

При рассмотрении вашей заявки, касательно разблокировки, компания Xiaomi проверит всю информацию о вашем аккаунте. Многим аккаунтам вовсе не дают право на открытый Bootloader, а остальные ждут ответ по месяцу.

Чтобы ускорить процесс, нужно зарегистрироваться на официальном форуме компании xiaomi и участвовать в нём. Придумываем имя пользователя, пароль, и общаемся с людьми, как на любом форуме. В информации о вашем аккаунте обязательно будет присутствовать информация, что вы являетесь активным участником форума. Сотрудники любят таких пользователей, поэтому дают им право на разблокировку загрузчика.

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

Какой компилятор вам нужен

Чтобы использовать технологию смешанного кода, нужно по крайней мере два компилятора: для ассемблера и для C/C , а также компоновщик который объединит объектные файлы(.obj) в один исполняемый файл.

Теперь, давайте поговорим о некоторых особых моментов. Есть два режима функционирования процессора: реальный и защищенный режим. Реальный режим является 16-битным и имеет некоторые ограничения. Защищенный режим является 32-битным и полностью используется операционной системой.

Когда компьютер только начинает работу, процессор работает в 16-битном режиме. Таким образом, чтобы написать программу и получить исполняемый файл, вам понадобится компилятор и компоновщик для ассемблера для 16-битного режима. Для C/C вам потребуется только компилятор, который умеет создавать объектные файлы для 16-битного режима.

Современные компиляторы сделаны для 32-разрядных приложений, поэтому мы не сможем их использовать.

Я пробовал несколько бесплатных и коммерческих компиляторов для 16-битного режима и выбрал продукт от Microsoft. Компилятор вместе с компоновщиком для ассемблера, C и C включены в Microsoft Visual Studio 1.52, его можно скадать с официального сайта компании. Некоторые подробности о компиляторов которые нам нужны приведены ниже.

ML 6,15 — компилятор ассемблера от Microsoft для 16-битного режима.LINK 5,16 — компоновщик, который умеет создавать COM-файлы для 16-битного режима. CL — С, С компилятор для 16-битного режима.

Вы также можете использовать несколько альтернативных вариантов.

DMC — бесплатный компилятор для компиляции ассемблера, C, C для 16 и 32-битном режиме Digital Mars.LINK — бесплатный компоновщик для компилятора DMC.

Есть также некоторые продукты от Borland.

BCC 3,5 — С, С компилятор, который умеет создавать файлы для 16-битного режима.TASM — компилятор асемблера для 16-битного режима.TLINK — компоновщик, который может создавать файлы COM для 16-битного режима.

Все примеры кода в этой статьи, были разработаны с инструментами от Microsoft.

Память

Адресное пространство в памяти микроконтроллеров серии SAMD20/21 устроено просто:

Энергонезависимая память организована рядами, каждый ряд содержит 4 страницы. Размер 1 страницы 64 байта. Энергонезависимая память стирается рядами, а записывается постранично. Это важно помнить.

Нижние (младшие) ряды в основном адресном пространстве энергонезависимой памяти могут быть использованы для бутлоадера (настраивается с помощью фьюзов BOOTPROT), а верхние ряды для эмуляции EEPROM.

Bootloader-секция защищена соответствующими этому адресному пространству lock-битами и фьюзами BOOTPROT.

Фьюзы BOOTPROT одновременно определяют размер bootloader-секции и защищают выделенную область памяти от чтения.

EEPROM может быть записана несмотря на защиту соответствующей ей области памяти.

Перезагружаемся в download mode

Та же операция работает и с , о котором я писал выше. После загрузки модуля телефон перезагружается в спец режим, который работает как usb mass storage device. Т.е. я имею доступ ко всем разделам телефона без защиты от чтения! Попробовал записать свой recovery.

Пришлось ограничить скорость записи, иначе телефон отваливается и запись прекращается. Возможно это результат переполнения кэша mass storage загрузчика. Пришлось написать хак:

Загрузил телефон, выполнил и ничего. Только вибрация с последующей обычной загрузкой. Помните про раздел , не стоит проверять recovery через запись в этот раздел.

При помощи этого же способа я примонтировал раздел к компьютеру и вручную записал на него supersu. Первоначальная задача выполнена: перманентный root доступ получен. Осталось автоматизировать загрузку подставного WiFi модуля, который отключает hooks.

Для начала можно изучить какие средства применялись для разблокировки других телефонов. При беглом поиске я обнаружил лишь следующие два, к тому же устаревшие:

Подготовка файла прошивки

(как и в других контроллерах серии SAMD20/21) каждый ряд NVM состоит из 4 страниц, каждая из которых по 64 байта. Таким образом 200 рядов (которые мы выделяем под bootloader) это (200 * 4 * 64) байт = 51200 (0xC800) байт памяти. И application часть должна начинаться после 51200 байт flash памяти.

Разбиение flash памяти:

Секция bootloader:

Секция application:

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

Сам файл можно найти в solution explorer. В нашем случае он называется

samd21j18a_flash.ld

Путь: src-asf-sam0-utils-linker scripts-samd21-gcc

В него необходимо внести изменения определений областей памяти:

Конфигурация по умолчанию:

rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000

должна быть заменена на

rom (rx) : ORIGIN = 0x0000C800,LENGTH = 0x00033800

Теперь скомпиленный бинарник можно заливать через бутлоадер.

Порядок действий

ВАЖНО. Следует понимать, что рассматриваемые действия при неудачном исполнении могут привести к тому, что ваш гаджет превратиться в «кирпич» и попросту откажется включаться. . Кроме того, приведённый порядок действий гарантированно приведёт к удалению всего содержимого на смартфоне/планшете, поэтому первое, о чём необходимо позаботиться, – это обеспечить сохранность всей важной для вас информации, после чего можно приступать непосредственно к основным манипуляциям, которые выглядят следующим образом:

Кроме того, приведённый порядок действий гарантированно приведёт к удалению всего содержимого на смартфоне/планшете, поэтому первое, о чём необходимо позаботиться, – это обеспечить сохранность всей важной для вас информации, после чего можно приступать непосредственно к основным манипуляциям, которые выглядят следующим образом:

Шаг 1 – Android SDK и USB драйверы:

Шаг 2 – Отладка:

  • В упомянутой выше папке «Platform-tools» и с зажатой клавишей «SHIFT» кликните правой кнопкой по пустому участку экрана и выберите пункт «Открыть окно команд»;
  • Выполните команду «adb devices» и в ответ на это перед вами будет выведен серийный номер Android-устройства;
  • На смартфоне/планшете откройте «Настройки» и перейдите в раздел «О телефоне»;
  • Найдите строку «Номер сборки» и тапайте по ней, пока не появится сообщение и присвоении полномочий разработчика;
  • Вернитесь в основной раздел настроек и откройте новый пункт меню с красноречивым названием «Для разработчиков» и если там имеется строка «Разблокировка OEM» (что далеко не всегда) нажмите на неё;
  • Активируйте пункт «Отладка по USB» и по необходимости введите пароль;
  • Подключите смартфон/планшет к компьютеру и в ответ на сообщение «Разрешить отладку по USB?» выберите «Всегда разрешать на данном ПК».

Шаг 3 – Ключ разблокировки:

Дальнейший порядок действий будет зависеть от того, устройство какого производителя имеется в наличии. Общий порядок получения ключа разблокировки примерно одинаков – это наличие необходимости посетить тематическую страницу производителя, которая посвящена рассматриваемой теме и проделать весь спектр манипуляций, предусмотренный инструкциями.

Данный процесс в деталях описывать бессмысленно, так как он носит индивидуальный характер, и единственное, что здесь следует отметить, – это то, что после получения от производителя ключа разблокировки в виде файла с расширением «.bin» поместите его в папку «Platform-tools».

Шаг 4 – Работа с «Bootloader»:

  • Выключите планшет или смартфон;
  • Зажмите кнопку питания и понижения громкости для загрузки в режиме «Fastboot». Это срабатывает не для всех моделей мобильных гаджетов, поэтому при необходимости уточните индивидуальный для вас порядок действий;
  • С помощью USB-кабеля подключите девайс к компьютеру;
  • По аналогии с вышеприведёнными пунктами в Шаге 2 откройте пункт «Открыть окно команд»;
  • Введите предусмотренные для вашей модели команды, например:
  • В ответ на выполненную команду на смартфоне/планшете может появиться требование о подтверждении разблокировки, где необходимо выбрать «Да»;
  • Дождитесь завершения работы, с учётом того, что процесс может занять достаточно длительное время, это касается и первого запуска ОС после проведённых действий;
  • Наберитесь терпения и самовольно не прерывайте загрузку операционной системе и штатное включение устройства.

Работа с disk explorer для ntfs

После запуска программы мы идем в наш диск (File-> Drive). В появившемся окне идем в раздел логические диски и выбираем наш созданный диск(в моем случае это Z).

Теперь мы выбираем меню пункт View как Hex команды. В это появившемся окне мы можем видеть информацию диска в 16-разрядном представлении, разделенная на сектора. Сейчас у нас только 0-ли, так как диск пуст, пока что.

Сейчас мы должны записать наш загрузчик в первый сектор. Мы устанавливаем маркер в положение 00, как это показано на предыдущей картинке. Чтобы скопировать загрузчик мы используем пункт меню Edit->Paste from file command. В открывшемся окне укажите путь к файлу и кликните Open.

Вы также должны записать подпись 55AAh по позиции 1FE от начала сектора. Если вы не сделаете это, BIOS проверит последние два байта, и не найдя указанную подписи, будет считать что этот сектор не является загрузочным и не загрузит его в память.

Для переключения в режим редактирования нажмите клавишу F2 и напишите необходимые номера — 55AAh подписи. Чтобы выйти из режима редактирования нажмите ESC.

Теперь нам нужно подтвердить записанные данные.

Чтобы применить записанное мы идем в Tools-> Options, теперь мы идем в пункт Mode и выбираем метод записывания — Virtual Write и нажмите кнопку Write.

Большую часть рутинных действий закончили, наконец, и теперь вы можете видеть, что мы разработали с самого начала этой статьи. Давайте вернемся к VwWare чтобы отключить виртуальный диск (File->Map or Disconnect Virtual Disks … and click Disconnect).

Давайте запустим виртуальную машину. Мы видим теперь, как из глубины царства машинных кодов появляются знакомые строки — «Hello World… », from low-level…”.

Создание виртуальной машины

Нам понадобится VmWare версия программы 5.0, 6.0 или выше. Чтобы проверить загрузчик мы создадим новую виртуальную машину с минимальным размером диска, например, 1 Gb. Отформатируйте его в файловую систему NTFS. Теперь нам нужно отобразить отформатированный жесткий диск на VmWare в качестве виртуального диска. Для этого выберите:

File->Map or Disconnect Virtual Disks…

После этого появится окно. Там вы должны нажать кнопку «Map». В следующем появившемся окне вы должны указать путь к диску. Теперь Вы также можете выбрать букву диска.

Не забудьте снять флажок «Open file in read-only mode (recommended)». После того как выполнили все выше описанные индикации диск должен быть доступен в режиме только для чтения чтобы избежать повреждения данных.

После этого мы можем работать с диском виртуальной машины, как с обычными логическим диском в ОС Windows. Теперь мы должны использовать Disk Explorer для NTFS 3,66 чтобы записать загрузочную запись с позиции 0.

Способ 2 – через компьютер

Существует способы проверки как для Windows, так и для других систем. Рассмотрим их подробнее.

  1. Скачиваем драйвера adb на компьютер ( – 20мб) и устанавливаем, чтобы они находились прямо в корне системного диска «C» («C:/adb/»);
  1. Выключаем смартфон и переводим его в режим fastboot (нажимаем одновременно кнопку включения и нижнюю клавишу громкости). На экране должен отобразиться заяц и зеленый робот;
  1. Подключаем телефон к компьютеру через usb кабель (если у вас пк, подключайте к портам usb 2.0 сзади);
  2. На ПК зажимаем клавиши «Win» «R», откроется поле ввода;
  3. Вводим «cmd» и жмем «Enter» для открытия командной строки;
  4. В командной строке пишем следующую команду и нажимаем «Enter»;

cd c:/adb

  1. Повторяем действия для другой команды;

fastboot oem device-info

  1. Изучаем выданную нам информацию.

Если загрузчик разблокированный, на дисплее появится надпись: «Device unlocked:true». В ином случае будет указано значение «false».

Цифровая подпись aboot и boot разделов

Я пытался выяснить каким публичным ключём подписаны boot образы. Распаковал ключи из aboot (), извлек подписи из образов и прошелся всеми публичными ключами по ним. Выяснил, что все образы подписаны одни ключём. С ходу не разобрался как вычислить смещение подписи у boot разделов, потому я просто перепаковываю образ и использую его размер как смещение.

В качестве эксперимента я попробовал записать boot раздел в раздел fota, зная, что при загрузке fota снимаются все ограничения. Здесь я сильно рисковал, т.к. мог получить bootloop, похожий на bootloop recovery. Метка загрузки в fota записывается в раздел fotamng и если раздел не загрузится, то я получу бесконечную перезагрузку.

К сожалению, boot раздел, записанный в fota не загрузился, а bootloop я, к счастью, не получил. Не понятно почему тогда boot раздел, записанный в recovery успешно загрузился. Толку от этого конечно нет, для recovery используется та же защита, что и для boot. Не знаю чем вызвано подобное поведение. Возможно различными смещениями ramdisk и tags:

boot/recovery:

fota:

В Secure boot whitepaper от Qualcomm говорится о том, что подписывается sha256 hash от sha256 hash’ей нескольких сегментов ELF загрузчика. Количество сегментов определено в Subject’е сертификата. Например OU=05 00002000 SW_SIZE говорит о том, что в подписи содержится sha256 hash от первых 256 hash’ей областей по 32 байта (0×2000/32=256). Сам по себе aboot не содержит ELF заголовка и описание больше подходит к sbl1 (secondary boot loader).

Есть описание работы little kernel от Qualcomm, но и там нет ничего про алгоритм создания подписи aboot. Задача определить алгоритм все еще актуальна.

Часть 1 – действия на телефоне

Для разблокировки у вас должен быть mi аккаунт. Если его нет – создаем, если есть – читаем дальше.

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

  1. Чтобы избежать возможных ошибок в процессе, выходим из аккаунта на устройстве;
  2. Отключаем wi-fi сеть и переходим на мобильный интернет. Используем сим-карту, с которой проводилась активация устройства (отправлялось смс) и на которую зарегистрирован сам аккаунт;
  3. Активируем режим разработчика, если его нет. Переходим в «Настройки» – «О телефоне» и быстро нажимаем по пункту «Версия Miui» 7 раз до появления сообщения с подтверждением;
  1. Переходим в «Настройки» – «Расширенные настройки» – «Для разработчиков» – «Статус Mi Unlock»;
  1. Выбираем «Связать аккаунт с устройством» («Добавьте учетную запись и устройство»);
  1. Возможно вас попросят войти в аккаунт, в таком случае подтверждаем вход, активируем синхронизацию;
  2. Происходит подготовка к привязке аккаунта, затем появляется уведомление об успешной привязке.

Начинается таймер отчета до разблокировки, который составляет обычно 168 часов (7 дней). Иногда таймера нет вообще и можно сразу производить разблокировку. Максимальный срок может составлять 720 и даже 1440 часов. Это зависит от модели телефона, даты создания ми аккаунта и давности привязки к устройству.

Посмотреть отчет мы сможем чуть позже. Переходим к следующему шагу.

Возможно, что кнопка привязки аккаунта станет снова активной, вас это не должно смущать, запрос уже отправлен.

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

Часть 2 – действия на пк

Нам понадобится “родной” кабель от телефона, подключенный к порту usb 2.0 сзади ПК (если ноутбук – без разницы).

Вводим телефон в fastboot режим:

  1. Полностью выключаем устройство;
  2. Зажимаем кнопку уменьшения громкости, и не отпуская ее, начинаем держать кнопку включения до появления зайца;
  1. Подключаем кабель к телефону (новые модели сами выходят из fastboot режима через 30 сек при отсутствии действий).

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

  1. Переходим на официальный сайт , нажимаем «Unlock Now»;
  1. Попадаем на страницу-инструкцию и нажимаем большую кнопку с надписью «Download Mi Unlock». Начинается загрузка zip архива;

В интернете можно встретить множество русифицированных программ на основе официальной. Мы же не рекомендуем их использовать по двум причинам:

  1. Злоумышленники могут подсадить вирус в программу
  2. Официальная английская версия постоянно обновляется, исправляются ошибки и добавляются поддержки новых устройств. Русские версии обновляются редко, в связи с чем могут возникнуть проблемы.

  1. По окончании загрузки распаковываем архив в корень диска «C» (в крайнем случае в написании адреса до архива не должно быть русских символов, кириллицы) и открываем появившуюся папку;
  2. Запускаем (двойной клик) файл «miflash_unlock.exe»;
  1. Появляется дисклеймер, выбираем «Agree» (Согласен);

Этап 3: установка кастомной прошивки

  1. Выключите телефон и зайдите в рекавери стандартным способом (зажатием кнопок питания и увеличения громкости).
  2. Перейдите в раздел «Очистка» и передвиньте ползунок вправо для её осуществления.
  3. Вернитесь в главное меню и выберите «Установка».
  4. Нажмите на кнопку «Выбор накопителя» в нижней части экрана.
  5. Отметьте пункт Micro SD Card и тапните ОК.
  6. Найдите скачанный файл в формате ZIP и нажмите на него.
  7. Передвиньте ползунок вправо для подтверждения действия.
  8. Нажмите на кнопку «Очистка Dalvik/cache».
  9. Установите таким же способом сервисы Google (если требуется).
  10. Тапните по кнопке «Перезагрузка в ОС».

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

Оцените статью
Huawei Devices
Добавить комментарий