Как достать файлы из прошивки
Сейчас всё больше смартфонов идут без слота для sd-card, и информацию приходится хранить на встроенной памяти с доступом к ней по MTP. Такой режим подключения не позволяет стандартными средствами восстановить данные телефона после wipe’а или случайного удаления.
Сегодня на примере связки Xiaomi Mi2s и Windows 8.1 я постараюсь рассказать, как можно восстановить утерянные данные, кому интересно, добро пожаловать под кат.
Следует заметить, что если вы по ошибке отформатировали внутреннюю память смартфона/планшета/смартпэда, то не стоит расстраиваться, а главное, ни в коем случае не нужно ничего записывать в память устройства, так у вас получится восстановить больше данных.
Протокол MTP не позволяет компьютеру распознать подключенный девайс как USB-накопитель и программы для восстановления не могут просканировать такое устройство и спасти данные, поэтому нам потребуется скопировать весь внутренний раздел памяти в виде образа системы.
Подготовка Android-устройства
Вам понадобится root и включенная отладка по USB.
Подготовка PC
Для того, чтобы скопировать раздел системы, нам понадобится:
VHDtool
Создаём папку с адресом C:\cygwin64\000 (имя не имеет значения, не стоит только использовать буквы отличные от латиницы), здесь будет лежать наш образ. Копируем в папку VHDtool.exe.
FileZilla
В ходе инсталяции соглашаемся на все стандартные установки.
После установки FileZilla запустится автоматом, но из программы необходимо выйти и запустить её от имени Администратора.
При запуске FileZilla спросит имя сервера, оставляем всё как есть.
Далее заходим Edit — Settings и делаем следующие настройки:
listen on those ports 40
timeout settings — по умолчанию стоит 120, 60, 60, а мы ставим везде 0 и нажимаем ОК.
Заходим в edit — users. В окошке users создаем нового юзера. В моем случае это юзер qwer.
Нажимаем Add — пишем имя — пароль pass — нажимаем ОК.
Далее в том же меню Users, слева выбираем закладку Shared folders. Заходим туда и добавляем папку в которую будет заливаться наш блок. Нажимаем Add и добавляем папку C:\cygwin64\000. В окошке появится путь к этой папке. Если слева от надписи C:\cygwin64\000 не будет буквы H, то нужно нажать Set as home dir. Затем выделив строчку C:\cygwin64\000 нужно отметить права Read и Write галочками. Затем нажать ОК.
- adb.exe
- AdbWinApi.dll
- adb-windows.exe
- AdbWinUsbApi.dll
- fastboot.exe
Копируем их в папку C:\cygwin64\bin
Проверка работы ADB
Запускаем консоль из папки C:\cygwin64\bin, для этого достаточно вписать cmd в адресную строку проводника
Список подключенных девайсов не должен быть пуст, если после строчки List of devices attached пусто, то вы не установили USB-драйвера или не включили отладку по USB.
Когда всё идет хорошо, консоль выглядит так:
20352f2c – мой Xiaomi Mi2s
Режим модема по USB
Нам понадобится подключить аппарат по USB к вашему ПК и включить режим модема по USB. Я использую CyanogenMod 11 и у меня этот режим находится по пути: Настройки > Беспроводные сети > Ещё… > Режим модема > USB-модем
Теперь нам необходимо узнать, какой IPv4 адрес получил ваш компьютер.
Используем команду ipconfig в командной строке
или
Идем по пути: Панель управления\Сеть и Интернет\Центр управления сетями и общим доступом
Кликаем по надписи ’Подключение по локальной сети’ далее Сведения и копируем адрес IPv4.
В моём случае это 192.168.42.79
Важно! При каждом переподключении USB кабеля и вкл/выкл режима модема IPv4 будет меняться.
Какой блок памяти нам нужен?
Вся память в вашем устройстве делится на логические блоки, нам не нужно качать все, достаточно понять, какой раздел содержит стёртую информацию.
Теперь нам необходимо посмотреть список блоков памяти, для этого вводим построчно следующие команды:
Hint: если вам лень вручную переписывать команды или вы боитесь допустить ошибку, то можно воспользоваться копированием, но вставить привычным способом строчку в консоль не выйдет, поэтому необходимо кликнуть правой кнопкой мыши по окну консоли, далее выбрать изменить > вставить.
После чего во внутренней памяти появится файл list_of_partitions.txt, который нам необходимо скопировать на ПК и изучить.
Скопировать его можно в нашу папку 000 с помощью простой команды (выполнять её следует в отдельном окне командной строки):
Внутренней памяти в моём аппарате 32 GB. Поэтому я ищу самый большой раздел, в моём случае это mmcblk0p27 размером 25,6 GB, у вас он скорее всего будет иметь другое имя, или вообще не будет иметь приписки p**. Безусловно, никто не гарантирует что именно самый большой раздел окажется тем самым на котором еще совсем недавно лежали ваши фото, видео, документы и тд., но в 90% случаев это оказывается именно тот раздел памяти который нам нужен. В противном случае вам придется по порядку копировать все образы и проверять каждый из них.
Копируем раздел памяти на ПК.
Если вы уже закрыли окно cmd, то запускаем его снова.
Вводим команды построчно:
Не забудьте внести соответствующие корректировки в код!
qwer – имя учетной записи в FileZilla (у вас свой если меняли)
pass – пароль от учетной записи в FileZilla (у вас свой если меняли)
40 – порт сервера FileZilla
192.168.42.79 – адрес сервера FileZilla (у вас свой)
mmcblk0p27.raw – копируемый блок памяти (у вас свой)
Открываем второе окно командной строки и вводим команды:
Смотрим в окно FileZilla и видим, что скачивание mmcblk0p27.raw в папку C:\cygwin64\000 началось, теперь можно закрыть окна cygwin и сделать перерыв на чай.
Конвертируем и восстанавливаем
Вернулись? Файл скачался? Отлично. Отключаем телефон, подключаем интернет. Запускаем Cygwin.bat и вводим следующие команды.
У меня конвертирование заняло пару секунд. На выходе у нас получается всё тот же файл mmcblk0p27.raw в папке C:\cygwin64\000, но уже немного другой. Этот сконвертированный файл можно смонтировать как виртуальный диск, или, например через R-studio, произвести восстановление данных непосредственно из нашего образа. Я так и поступил.
Hint: важные моменты пометил желтым.
Итоги
Моей целью было популярным языком объяснить способ копирования системного раздела с android-девайса на ПК, возможно, некоторые упрекнут меня в сложностях, связанных с USB-модемом и ftp, и скажут, что наверняка можно было проще вытащить образ. Отвечу так: я пробовал другими способами, описанными на 4pda и xda-developers, у меня не вышло, зато с ftp получилось со второй попытки, а входе написания статьи всё вообще прошло как по маслу.
У меня получилось восстановить все утерянные фото без потерь в качестве и даже то, что я и не думал восстановить. В ходе восстановления обнаружились фотографии, которые делал в августе прошлого года, когда только купил телефон и тестировал камеру.
В завершении хочется также упомянуть еще одну небольшую утилиту, которая восстанавливает данные — DiskDigger undelete. Она бесплатная, неплохой функционал, но к сожалению, после 40% она у меня вывалилась с ошибкой.
Смена операционной системы, установка утилит от непроверенных разработчиков, рутирование гаджета – процессы, которые могут привести к серьезным проблемам с работоспособностью устройства. Может произойти сбой, который приведет к «закирпичиванию» девайса или потере важных данных. По этой причине вопрос, как сделать бэкап прошивки Android, по-прежнему остается актуальным. В данном посте мы рассмотрим способы создания копий файловой системы и отдельных данных, потеря которых крайне нежелательна для пользователя.
Что такое прошивка Android-устройства, зачем нужно ее восстанавливать
Прошивка – это основное программное обеспечение многофункционального устройства. От актуальности версии прошивки напрямую зависит продуктивность, экономичность и практичность гаджета.
Работоспособность устройства опирается не только на версию ПО, но и на бережное отношение со стороны пользователя. О нормальном состоянии прошивки должен заботиться каждый юзер.
Далеко не всегда владельцы планшетов и смартфонов задумываются о состоянии прошивки, устанавливая на устройство большое количество программ, оставляющих после себя мусор в виде забитой файловой системы. Впоследствии этот мусор вызывает серьезные проблемы, сказывающиеся на работоспособности. Тогда пользователь задумывается насчет переустановки ОС или ее восстановления до нормальных рабочих параметров.
Понятие бэкапа прошивки
Backup в переводе с английского языка означает дублирование. Данный процесс по отношению к Android-девайсам подразумевает создание резервной копии информации, хранящейся в гаджете на отдельном носителе.
Основной целью создания бэкапа Android перед прошивкой является возможность восстановления данных при их повреждении или потере. Посредством правильно созданной копии можно полностью восстановить работоспособную систему, даже если вы успели прошить устройство с удалением личных настроек пользователя.
На сегодняшний день существует множество программ, позволяющих делать бэкап отдельных файлов, например, СМС, контактов, фотографий или приложений.
Зачем может понадобиться бэкап прошивки
Бэкап – это способ обезопасить себя. Сохранить старую прошивку Android нужно, чтобы уберечь данные от потери. Никто на сегодняшний день не застрахован от потери, поломки или закирпичивания устройства из-за вируса.
Периодическое создание копий позволяет восстановить утерянную информацию, тем самым значительно снижает ущерб от форс-мажорных обстоятельств, которые произошли с гаджетом.
При этом создание бэкапа является отличным стимулом к проведению различных экспериментов с девайсом. Полная копия данных в облаке или на внешнем устройстве при наличии дополнительного софта дает возможность восстановить рабочие показатели девайса из любого состояния.
Бэкап личных данных, контактов, фото посредством инструментов ОС Android
Прямо сейчас, наладив синхронизацию аккаунта Google, вы можете сохранить контакты, фотографии, записи календаря и прочую личную информацию на сервере, доступ к которому будет только у вас.
Впоследствии, если вы купили новый гаджет или провели перепрошивку девайса, вам достаточно войти в свой аккаунт. Как только вы это сделаете, все данные снова станут доступны на устройстве.
Полная копия прошивки на устройстве
В том случае, если инструментов Google для сохранения личных данных вам недостаточно, и вы бы хотели осуществить полное дублирование системы на отдельном носителе, следует рассмотреть сразу несколько вариаций процесса, выбрав наиболее подходящий.
Следует отметить, что резервная копия прошивки Android может заливаться как на память самого устройства, так и на SD-карту, компьютер и даже в облако. Все зависит от того, какому именно способу вы отдали свое предпочтение.
Также процедуры создания копий системы могут отличаться по затратам времени и сложности. Далее мы постараемся рассмотреть несколько актуальных вариантов создания полного бэкапа данных прошивки.
Нужны ли права суперпользователя для бэкапа
Права суперпользователя – это открытый доступ ко всей файловой системе. Посредством данных прав вы можете корректировать работу утилит, предустановленных на девайсе, и всецело следить за работой системы, осуществляя ее наладку в соответствии с теми или иными требованиями.
При этом для бэкапа получение рут-прав далеко не всегда является обязательным условием. Лишь некоторые программы требуют столь высокого доступа от пользователя. Большинство методов дублирования системы осуществляется с правами обычного юзера.
Бэкап через TWRP Recovery
Первым способом создания копии системы является бэкап посредством кастомного TWRP Recovery.
Стандартное рекавери не способно создать копии данных, тогда как TWRP отлично справляется с поставленной задачей.
Чтобы воспользоваться данным методом, вам необходимо перейти в меню рекавери на своем устройстве. Далее с помощью активных клавиш зайти в раздел BACKUP и отметить необходимые данные для создания копии.
Решив сделать backup прошивки Android через recovery, вы можете самостоятельно выбрать рациональный набор сохраняемой информации. Лучше отмечать все данные, а именно: Boot, System, Data, Cache, Recovery, Android_secure, Efs и Modem.
Создание копии посредством ClockworkMod и ROM Manager
Отличной альтернативой для создания бэкапа прошивки является установка ClockworkMod Recovery.
Данная утилита имеет полностью интуитивный интерфейс, без особого труда инсталлируется на широкий перечень устройств. Чтобы установить инструмент, достаточно скачать программу ROM Manager. Создание копии данных устройства предполагает два действия.
- Необходимо запустить инструмент ClockworkMod recovery через ROM Manager, выбрав пункт «Загрузить режим Recovery».
- Перейти в раздел «Backup and restore», выбрать пункт «Backup. Останется только подождать, пока утилита создаст копию системы.
Дублирование с помощью TitaniumBackup
Быстро создать копию личных данных поможет TitaniumBackup.
Хоть в программе и не предусмотрен русифицированный интерфейс, работать с ней достаточно удобно даже неопытному пользователю.
Для создания резервных копий вы можете отметить как любое отдельно взятое приложение, так и всю систему полностью. При этом необходимо учесть некоторые нюансы.
Программа дублирует данные на карту памяти или в собственную память девайса. Следовательно, вам необходимо обеспечить софт соответствующим количеством свободного пространства. Также для прошивки программой потребуются рут-права.
Бэкап данных MyPhoneExplorer или с помощью ПК
Если вы нацелились на создание копии прошивки, но при этом дополнительный софт и необходимость получения рут-доступа вас не устраивают, стоит ознакомиться с инструментами, которые предлагает программа MyPhoneExplorer.
Утилита имеет русифицированный интерфейс и не требует каких-либо навыков для использования. При этом она позволяет сделать бэкап прошивки Android через компьютер, не открывая права суперпользователя.
Для создания копии вам следует подсоединить планшет или смартфон к ПК, запустить утилиту, в каталоге «Разное» выбрать пункт «Создать резервную копию». Затем утилита предложит вам сохранить копию в любой директории на диске ПК.
Копирование в безопасном режиме ADB Run
Достаточно простой способ создания резервной копии демонстрирует программа ADB Run.
Практичный инструмент устанавливается на компьютер и для дублирования требует только исправного USB-кабеля и актуальной версии драйверов устройства. Для создания копии достаточно запустить программу, перейти в раздел «Backup», выбрать пункт «ADB Backup».
Процесс создания копии системы занимает считаные минуты. Также вам будет предложено сохранить файл бэкапа в удобную директорию.
Отдельного внимания при этом заслуживает факт, что для использования программы вам не нужно получать рут-доступ. Необходимо только включить отладку по USB на своем девайсе.
Дублирование через SP Flash Tool
Являясь пользователем устройств с процессорами MTK, вы можете создавать копии системы посредством утилиты SP Flash Tool.
Решив сделать полный бэкап прошивки Android на MTK через Flash Tool, будьте готовы потратить время. Для подготовки системы к бэкапу требуется включение отладки по USB и различные манипуляции с ADB.
Как только вы настроите базу данных под работу с утилитой, процесс займет считаные минуты. Причем вам будет предложено сохранить копию в любой директории своего ПК. Перед процессом убедитесь в исправности USB-провода и в наличии актуальных версий драйверов. Если эти условия не будут соблюдены, в процессе создания бэкапа могут возникать различные ошибки.
Восстановление прошивки
Проводя различные манипуляции и эксперименты с операционной системой своего гаджета, вы «закирпичили» устройство или оно систематически начало давать сбои? Пора задуматься об откате настроек к заводским или о бэкапе данных. Оба этих процесса позволят вам быстро вернуть нормальные работоспособные параметры файловой системы девайса без перепрошивки и прочих затратных по времени процессов.
Заранее подготовить папки в корне диска ( раздела ) на ПК.
В именах папок и пути к ним не должно быть ничего кроме латиницы, цифр и нижнего дефиса.
В данном случае, как пример, взят смартфон Lenovo S1L ( Mediatek MT6753 ).
По аналогии ниже описанных действий Вам нужно брать данные со скаттер-файла своего смартфона ( прошивки ) и так же на своём гаджете использовать Terminal Emulator for Android для вычисления размера полного дампа.
Для исполнения данной команды в этом эмуляторе терминала рут-права не требуются.
Размер полного дампа на устройстве с процессором МТК вычисляется так ( открыть спойлер ).
Запустить приложение Terminal Emulator for Android на Вашем гаджете.
Ввести команду cat /proc/partitions
Вводить команду нужно точно так же, как она написана здесь строчкой выше - с одним пробелом после cat и далее с теми же слешами без пропусков и лишних символов.
Приложение отобразит все разделы с памяти устройства количеством блоков в разделе ( один блок = 1024 Байта ).
В строчке mmcblk0 отображена вся память целиком.
Значение со строчки mmcblk0 умножаем на 1024 и получаем размер полного дампа в Байтах.
Переводим полученное значение размера из Dec в Hex и получаем нужное значение для ввода в поле "Length" окна Flash Tool.
На смартфоне Lenovo S1L значение строчки mmcblk0 показало равным 15267840.
15267840 х 1024 = 15634268160 (Dec) = 0x3A3E00000 (Hex).
Для вычислений и перевода из Dec в Hex вполне подойдёт калькулятор с Windows на ПК.
В открытом калькуляторе на вкладке "Вид" выбрать "Программист" - калькулятор переключится в программный вид и автоматом будет выбран режим Dec ( десятичные ).
В этом режиме производим умножение.
Далее при полученном результате выбираем Hex ( шестнадцатиричные ).
Калькулятор переведёт значение из Dec в Hex.
Вот это значение (Hex) и есть нужный Вам тот размер полного дампа с Вашего гаджета, который Вы будете указывать в дальнейшем в окне Flash Tool.
На ПК запустить SP Flash Tool ( SP_Flash_Tool_exe_Windows_v5.1548.00.000 или более поздняя версия ).
1. В папке с программой Flash Tool правым кликом по значку flash tool вызвать контекстное меню.
2. Запустить Flash Tool левым кликом по "Запуск от имени администратора". Если Вы на ПК под учётной записью администратора, то можно и просто двойным кликом по значку flash tool запустить программу.
3. При запуске Flash Tool в первый раз вам выдаст оповещение об отсутствии агента и скаттер-файла в программе. Просто нажмите на "ОК" и откроется стартовое окно программы Flash Tool.
4. Нажать на кнопку "Download Agent".
5. Выбрать папку с программой Flash Tool.
6. В папке выбрать файл "DA_SWSEC.bin".
7. Нажать на кнопку "Открыть".
8. Нажать кнопку "Scatter-loading".
9. Выбрать папку, где находится скаттер-файл с той прошивки, на которой у Вас в данный момент Ваш гаджет.
10. В папке выбрать сам scatter-файл ( выглядит как "MT6753_Android_scatter" с номером Вашего процессора МТК ). Можно выбрать либо из папки с заводской прошивкой для своего аппарата под SP Flash Tool, либо как отдельно сохранённый скаттер-файл. В моём примере скаттер-файл отдельно сохранён в заранее подготовленной папке без всех остальных файлов для установки прошивки с ПК.
11. Нажать на кнопку "Открыть".
12. В окне Flash Tool появится список разделов ( с полными путями к файлам или нет - не имеет значения ). Перейти на вкладку "Readback".
13. На вкладке Readback нажать кнопку Add.В списке ниже появится новая строчка.
14. Сделать двойной клик мыши по строчке. Программа предложит выбрать путь и ввести имя файла для сохранения.
15. Указать на компьютере папку где резервная копия полного дампа будет хранится до момента потребности в ней.
16. Задать имя, при этом обязательно оставляем начальные ROM_ в имени и используем только латиницу, цифры и нижний дефис. Дабы в будущем не ломать голову, вспоминая нужные данные старт адреса и длины, я их прописываю в имени через нижний дефис ( пробел, кириллица или иные знаки в имени не допустимы ).
17. Нажать на кнопку "Сохранить".
18. Следом появится окно Readback block start address. Убедиться, что стоит пункт "Hex".
19. В пункте Region выбрать: EMMC_USER (MT6592 и выше).
В строке Start Address ввести нулевое значение 0x0.
В строке Length ввести Вами ранее вычисленное значение размера полного дампа и преведённого в Hex ( в моём примере это значение 0x3A3E00000 ).
20. Нажать на кнопку "ОК".
21. Проверить и удостовериться, что введены правильные значения во всех столбцах.
22. Нажать на кнопку "Read Back".
Далее после нажатия на "Read Back" аккуратно, одним разом без перетыканий подсоединяем выключенный гаджет к ПК по USB и тут же оставляем гаджет без перекладываний, переворачиваний и тому подобных физических воздействий как на него, так и на ПК.
Процесс сливания дампа начнётся сразу же после подсоединения гаджета по USB.
И лучше на время процесса сливания дампа с гаджета отлучитесь от ПК ( попейте чайку минут 20 - 25 ).
На гаджетах с не съёмными аккумуляторами может присутствовать кнопка "reset", как например на смартфоне Lenovo P780.
Такая кнопка служит аналогом вытаскивания-вставки аккумулятора.
В этом случае нажмите эту кнопку на пару секунд и отпустите её перед подсоединением к ПК.
Дальнейшие действия с 23-го по 29-е будут производиться без Вашего участия :
23. Сразу после подсоединения выключенного гаджета по USB к ПК и успешного срабатывания драйверов в Диспетчере устройств на ПК должен определиться подсоединённый выключенный гаджет, как MediaTek Preloader USB VCOM (Android) (COMx) ( в моём случае как COM4 ) и так же отразиться в нижнем ряду окна Flash Tool.
24. Пробежит красная полоса "Download DA 100%".
25. В окне Flash Tool слева внизу под картинкой отобразится информация по чипу с Вашего гаджета.
26. В нижнем ряду окна Flash Tool (слева направо) начнётся отсчёт размера слитого дампа в Мб и далее после 1000 Мб в Гб, скорость сливания в Мб/сек, текущее время, объём уже слитого дампа в процентах и постепенное заполнение шкалы синим цветом.
27. По окончании сливания дампа шкала будет заполнена синим цветом полностью, там же на шкале надпись достигнет "Read back 100%".
28. Появится небольшое окошко "Read back Ok".
29. Flash Tool автоматически программно отключит подсоединённый гаджет, в Диспетчере устройств на ПК исчезнет строчка "MediaTek Preloader USB VCOM (Android) (COMx)".
30. Теперь можно закрыть программу Flash Tool и отсоединить гаджет от ПК. Дабы посмотреть что у Вас получилось - откройте папку со слитым дампом, правый клик на файле, вкладка "Свойства". Там в скобках отображён реальный размер слитого дампа.
Советую сразу же создать проверочный файл хеш-сумм MD5 для того, чтобы в будущем Вы смогли убедиться в целостности слитого дампа, заново создав файл хеш-сумм MD5 и сравнив его с прежним. Для создания файла хеш-сумм MD5 я использую на ПК утилиту FileMenu Tools - посмотреть инструкцию по созданию файла хеш-сумм и скачать утилиту можно по ссылке здесь (спойлер 2 и 4 )
Внимание ! На новых процессорах МТК от MT67xx и позже ( а смартфон S1L как раз на процессоре MT6753 ) для последующего успешного восстановления со слитого полного дампа необходимо отдельно переписывать разделы tee1 и tee2 на устройство либо отдельно слитым дампом с этих разделов, либо в программе Flash Tool в режиме "Download Only" ( при наличии пакета прошивки для установки с ПК ).
После записи одного только слитого полного дампа на устройство на процессорах МТ67хх, оно у Вас не включится.
Мы рассмотрим здесь вариант, когда допустим, что нет у нас пакета прошивки для установки с ПК на наше устройство.
Следовательно нам необходимо слить кусок дампа с разделов tee1 и tee2.
А для этого нам нужны Start Address и Length.
Следовать нижеописанному ( открыть спойлер ).
И так же по аналогии всех действий сливания полного дампа, следом, отсоединив выключенный смартфон от ПК после сливания полного дампа, приступаем к сливанию куска дампа с разделов tee1 и tee2 суммарно, начиная вводить полученные значения Start Addres и Length на шаге 16 и далее ( выше по скриншотам ).
Запустить тот же Terminal Emulator for Android на Вашем гаджете.
Ввести команду cat /proc/emmc
Вводить команду нужно точно так же, как она написана здесь строчкой выше - с одним пробелом после cat и далее с теми же слешами без пропусков и лишних символов.
Приложение отобразит все разделы с памяти устройства в секторах, как стартовый адрес каждого раздела ( Start Addres ), так и размер занятого пространства в каждом разделе ( nr_sects ).
Чтобы узнать реальные значения в (Hex) необходимо выведенные на экран значения умножать на 200 в том же (Hex).
Итак, нам нужны данные старт адреса и длины обоих разделов tee1 и tee2 в одном куске дампа.
Старт адрес - понятно, тут мы берём данные с экрана со столбика Start Address и строки tee1 - это 00030000 = 0x30000.
Умножаем ( в Hex) 0x30000 на 200 и получаем значение 0x6000000.
Sart Address : 0x6000000
Далее, чтобы наш кусок дампа включал в себя полностью два раздела tee1 и tee2, мы должны взять за окончание дампа стартовый адрес с последующего за разделом tee2 раздела fpr, то есть 00035000 = 0x35000.
Так же (в Hex) умножаем 0x35000 на 200 и получаем значение 0x6A00000.
Теперь вычитаем разницу между началом и концом куска дампа :
0x6A00000 - 0x6000000 = 0xA00000
Вот эта разница и есть длина дампа разделов tee1 и tee2.
Length : 0xA00000
Итого.
Sart Address : 0x6000000
Length : 0xA00000
Для просмотра скаттер-файла рекомендуется Notepad++ . В качестве зеркала версия: Notepad++ 6.6.9
Ну, и в заключение, здесь под спойлером видеоролик всего, что описано выше ( сливание полного дампа и куска дампа tee1+tee2, а так же создание и сохранение контрольных файлов хеш-сумм слитых дампов ).
Для нормальной видимости всего шрифта в видеоролике выберите в просмотре качество 720р.
Ниже видеоролик записи слитого дампа обратно на смартфон ( восстановление с состояния полного окирпичивания )
Вы наверное как и я любили в детстве все разбирать и изучать, как и что работает. Некоторые повзрослели, а я все еще люблю этим заниматься )). В этой статье, я расскажу о том, как вытащить прошивку с любого устройства и как разрабы пытаются это предотвратить.
У старых ламповых приемников не было вообще никаких прошивок, а единственная защита, которая у них была — это анодное напряжение. В наше время все иначе: мне попадаются гаджеты, которые пытаются противодействовать уже на этапе вскрытия корпуса. Начнем наше увлекательное путешествие.
Осмотр платы устройства
Если вскрытие не показало, что пациент умер от вскрытия, я сначала осматриваю плату в поисках пинов отладочных интерфейсов — обычно это JTAG или UART. Главная проблема не в том, что нужные контакты могут быть в очень неожиданных местах, а в том, что обычно они отключены. Конечно, даже в 2021 году все еще хватает уникумов, которые отправляют в прод устройства с включенным UART, но количество таковых стремительно падает.
Если тебе не повезло — вариантов немного: или плакать в подушку, или искать чип памяти на борту и читать его непосредственно.
И вот с этим тебя ожидает уйма интересного! Думал, нужно просто вытащить восьминогую микруху в DIP-корпусе, похожую на старый чип с BIOS? Как бы не так! Сейчас есть минимум четыре относительно широко применяемых вида памяти, и некоторые из них могут быть похожи друг на друга так, что не различишь.
Память
Прежде чем я расскажу, что и как делать с памятью, давай сначала разберемся, какая она вообще бывает и как ее отличить от других компонентов на плате.
По опыту процессор (на скриншоте выше по центру) обычно квадратной формы и исполняется в BGA, а память прямоугольная и делается в SOP-корпусах.
Часто в ультрапортативных вычислительно мощных устройствах (смартфонах, например) используется бутерброд из процессора и памяти — так меньше размеры и задержки при работе. Форм‑фактор, конечно, BGA — просто потому, что ничего другого в крохотный корпус запихнуть нельзя.
ROM — постоянную память — отличить довольно легко. Предположим, чип с ней ты уже нашел. Теперь давай разберемся, какая она бывает.
Нас интересует EEPROM (Electrically Erasable Programmable Read-Only Memory), FRAM (сегнетоэлектрическая память) и NOR/NAND flash — они тебе уже и так знакомы. Из них ты мог не слышать только о FRAM — ее начали применять около пяти лет назад, так что она еще не особо популярна.
EEPROM
Среди особенностей этой памяти — побайтовые чтение и запись. Такая память самая долговечная: по расчетам, она может сохранять информацию в течение примерно двухсот лет! Но за надежность приходится платить — главным образом объемом, с котором у этого вида памяти все плохо: типичный объем такого чипа измеряется в килобайтах. Из‑за низкого объема для хранения прошивок этот тип памяти почти не применяется. Ну а раз заговорили о минусах — стоит и о низкой скорости сказать.
Устройство ячейки памяти EEPROM
Ресурс ячейки — около миллиона циклов перезаписи. По сравнению с современными ячейками NAND, у которых этот показатель находится в пределах нескольких десятков тысяч циклов, EEPROM-память просто нереально надежная.
FRAM — это совсем новый тип энергонезависимой памяти. Промышленно его применять стали всего несколько лет назад, так что шанс встретить именно FRAM в каком‑нибудь умном холодильнике небольшой, но скоро все может поменяться. Пока что основная проблема в цене, которая несколько выше, чем у других типов памяти.
Устройство FRAM-ячейки. Похоже на DRAM, правда?
От EEPROM отличается фундаментально другим принципом запоминания информации: хранится не заряд на затворе, а знак поляризации сегнетоэлектрика. При приложении напряжения она меняется на противоположную, что позволяет читать такую память и писать в нее.
Из‑за нового принципа работы такая память значительно быстрее, чем EEPROM, но ее долговечность осталась практически неизменной.
NOR/NAND Flash
NOR/NAND-флеш‑память — это просто EEPROM, собранный в массив. NOR от NAND отличается только способом упаковки в массив, но это небольшое различие ведет к достаточно сильным отличиям в такой памяти.
NOR быстрее и надежнее, чем NAND, но стоит дороже из‑за меньшей плотности компоновки. NAND же, напротив, дешевый как мусор, но имеет проблемы с надежностью.
NOR- и NAND-память используется в SSD и всяких флешках. Из‑за низкой надежности NAND-памяти такие накопители в обязательном порядке имеют большой пул запасных ячеек, недоступных для обычного использования, и умный контроллер, который всем этим хозяйством рулит. Держать такой оверхед в ширпотребных умных мультиварках непростительно дорого, так что применяется обычно NOR, а NAND остается для пользовательских накопителей, где проблемы надежности можно переложить на пользователя, который не делает бэкапы. Хотя нет — даже в дешевых роутерах он все чаще применяется благодаря программным механизмам защиты целостности.
Сводная таблица NOR NAND FRAM EEPROM
NOR был бы идеален, если бы не его цена, так что рыночек порешал — и теперь у нас всех используется NAND почти везде. Даже во встраиваемой технике уже почти научились с ним безопасно работать — контрольные суммы, ECC-коды и резервные блоки. Красота!
Корпуса микросхем
Как видишь, с корпусами у памяти все плохо: помимо показанных на картинке вариантов, можно запросто вспомнить еще с десяток, и не факт, что производитель не решил использовать нечто эксклюзивное, у чего может вообще не быть названия.
Корпуса микросхем
Маркировка
Допустим, тебе повезло найти чип с памятью. Первым делом нам нужно прочитать его маркировку.
Если маркировка есть — немал шанс встретить ее именно в таком формате, как показан на картинке выше. Первые две буквы — код вендора, потом тип памяти в чипе, потом внутренний номер серии — и дальше уже четкой логики не прослеживается.
Так как единого стандарта нет и не предвидится, производители вольны писать на своих чипах, что считают нужным. Это порой приводит к коллизиям, вроде того, что представлено на той же картинке: два чипа разных производителей, оба 29-й серии, но один NOR, а другой — NAND. Короче, не угадаешь, и такие чипы приходится пробивать в поисковиках, чтобы выяснить хоть что‑то.
Типовой дизайн
Устройства одного сегмента проектируются очень похожими — это вполне очевидно. Например, все бытовые роутеры изнутри выглядят почти одинаково. Та же ситуация на рынке устройств SCADA, у которых свои каноны, но они прослеживаются везде без особых изменений.
Я расскажу о пяти категориях устройств, с которыми тебе, возможно, придется иметь дело:
- ПК;
- сетевое оборудование бытового сегмента (роутеры, свитчи, точки доступа);
- оборудование для ответственных применений (на заводах);
- IoT — интернет вещей;
- смартфоны.
Само собой, мир крутится не только вокруг смартфонов да компьютеров, но с ними у тебя шанс встретиться куда больше, чем с каким‑нибудь контроллером для управления ракетными двигателями. Поэтому давай рассмотрим типовое устройство только этих пяти категорий девайсов.
Устройство обычных ПК подразумевает модульность, то есть почти все детали можно легко вынуть. Из‑за этого на матплате из элементов памяти есть только флешка с BIOS/UEFI. При этом BIOS обычно сидит на микросхемах 24-й серии — I2C EEPROM, а в новых моделях стоит 25-я серия SPI NOR flash с UEFI.
Если же установлен взрослый интеловский процессор с поддержкой ME — на плате можно найти вторую такую же флешку, но с прошивкой для ME. Это делается в целях безопасности: находящуюся на физически отдельной микросхеме прошивку заразить или подменить сложнее.
Intel ME
Intel Management Engine — это особая система для UEFI-совместимых ПК на базе процессоров Intel. Она имеет свою выделенную микросхему памяти и собственный процессор, а также собственные каналы доступа к сетевым адаптерам и основной оперативной памяти. Может без ограничений взаимодействовать почти с чем угодно в составе компьютера, что очень сильно повышает требования к ее защите.
Бытовые роутеры
С роутерами потребительского класса все довольно просто: тут ставят память SPI NOR 25-й серии, если требуется не больше 8 Мбайт, или NAND-память объемом побольше. Изредка можно найти eMMC, но мне такое пока не попадалось.
Устройства для ответственного применения
Тут все немного сложнее. Стандарты требуют странных вещей, поэтому с большим шансом устройства этой категории будут состоять из нескольких плат, соединенных переходными интерфейсами. Будет много разных запоминающих устройств, чтобы просто пройти сертификацию.
Логи обычно пишутся в EEPROM или FRAM 24-й серии, загрузчик лежит на NOR 25-й серии, а все встроенное ПО кладут на NOR 26-й, 29-й серии. NAND используют редко, а если используют — сразу большими массивами с резервированием.
Сейчас понятие IoT слишком растяжимое: по сути, туда можно записать вообще все умное домашнее и даже не очень домашнее. Из‑за этого память там может быть любая: хоть EEPROM, хоть eMMC — это когда NAND с хост‑контроллером упакованы в один чип.
Смартфоны
В смартфонах обычно все самое передовое: тут тебе и eMMC, и eUFS, и даже NVMe SSD, как у Apple. При этом, как ни крути, все эти чипы выглядят плюс‑минус одинаково, так что ты их ни с чем не спутаешь.
Расшифровка имени
Теперь, когда нашли нужный чип и прочитали маркировку, ее нужно декодировать. Кстати, маркировка далеко не всегда читается целиком: часть может быть случайно или намеренно скрыта, а то и вовсе подделана, как любят устраивать китайцы со своими деталями на Али.
Особо крупные производители могут предоставлять на своих сайтах декодеры имени микросхемы, но почти никто так не делает.
Похвальный пример — производитель Micron, который дал на сайте внятную инструкцию и форму для получения даташита на свои микросхемы.
Если же декодера нет, придется выкручиваться. Можно попробовать разобраться по схеме на скриншоте ниже, но, естественно, безо всяких гарантий успеха. Возможно, даже лучше сразу идти к японцам — они очень любят неадекватно запутанные названия без известной логики. Она, конечно, есть, но пока что никто ее не смог понять.
Поиск документации
Гуглить, думаю, ты и сам умеешь, но для поиска документации ко всяким экзотическим чипам это может быть бесполезно. Во‑первых, более эффективен поиск по первым N символам названия микросхемы. Во‑вторых, часто проще найти по коду на Aliexpress или других крупных торговых площадках.
Если уж любишь Google, попробуй поиск по картинкам — там порой можно найти то, что текстом не ищется.
Еще огромные базы чипов есть в ПО для программаторов — я использую ПО компании Elnec. Зачастую там даже есть даташиты, но слишком на это надеяться не стоит.
И еще одно хорошее место для поисков — GitHub. С большим шансом там найдется что‑нибудь по запросу в духе «X microcircuit read poc». Дальше можно выдрать ссылку на даташит или что‑то еще полезное. Мне попадались даже скрытые сервисные команды для блокировки/разблокировки чипа, что, конечно, очень приятно при изучении.
Оборудование
Тут можно только сказать, чего делать не стоит: не надо брать дешевые инструменты и расходники. Из моего любимого — припой, который плавится при совершенно неожиданных температурах, проводящий флюс (!) и одноразовые пинцеты.
Подробнее хочется рассказать о дешевом флюсе. Как пример — ТТ, также известный как розовый гель. Он хорош, но он не отмывается и проводит ток на высоких частотах. Это не проблема в советском радио или даже современном блоке питания, но вот на платах компьютеров с гигагерцами частоты он категорически противопоказан.
Снятие компаунда — это вопрос температуры. Я обычно грею феном на
250 градусов, но есть одна проблемка. И состоит она в том, что под компаундом компоненты могут быть припаяны низкотемпературным припоем, вроде сплавов Розе или Вуда. Да, компаунд ты снимешь, но вместе с ним сойдет половина платы. А хитрая флешка может не завестись без кучи рассыпухи, которую обратно уже не собрать.
При снятии компаунда не забывай о вытяжке — твое здоровье важнее любой микросхемы!
Что делать, если плата покрыта лаком? Можно попробовать свести его ацетоном, но он может повредить текстолит. Делай так, только если тебе терять нечего. Для остальных случаев — просто снимать скальпелем в нужных местах, а остальное не трогать.
При пайке ориентируйся на график термопрофиля в конце даташита на микросхему. Он там размещается не просто так, и на моей памяти действительно были случаи, когда микросхема умирала от перегрева при извлечении. Как известно, люди делятся на тех, кто не смотрит графики в документации, и тех, кто уже смотрит.
К заводскому припою часто имеет смысл примешать менее тугоплавкий сплав Розе или ПОС63, ну или сплав Вуда, если все совсем плохо. Это значительно понизит температуру пайки и увеличит шансы не сжечь микруху.
Подготовка к чтению прошивки
После выпайки ни в коем случае нельзя устраивать микросхеме температурные испытания: пусть полежит и остынет сама, а не в спирте — так шансы сохранить работоспособность куда выше. Дальше нужно проверить, все ли лапки чипа находятся в одной плоскости и не образовались ли от припоя перемычки между ножками. Их нужно убрать, чтобы не спалить программатор, не имеющий защиты от такого, и сам чип тоже.
С BGA нужно убрать старый припой и нанести новые шарики. Когда чип очищен и подготовлен к чтению, не вздумай пихать его в программатор с прижимом прямо в чип — велик шанс просто раздавить его!
Чтение прошивки
Помни, что память NOR flash идет с завода без битых ячеек, а у NAND есть допустимый процент брака, так что, если в NAND видны битые ячейки, не спеши расстраиваться.
Программатор перед чтением нужно правильно настроить. В частности, надо заставить его читать все, включая системные страницы в начале и конце памяти — они бывают крайне важны!
Разработчики чипа настоятельно рекомендуют разработчикам устройства использовать свои чипы в соответствии с некоторыми правилами. Но вторые вольны не подчиняться первым, так что системные страницы порой оказываются хранилищем ключей шифрования или каких‑то других данных. В общем, читай все — лишним точно не будет.
Вот теперь у тебя есть образ, который можно грузить в IDA и ковыряться дальше, но это уже тема для отдельной статьи.
Статья написана по мотивам доклада Демида Узенькова — специалиста компании ИНФОРИОН. Выступление состоялось на конференции RuCTFE 2020. За помощь в подготовке публикации редакция благодарит команду «Хакердом».
Читайте также: