Как узнать имя файла прошивки

Обновлено: 06.07.2024

Приступим к прошивке. Самые простые на мой взгляд в плане прошивки устройства - это устройства фирмы Apple. Скачиваем и устанавливаем программу iTunes, эта программа при установке сама установит все необходимые драйверы, сама точно определит какое устройство подключено, сама скачает прошивку. Есть 3 режима из которых можно прошить яблочное устройство:
А) normal. Это обычный режим, когда iphone/ipad/ipod загружается до рабочего стола, вы можете разблокировать устройство и вам просто надо обновить устройство, с сохранением данных пользователя. Просто подключаете разблокированное устройство к пк, на экране устройства нажимаете "доверять этому пк", если айтюнс сообщит что есть новая прошивка, то нажимаете "обновить", со всем соглашаетесь и через 15-30 минут (в зависимости от размера прошивки и скорости вашего интернета) вы получите самую новую версию программного обеспечения для вашего устройства на сегодняшний день.
Б) recovery. Если ваше яблочное устройство заглючило, не загружается, висит на заставке и дальше яблока не загружается, или циклически перезагружается, или надо просто стереть все данные вместе с экранным паролем, или на экране устройства вот такая картинка, то действуем следующим образом: подключаем к пк устройство, зажимаем клавишу home(или клавишу уменьшения громкости начиная с айфон7) и нажимает кнопку включения секунды на 3-5, держим обе кнопки пока устройство не перезагрузится и сразу отпускаем кнопку включения, продолжаем держать home. Как только увидим на экране яблочного устройства значок "подключитесь к айтюнс" можно отпускать кнопку home. Программа айтюнс на пк должна найти устройство в режиме восстановления и предложить вам либо ВОССТАНОВИТЬ УСТРОЙСТВО (сотрёт все данные и пароли, прошьёт самую свежую прошивку), либо ОБНОВИТЬ (просто прошьёт самую свежую прошивку, данные не будут затронуты). Если же вы зажмёте на клавиатуре пк клавишу shift и одновременно кликните ВОССТАНОВИТЬ, то айтюнс предложит выбрать вам локальный файл прошивки, заранее вами скаченный.

Небольшой курс по прошивке смартфонов Прошивка, Xiaomi, Apple, Samsung, Android, Mediatek, Qualcom, Huawei, Видео, Длиннопост

Если же смартфон не загружается, то версию прошивки можно посмотреть зайдя в recovery (звук+ домой и включение)

Небольшой курс по прошивке смартфонов Прошивка, Xiaomi, Apple, Samsung, Android, Mediatek, Qualcom, Huawei, Видео, Длиннопост

Версия прошивки подчеркнута красной линией, версия загрузчика 5й символ, если считать справа налево. Так вот если вы вдруг решите прошить в самсунг прошивку с более низкой версией загрузчика, у вас ничего не получится.
Есть программа для скачивания прошивок Samsung, называется SamFirm, существует много разновидностей этой софтины, ибо разработчики постоянно меняются. Если вдруг вы решите воспользоваться этой программой, то я для вас подготовил расшифровку регионов.
Russia — SER
Afghanistan — AFG
Algeria — TMC
Argentina — ARO
Argentina — CTP
Argentina (Claro) — CTI
Argentina (Moviestar) — UFN
Argentina (Personal) — PSN
Australia — XSA
Australia (Optus) — OPS
Austria (3 Hutchison) — DRE
Austria (A1) — MOB
Austria (Orange) — ONE
Austria (T-Mobile) — MAX
Austria (Telering) — TRG
Baltic — SEB
Bangladesh — TML
Belgium / Luxemburg — PRO
Bosnia and Herzegovina — ERO
Bosnia and Herzegovina (BH TELECOM) — BHT
Brazil — ZTO
Brazil (Claro) — ZTA
Brazil (TIM) — ZTM
Brazil (VIVO) — ZVV
Bulgaria — GBL
Bulgaria (MTL) — MTL
Bulgaria (VVT) — VVT
Chile — CHO
Chile (Claro) — CHL
Chile (Entel PCS) — CHE
Chile (Telefonica) — CHT
China — CHU
Colombia — COL
Colombia (Comcel) — COM
Colombia (Moviestar) — COB
Costa Rica — ICE
Croatia — TRA
Croatia (T-Mobile) — CRO
Croatia (VIPNET) — VIP
Cyprus — CYV
Cyprus (Cytamobile Vodafone) — CYO
Czech Republic — XEZ
Czech Republic (O2C) — O2C
Czech Republic (T-Mobile) — TMZ
Czech Republic (Vodafone) — VDC
Denmark (3) — HTD
Dominica — DOR
Dominican Republic — CDR
Ecuador — ECO
Ecuador — EBE
Egypt — EGY
France — XEF
France (Bouygues) — BOG
France (Orange) — FTM
France (SFR) — SFR
Germany — MBC
Germany — DBT
Germany (E-Plus) — EPL
Germany (O2) — VIA
Germany (T-Mobile) — DTM
Germany (Vodafone) — VD2
Greece — EUR
Greece (Cosmote) — COS
Greece (Vodafone) — VGR
Guatemala — TGU
Guatemala — PGU
Guatemala (Tigo) — CGU
Hong Kong — TGY
Hungary — XEH
Hungary (T-mobile) — TMH
Hungary (Telenor) — PAN
Hungary (VDH) — VDH
India — INU
India — INS
Indonesia — XSE
Iran — THR
Iraq — MID
Ireland (Meteor) — MET
Ireland (O2) — O2I
Ireland (Three) — 3IE
Ireland (Vodafone) — VDI
Israel — ILO
Israel (Cellcom) — CEL
Israel (Mirs) — MIR
Israel (Orange/Partner) — PTR
Israel (Pelephone) — PCL
Italy — ITV
Italy (H3G) — HUI
Italy (Vodafone) — OMN
Italy (Wind) — WIN
Jamaica — JDI
Kazakhstan — SKZ
Kazakhstan (Kcell) — KCL
Kenya — AFR
Kenya — KEN
Libya — BTC
Luxembourg — LUX
Macedonia — VIM
Macedonia — MBM
Malaysia — XME
Mexico — IUS
Mexico (Movistar) — TMM
Mexico (Telcel) — TCE
Morocco — FWD
Morocco (MAT) — MAT
Morocco (MED) — MED
Morocco (MWD) — MWD
Nepal — NPL
Netherlands — PHN
Netherlands (T-Mobile) — TNL
Netherlands (Vodafone) — VDF
New Zealand (Vodafone) — VNZ
New Zeeland — NZC
Nigeria — ECT
Nordic countries — NEE
Norway (Telenor) — TEN
Open Austria — ATO
Open Europe — OXA
Pakistan (PAK) — PAK
Panama — TPA
Panama — PBS
Panama (Cable & Wireless) — PCW
Panama (Claro) — CPA
Peru — PET
Peru (SAM) — SAM
Philippines — XTE
Philippines (Globe) — GLB
Philippines (Smart) — SMA
Philippines (Sun) — XTC
Poland — XEO
Poland (Orange) — IDE
Poland (PLUS) — PLS
Poland (Play) — PRT
Poland (T-mobile) — TPL
Portugal (Optimus) — OPT
Portugal (TMN) — TMN
Portugal (TPH) — TPH
Portugal (Vodafone) — TCL
Puerto Rico — PCT
Romania (Cosmote) — COA
Romania (Orange) — ORO
Romania (Vodafone) — CNX
Saudi Arabia — KSA
Saudi Arabia (JED) — JED
Serbia — TSR
Serbia (Telenor) — MSR
Serbia (Vip SRB) — TOP
Singapore — XSP
Singapore — MM1
Singapore (SingTel) — SIN
Singapore (StarHub) — STH
Slovakia — ORS
Slovenia (Mobitel) — MOT
Slovenia (Si.mobil) — SIM
South Africa — XFE
South Africa — XFA
South Africa (Vodafone) — XFV
Spain — PHE
Spain (Moviestar) — XEC
Spain (Orange) — AMN
Spain (Vodafone) — ATL
Spain (Yoigo) — YOG
Sri Lanka — SLK
Sweden — VDS
Sweden (Tre) — HTS
Switzerland — AUT
Switzerland (Swisscom) — SWC
Taiwan — BRI
Taiwan (WAN) — WAN
Thailand — THL
Trinidad and Tobago — TTT
Tunisia — ABS
Tunisia — TUN
Turkey — TUR
Ukraine (Kyivstar) — SEK
United Arab Emirates — XSG
United Kingdom — BTU
United Kingdom (H3G) — H3G
United Kingdom (O2) — O2U
United Kingdom (Orange) — ORA
United Kingdom (T-Mobile) — TMU
United Kingdom (Vodafone) — VOD
Uruguay — UFU
Uruguay — UPO
Uruguay (Claro) — CTU
Vietnam — XXV
Vietnam — XEV
Ну и для наглядности ролик по прошивке Samsung SM-G531

Qualcomm. Чипы этой фирмы есть в каждом 2м смартфоне на планете. Программа, которая прошивает устройства на базе процессоров qualcomm называется QFIL (qualcomm flash image loader) и входит в пакет программ QPST. Для прошивки используется режим EDL (emergency download - экстренная прошивка), устройство в этом режиме определяется компьютером как HS-Diagnostic interface 9008. Для установки этих драйверов необходимо отключать проверку цифровой подписи на 64 битных ОС. Принудительно ввести устройство в режим edl можно либо комбинацией клавиш (у каждого производителя и модели эта комбинация своя, необходимо гуглить), а некоторые модели только с помощью тестпоинтов или сервисного кабеля.

Небольшой курс по прошивке смартфонов Прошивка, Xiaomi, Apple, Samsung, Android, Mediatek, Qualcom, Huawei, Видео, Длиннопост

Testpoint - это такие контакты на материнской плате смартфона, при замыкании которых устройство входит в специальный режим прошивки.

Мною разработаны средства под различные типы чипов (микроконтроллеров), имеющих различие в строении образов. По мере поступления информации я буду выкладывать ее Вам в соответствующем разделе. В разделе "Дополнительная информация" будут находиться ссылки на заметки (статьи), ОБЩИЕ для всех чипов.

Консольные средства для обработки прошивок и отдельных образов
  • - на основе Perl/Python скриптов, выполняющие несколько операций;
  • - отдельные приложения, выполняющие, как правило, одну-две функции.
  • стандартное, предназначенное для обработки одного экземпляра прошивки или набора образов устройства. На сегодня это версия RKwinTools_v1.4.0;
  • Pro, позволяющее работать параллельно с несколькими прошивками, используя принцип проектов. На сегодня это версия RKwinTools_Pro_v1.1
  • добавлена обработка разделов second, dtb образов Boot и Recovery;
  • обрабатываются образы Boot и Recovery, созданные архиваторами gzip, lzma, xz;
  • добавлена возможность выбора образа из списка при обработке;
  • при сборке параметры образов выбираются из файла конфигурации (cfg/*.cfg);
  • расширены функции работы через ADB.
  • выбрать исходный файл ROM-прошивки для обработки из списка имеющихся;
  • распаковать и запаковать ROM-прошивку в формате "RKFW" и "RKAF" с автоматическим определением формата;
  • распаковать образы Boot, Recovery. Поддерживаются форматы как "ANDROID", так и "KRNL" с автоматическим определением;
  • запаковать образы Boot и Recovery с выбором типа конечного образа (KRNL или ANDROID);
  • распаковать и запаковать образ Kernel;
  • распаковать и запаковать образ System типа jaffs и ext2-ext4 ;
  • преобразовать сжатый образ System типа sparse в ext4;
  • инициировать ROOT в образ system;
  • работать с устройством через ADB;
  • подсчитать контрольную сумму файла в формате md5.
  • читать руководство пользователя.
  • удалено копирование настроек при отказе во время сборки ROM.
  • исправлена ошибка при разборке образа system типа ext4.
  • добавлена сборка образа system типа ext4.
  • добавлен пункт меню для получения информации об образе system (9 - info system).
  • создать новый проект;
  • открыть проект, выбрав его из списка уже существующих;
  • сохранить проект в архив;
  • восстановить проект из архива;
  • удалить проект.

Прикрепленный файл

Используйте ее для общего ознакомления со средством, т.к. такая же находится в общем архиве.
Для варианта Pro: README_Pro_1.2.rar ( 5.23 КБ )

или в pdf формате RKwinTools_Pro_1.1.pdf ( 580.36 КБ )

Прикрепленный файл

Для стандартного варианта: README_133.rar ( 7.58 КБ )

Прикрепленный файл

Вариант Pro: RKwinTools_Pro_v1.2.rar ( 6.02 МБ )

Прикрепленный файл

Стандартный вариант: RKwinTools_v133.rar ( 5.86 МБ )

Программа редактирования параметров файла Parameter перенесена в тему Разметка памяти мобильных устройств. Теория и практика.

  • распаковать и запаковать образы Boot/Recovery с учетом секций second и dtb (дерево устройств);
  • производить сжатие/распаковку при помощи gzip, lzma, xz ;
  • распаковать и запаковать образы, содержащие файловые системы как jaffs типа, так и ext2-ext4;
  • провести конвертацию из sparse в ext4;
  • перед обработкой выбрать файл без его переименования.
  • распаковать и запаковать образы Boot/Recovery с учетом секций second;
  • производить сжатие/распаковку при помощи gzip, lzma, lz4, lzop, xz ;
  • распаковать и запаковать образы, содержащие файловые системы как jaffs типа, так и ext2-ext4;
  • провести конвертацию из sparse в ext4;
  • перед обработкой выбрать файл без его переименования.

Прикрепленный файл

Свежая версия для Win 7 MTwinTools_v0.7.7z ( 3.43 МБ )

Прикрепленный файл

Свежая версия для ХР ( благодаря пользователю ANT__)MTwinTools_v0.6.1_winxp.rar ( 4.16 МБ )

Предыдущие версии

  • Windows 7 и выше;
  • установка пакета .NET 4.0
  • разобрать/собрать прошивку *.qsb;
  • собрать "кусочные" файлы (типа system_0.img, cache_8.img) в целый;
  • разобрать/собрать boot/recovery. Поддерживаются образы x64, сжатые следующими архиваторами:
    - gzip;
    - lz4;
    - lzma;
    - lzop;
    - xz;
  • посмотреть разметку прошивки.

Прикрепленный файл

Инструкция пользователя (такая же имеется и в архиве со средством):Readme_LenovoWinTools_v1.2.7z ( 5.24 КБ )

  • распаковать и запаковать образы Boot.img и Recovery.img типа "multi-file", "ramdisk", "script", "kernel";
  • распаковать и запаковать образ System.img типов yaffs, yaffs2, ext2-ext4;
  • конвертировать образ System.img типа sparse в ext4 (аналог simg2img);
  • добавить к файлам контрольную сумму в формате md5.

Прикрепленный файл

Приложение для разборки прошивки типа .APP
AppImageMaker.rar ( 6.57 КБ )

Для запуска используется командная строка вида:

sourceFile - полный путь и название файла прошивки. Например, d:\app\SR_APP_Update.app
destPath - полный путь к папке назначения, в которую будет произведена распаковка прошивки, например, f:\qwerty
key - ключ для получения дополнительной информации. Он может быть следующим:
/h, /?, --help - выводит справочную информацию о приложении.
Если никакой ключ не введен, то производится распаковка файла прошивки. Для этого должны быть введены имя с полным путем к файлу и путь к папке назначения. При отсутствии эта папка создается сама, а при наличии в нее перезаписываются имеющиеся там файлы.
Например, если команду ввести следующим образом:

AppImageMaker d:\app\SR_APP_Update.app f:\qwerty

то файл SR_APP_Update.app из папки d:\app будет распакован в папку f:\qwerty.
Если не введен путь к конечной папке (папке назначения), то она создается в той же папке, где находится приложение AppImageMaker, с именем "update" по-умолчанию. Например, строка вида:

AppImageMaker d:\app\SR_APP_Update.app

распакует указанный файл в папку с именем update, созданную рядом с приложением AppImageMaker.
Если не указать также путь и имя файла прошивки, то по-умолчанию для прошивки будет использоваться имя "Update.app". Например, если ввести строку вида:

AppImageMaker

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

Прикрепленный файл

Приложение для разборки прошивок вида BIN, DZ, KDZ - LGwinTools_v1.03.7z ( 93.78 КБ )

  • /if:in_name (-if:) - имя файла прошивки для разборки, обязательный параметр;
  • /ip:in_path (-ip:) - имя папки с файлами прошивки для сборки, обязательный параметр;
  • /op:out_path (-op:) - папка выгрузки файлов при разборке или прошивки при сборке, обязательный параметр;
  • /di:pack (-di:) - режим работы. При pack - сборка прошивки, при отсутствии ключа разборка (по-умолчанию).
  • /h (-h, --help) - вызов справки.
1. Что делать, если я первый раз запускаю средство? Инструкция новичка
2.

У средства появились последователи, которые выпускают "модифицированные" под свои нужды варианты: And_pda

Программа распаковки образов ext2-ext4. Автор: And_pda

Распаковывает все (и симлинки тоже). Консольный вариант.
Об ImgExtractor
ImgExtractor_V1_1.rar ( 175.56 КБ )
Ext4Extractor_V1_5_2.rar ( 174.8 КБ )

Инструкция для пользователя Ext4Extractor
Ext4Extractor_V1_5.rar ( 174.81 КБ )
Ext4Extractor_v1_3.rar ( 174.65 КБ )

Примечание. Так как тема посвящена средствам, работающим исключительно под Windows, все посты, рекламирующие обработку Linux-средствами, будут безжалостно удаляться как несоответствующие основной теме и мешающие работе. Это не означает что я противник Linux, но для него существует море других тем.

Полезная вещь - обратная связь! Причем не только в технике.
После общения с некоторыми пользователями средства RKwinTools я решил выложить инструкцию по прописыванию пути к папке в переменных среды Windows.

Инструкция по добавлению пути в переменные среды Windows

ВНИМАНИЕ. Внесенные изменения начнут действовать без перезагрузки компьютера при следующем вызове командной строки или запуске файлового менеджера.

Итак,
Операционная система Windows XP x86.
На рабочем столе выбираем ярлык «Мой компьютер», кликнув на нем правой кнопкой мыши, вызываем контекстное меню и выбираем в нем команду «Свойства». Откроется окно «Свойства системы».
Выбираем вкладку «Дополнительно».
Внизу слева нажимаем кнопку «Переменные среды». Откроется окно "Переменные среды".
В области «Системные переменные» находим переменную «Path» и, выделив ее, нажимаем на кнопку «Изменить».
В поле «Значение переменной:» в конце дописываем путь к необходимой папке, отделяя его от существующего значения «точкой с запятой». Например, «;D:\Cygwin».
Нажимаем «ОК» для записи пути и последовательно закрываем все открытые окна.

Операционная система Windows 7 x86.
Вариант 1.
По пути "Пуск"->"Компьютер", нажимаем правую кнопку мыши для выбора контекстного меню и выполняем команду "Свойства".
В открывшемся окне "Просмотр основных сведений о Вашем компьютере" выбираем слева пункт меню "Дополнительные параметры системы".
В открывшемся окне"Свойства системы" справа внизу нажимаем кнопку "Переменные среды".
В окне"Переменные среды" в области "Системные переменные" нужно найти и выделить переменную "Path", а затем нажать кнопку "Изменить. ".
В появившемся окне «Изменение системной переменной», в поле "Значение переменной" ДОПИСЫВАЕМ В КОНЕЦ путь к только что установленной папке Cygwin, например такой: ";Е:\Cygwin", ОБЯЗАТЕЛЬНО отделив его от существующего значения «точкой с запятой», и нажимаем кнопку "ОК" для сохранения значения.
Последовательно закрываем все остальные открытые окна, тоже нажимая кнопку "ОК", кроме окна просмотра основных сведений, которое закрывается "крестиком".
Вариант 2.
В любом свободном месте рабочего стола нажимаем правую кнопку мыши для вызова контекстного меню и выбираем команду «Персонализация». В открывшемся окне слева выбираем пункт меню «Панель управления - домашняя страница».
Откроется окно "Панель управления" для проведения настроек параметров Вашего компьютера.
В нем необходимо выбрать настройку «Система» и Вы попадете в окно просмотра основных свойств о Вашем компьютере, т.е. "Окно сведений о системе".
Дальнейшие действия описаны в пункте «Вариант 1».

P.S. Каждому ПО требуются средства отладки.
В моем случае тишина (не ошибки, не вывода в лог), - а в ответ тишина.
Просьба подумайте над этим вопросом.

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

В ныне существующем готовом виде отвечу - НЕТ. не сможет.
А вообще - ничего невозможного нет.



Toyota распространяет свои прошивки в недокументированном формате. Мой заказчик, у которого автомобиль этой марки, показал мне файл прошивки, который начинается так:

CALIBRATIONêXi º
attach.att
ÓÏ[Format]
Version=4

[CPU01]
CPUImageName=3F0S7300.xxz
FlashCodeName=
NewCID=3F0S7300
LocationID=0002000100070720
CPUType=87
NumberOfTargets=3
01_TargetCalibration=3F0S7200
01_TargetData=3531464734383B3A
02_TargetCalibration=3F0S7100
02_TargetData=3747354537494A39
03_TargetCalibration=3F0S7000
03_TargetData=3732463737463B4A

3F0S7300forIMV.txt ¸Ni¶m5A56001000820EE13FE2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133E2030133E2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133E2030133E2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133E20911381959FAB0EE9000
81C9E03ADE35CEEEEFC5CF8DE9AC0910
38C2E031DE35CEEEEFC8CF87E95C0920
.
Дальше идут строки по 32 шестнадцатеричные цифры.

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

Конкретно для этой прошивки у него имелся дамп содержимого:


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

Повторяющиеся фрагменты

Посмотрим внимательно на те шестнадцатеричные строчки:

5A56001000820EE13FE2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133E2030133E2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133E2030133E2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133E20911381959FAB0EE9000
81C9E03ADE35CEEEEFC5CF8DE9AC0910
38C2E031DE35CEEEEFC8CF87E95C0920
.

Видим восемь повторений последовательности из трехкратного E2030133 , которые весьма напоминают восемь первых строчек дампа, заканчивающиеся на 12 нулевых байт. Сразу же можно сделать три вывода:

  1. Пять первых байт 5A56001000 — это некий заголовок, не влияющий на содержимое дампа;
  2. Дальнейшее содержимое зашифровано блоками по 4 байта, причем одинаковым байтам дампа соответствуют одинаковые байты в файле:
    • E2030133 → 00000000
    • 820EE13F → 80078000
    • C20EF13F → 80070000
    • E2091138 → E0076001
    • 1959FAB0 → 2A0600FF
    • EE900081 → 00000A58
    • C9E03ADE → EAFF2000
  3. Видно, что это не XOR-шифрование, а нечто более сложное; но при этом похожим блокам дампа соответствуют похожие блоки в файле — например, изменению одного бита 80078000→80070000 соответствует изменение одного бита 820EE13F→C20EF13F .

Соответствия между блоками

Получим список всех пар (блок файла, блок дампа), и поищем в нем закономерности:


Вот как выглядят первые пары в отсортированном списке:


Действительно, видны закономерности:

Для проверки — «отрежем» старшие 4 бита в каждом полублоке, и посмотрим, какие пары получатся:


После перестановки подблоков по 4 бита в ключе сортировки, соответствия между парами подблоков становятся еще более явными:

Соответствия между подблоками

В вышеприведенном списке видны такие соответствия:

  • Для маски 0F000F00 :
    • x0xxx0xx в дампе → x2xxx1xx в файле
    • x0xxx4xx в дампе → x2xxx0xx в файле
    • xCxxx0xx в дампе → x0xxx5xx в файле
    • xx0xxx0x в дампе → xx0xxx3x в файле
    • xx0xxx5x в дампе → xx9xxx8x в файле
    • xx0xxx9x в дампе → xxAxxxBx в файле
    • xxFxxx0x в дампе → xxExxxDx в файле
    • xxFxxxFx в дампе → xx8xxxDx в файле
    • xxx0xxx7 в дампе → xxxFxxxF в файле
    • xxx7xxx0 в дампе → xxxExxxF в файле
    • xxx7xxx1 в дампе → xxx9xxx8 в файле


    Когда таблицы соответствия готовы, код расшифровки получается совсем простой:

    Заголовок прошивки

    В самом начале перед зашифрованными данными был пятибайтный заголовок 5A56001000 . Первые два байта — сигнатура 'ZV' — подсказывают, что используется формат LZF; дальше обозначены метод сжатия ( 0x00 — без сжатия) и длина ( 0x1000 байт).

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

    Этичный хакинг и тестирование на проникновение, информационная безопасность

    Файлы контейнеры (матрёшки)

    Многие файлы представляют собой объединения нескольких файлов. К примеру, файлы офисных документов .docx и .odt. Вы можете заменить расширение таких файлов на .zip, открыть любым архиватором и убедиться, что на самом деле это просто контейнеры, содержащие в себе множество файлов. Например, если вы вставили картинку в документ Word, то чтобы извлечь эту картинку, необязательно открывать файл в офисном редакторе — можно поменять расширение, распаковать архив и из него забрать свою картинку обратно. Практически все прошивки (для роутеров, IP камер, телефонов) это контейнеры. ISO образы и образы файловых систем тоже контейнеры. Архивы, как можно догадаться, также содержат в себе сразу несколько файлов.

    2 способа объединения файлов

    С практической точки зрения, с точки зрения поиска файлов можно выделить 2 способа объединить файлы:

    1. Файлы хранятся без изменения, в своём начальном виде.

    Пример такого объединения файлов это файловые системы без шифрования и без сжатия. Например, EXT4, NTFS — в них файлы помещены в своём первоначальном виде. Соответственно, образы таких файловых систем также относятся к этой группе. Сюда же можно отнести некоторые прошивки, например, для роутеров и IP камер.

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

    2. Файлы обрабатываются по определённому алгоритму.

    Примеры такого способа объединения файлов это файловые системы с шифрованием или сжатием (например, Squashfs), архивы со сжатием.

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

    С практической точки зрения это означает, что бесполезно искать файлы по сигнатурам в архивах, пока эти архивы не распакованы (НО: некоторые программы по анализу сырых данных поддерживают работу с архивами!). Бесполезно искать файлы по сигнатурам в файловой системе Squashfs до её монтирования. При этом можно применять поиск по сигнатурам в EXT4 и NTFS и их монтирование не требуется!

    Монтирование, например, образа NTFS даст нам следующее: мы сможем получать доступ к файлам этой файловой системы тем способом, каким это предусмотрели разработчики, то есть мы увидим список файлов и сможем получить доступ к любому из них без необходимости искать файлы по сигнатурам. Но при этом мы не сможем получить или даже узнать об уже удалённых файлах.

    Без монтирования образа NTFS мы сможем работать с хранящимися на нём файлами напрямую, то есть с одной стороны нам придётся искать файлы по сигнатурам, но с другой стороны мы получим доступ даже к удалённым файлам. Удалённые файлы доступны в результате того, что обычно удаление на HDD заключается в том, что информация о файле просто удаляется из «журнала» файловой системы, но сам файл остаётся там же, где и был (если его впоследствии случайно не перезаписали другим файлом). Что касается с SSD, то там обычно данные всё-таки удаляются.

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

    Как распаковать прошивку камеры

    Рассмотрим пример распаковки прошивки камеры Network Surveillance DVR r80x20-pq (эту камеру я использовал в тестах, например, в статье «Аудит безопасности IP камер».

    Скачиваем и распаковываем архив. Он называется General_IPC_XM530_R80X20-PQ_WIFIXM711.711.Nat.dss.OnvifS_V5.00.R02.20210818_all.bin, для краткости последующих команд я переименую его в firmware.bin.

    Проверим, что это за файл:

    То есть это Zip архив.

    Проверим с помощью Detect It Easy:

    Также воспользуемся утилитой Binwalk, которая специально предназначена для анализа прошивок:


    Поскольку это просто архив, распакуем его:


    Видимо, следующие образы являются составными частями файловой системы:

    Поинтересуемся файлом user-x.cramfs.img:


    U-Boot — это загрузчик для встроенных плат на базе PowerPC, ARM, MIPS и нескольких других процессоров, который можно установить в загрузочное ПЗУ и использовать для инициализации и тестирования оборудования или для загрузки и запуска кода приложения. В вашем Linux вы можете найти пакеты uboot-tools (Arch Linux и производные) и u-boot-tools (Debian и производные) — это инструменты и утилиты для сборки прошивок и выполнения с ними других действий.

    Попробуем смонтировать образ user-x.cramfs.img:


    Обратимся за помощью к утилите Binwalk, которая умеет находить файлы и файловые системы даже если они находятся не в начале:


    Теперь всё стало ясно — данный образ состоит из двух разделов. Первые 64 байта занимает заголовок uImage. А сама файловая система Squashfs идёт начиная с 64 байта.

    Мы можем извлечь файловую систему — как это сделать сразу несколькими способами будет показано ниже, — но также по-прежнему можем её просто смонтировать, указав смещение:

    Посмотрим на файлы, размещённые в образе user-x.cramfs.img:


    В этом образе я не нашёл ничего интересного, размонтируем его:

    Посмотрим, где начинается файловая система в romfs-x.cramfs.img:

    Здесь можно найти хеш дефолтного пользователя root:


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

    Как вырезать файловую систему из образа

    1. Монтировать без извлечения

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

    Если образ содержит несколько файловых систем, вам может понадобиться указать ещё и опцию sizelimit — размер файловой системы:

    2. Извлечение с помощью dd

    Найдём разделы в прошивке:


    Всего имеется три области:

    • с 0 по 64 байты — заголовок uImage.
    • с 64 начинаются сжатые данные LZMA
    • С 1376256 начинается файловая система Squashfs, её размер 6205991 байт, это следует из строки «size: 6205991 bytes».

    Для извлечения каждого из этих разделов можно использовать команду вида:

    • ВХОД — начальный образ
    • ВЫХОД — извлекаемый раздел
    • БЛОК — размер блока, больший размер блока ускоряет запись, но последующие значения ЗАПИСАТЬ и ПРОПУСТИТЬ указывают на количество блоков, то есть если размер блока взять за единицу, то будет проще считать
    • ЗАПИСАТЬ — сколько блоков записать
    • ПРОПУСТИТЬ — сколько блоков от начала файла пропустить

    К примеру, из файла Keenetic-II-V2.06(AAFG.0)C3.bin я хочу извлечь первые 64 байт, тогда команда следующая:

    Теперь я хочу извлечь второй раздел, начинающийся с 64 байта. Этот раздел заканчивается на байте 1376256, но опция count команды dd указывает сколько байт нужно прочитать (а не границу извлечения данных), поэтому значение count рассчитывается по формуле:

    В нашем случае это 1376256 - 64 = 1376192, получаем команду:

    Файл LZMA можно распаковать, например, с помощью 7z:

    В принципе команда извлекла данные, хотя и сообщила об ошибке:

    Суть ошибки в том, что после конца полезной нагрузки были обнаружены данные. Можно сказать, что это нормально (неизбежно) в данном случае, поскольку мы не знали точный размер блока и указали в качестве его конца байт, где начинается другой раздел. Другой раздел начинается с байта (в шестнадцатеричном виде) 0x150000, поэтому можно предположить, что для паддинга (padding, выравнивания) между разделами просто «набиты» нули. В этом можно убедиться, открыв файл data.lzma в шестнадцатеричном редакторе, например в Bless:


    Да, в конце этого файла нули — если точный размер неизвестен, то лучше записать лишнего, чем потерять данные.

    Третий блок начинается с 1376256 байта и имеет размер 6205991 об этом нам говорит строка «size: 6205991 bytes». Команда по его извлечению следующая:

    Но производители прошивки всё равно меня перехитрили использовав Squashfs version 3.0 из 2006 года и я не смог её открыть по техническим причинам:


    3. Извлечение с помощью Binwalk

    У программы Binwalk имеются следующие опции для извлечения:

    4. Извлечение с помощью dc3dd и dcfldd

    У программы dd есть улучшенные версии dc3dd и dcfldd. При желании для извлечения разделов файловой системы из образа диска вы можете использовать их.

    Поиск последовательности байтов в бинарном файле

    Программы file, Binwalk и Detect It Easy в поиске данных используют сигнатуры. Эти сигнатуры предопределены в их базах данных (так называемые магические файлы).

    Если вам нужно выполнить поиск по вашим собственным сигнатурам, то есть по строке бинарных данных, то вы можете использовать Binwalk со следующими опциями:

    Например, поиск шестнадцатеричных байтов 53EF в файле /mnt/disk_d/fs.ext4:

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

    В следующем примере ищется последовательность байтов 53EF (обратный порядок записи байтов) со смещением 56 от любого блока (если не указать смещение, то будут выведены только блоки, где данная последовательность байтов имеет смещение 0):

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