Разархивирайте img файла с фърмуера. Разопаковане, редактиране и пакетиране на фърмуер за DVR и IP камери от Xiong Mai. Разглобяване на системно изображение ext4

Мега помощна програма Android IMG Repack Tools за всички начинаещи и напреднали ромодели, разработчици, за редактиране на изображения на Android.

Android IMG Repack Tools какво е това и защо?

Помощна програма Android IMG Repack Tools от потребител с псевдоним A.S._id(xda, w3bsit3-dns.com), предназначен за редактиране на изображения на Android:

  • разархивирайте изображение на android (img, ext4)
  • редактиране на файлове (ръчно)
  • сглобете изображение

Както и работа с ядра (boot.img) и възстановяване (recovery). Помощната програма е проектирана да работи както под Linux, така и под Windows (трябва да инсталирате Cygwin).

Android IMG Repack Tools ще бъде полезен на абсолютно всички ромодели на Android за създаване на нов персонализиран фърмуер, както и на разработчиците на софтуер.

Къде да намеря и изтеглите Android IMG Repack Tools?

Можете също да изтеглите най-новата версия на помощната програма Android IMG Repack Tools от официалната страница на проекта на XDA.

Инсталиране на Android IMG Repack Tools на компютър

Тъй като операционната система Android е базирана на ядрото на Linux, тя все още ще работи правилно с помощната програма Android IMG Repack Tools от базирана на Linux операционна система.

Предварителна настройка на ОС за Android IMG Repack Tools

Ако имате Ubuntu версия 14.04 и по-стара (и Mint базиран на нея), тогава ще трябва да инсталирате GCC 5 от хранилището (отворете терминал и въведете следните команди):

sudo add-apt-repository ppa:ubuntu-toolchain-r/test

sudo apt-получи актуализация

sudo apt-get install gcc-5 g++-5

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 60 --slave /usr/bin/g++ g++ /usr/bin/g++-5

За потребители на Ubuntu 16.04 (и Mint, базиран на него), първо трябва да инсталирате:

1. GNU Automake 1.14 (изтеглете и извлечете)

2. Отидете в папката с Gnu Automake, отворете терминал и изпълнете следните команди една по една: ./configure make sudo make install

3. Инсталирайте пакети: sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind libreadline6-dev gcc-multilib g++-multilib x11c6 -dev libx11-dev libz-dev gawk texinfo automake libtool cvs libsdl-dev

Настройка на Android IMG Repack Tools

1. След като изтеглите Android IMG Repack Tools, разопаковате, отидете на отворен терминал

2. Въведете команда за стартиране на помощната програма./main_menu

Ако имате инсталиран Mint, щракнете върху файла main_menu

3. Отидете в раздела за помощни програми " 0 - Конфигуриране и почистване на менюто с инструменти»

4. Изберете " 1 - Изградете android_img_repack_tools", за да изтеглите и конфигурирате инструментите, които работят с изображения на Android.

Работа с помощната програма Android IMG Repack Tools

Очаквайте актуализация на статията с инструкции за използване на помощната програма в близко бъдеще!

Ако искате да опитате ръката си в създаването, редактирането на фърмуер на Android, тогава програмата Samsung Root Firmware Replacer ще ви помогне да създадете фърмуер!

Накратко за програмата Samsung Root Firmware Replacer и нейните възможности

С тази програма ще можете да:

  • Разопаковайте фърмуера на Samsung
  • Персонализирайте фърмуера
  • Автоматично вграждане на Root права
  • Автоматично попълнете фърмуера с вашите файлове
  • Замразете проект и след това продължете да работите по него
  • Пакет фърмуер

Предпоставки и предпоставки за Samsung Root Firmware Replacer

Преглед и описание на функциите на Samsung Root Firmware Replacer стартира програма

1. Отидете в папката с програмата Samsung Root Firmware Replacer, щракнете с десния бутон, за да отворите в терминала

2. В терминала въведете командата

3. Пред вас ще се отвори интерфейсът на програмата

4. Ако сте стартирали програмата за първи път, след това стартирайте - Конфигурация на настройките

Работа със Samsung Root Firmware Replacer

Параграф Разопаковайте фърмуера *.tar.md5- разопакова фърмуера, за да направите това, преместете файла в папката unpack_tar_md5, след което всички файлове ще бъдат извлечени, а factoryfs или системният файл ще бъдат преместени във input_img

параграф Създайте *.img от вашия Android (изисква Android)- ви позволява да създавате фърмуер от текущото си състояние на Android. За да работи този елемент, трябва да имате свързан Android към компютър с активиран USB отстраняване на грешки.

Този елемент има подменю

Параграф Създаване на *.img от оригиналния фърмуерви позволява да промените готовия фърмуер, за това прехвърлете всеки IMG файл в папката input_img.

Този елемент също има собствено подменю

Пример за използване на Samsung Root Firmware Replacer

В този пример фърмуерът се създава от текущото състояние на Android

1. Свържете Android към компютър

2. Стартирайте програмата

3. Изберете Създаване *.img от вашия Android (изисква Android)

4. Изберете Изображение от Android и извлечете img

5. Избиране на дяла, от който ще бъде взето изображението

6. Изчакайте 6-7 минути, докато изображението бъде заснето и прехвърлено на компютъра.

Важно! На смартфон или таблет, както и на компютър, трябва да има достатъчно памет за заснемане на изображението. Размерът на изображението може да бъде от 2MB до 2GB

7. След като сте направили изображението, можете да го промените, ако е необходимо (вградите Root), можете да го опаковате обратно, за това

8. Изберете елемента Pack project в img

9. Посочете размера и името на фърмуера.

  • Задайте размера на дяла по този начин, разделете размера на блока на 1024 и добавете буквата M към резултата.

  • Името трябва да съвпада с името, което сте използвали за промяна

11. Също така, не забравяйте да копирате ядрото от вашия Android, за това използвайте елемента - Вземете изображение от Android - boot.img или zImage

12. След всички манипулации трябва да сглобите фърмуера в TAR.MD5

13 В главното меню изберете Pack Firmware *.tar.md5

14 Фърмуерът в Samsung Root Firmware Replacer е готов, можете

Всички фърмуери за таблети на процесора Allwinner имат същия формат img (IMAGEWTY).

След дълго търсене най-накрая намерих програма, която ви позволява да разглобявате и сглобявате фърмуера за таблети, базирани на Allwinner. Нарича се разопаковач.

Нека продължим директно към разглобяването на файла на фърмуера.

Разбор на IMG файла

За демонтаж ще ви трябва:

  • Файл на фърмуера
  • unPacker програма, която може да бъде изтеглена (за Allwinner a31s, можете да използвате imgRePacker)

Изтеглете архива и го разопаковайте. Стартирайте unPacker.exe

Плъзваме нашия файл в този прозорец и чакаме разопаковането.

След като разопаковането приключи, ще се появи нова папка, наречена "firmware.img.dump"

В изходната папка има файл system.fex - това е файл със системни файлове (системна папка). Той е това, от което се нуждаем.

Редактиране на файла system.fex

За да редактирате този файл, имате нужда от система nix и помощна програма за преобразуване, която може да бъде изтеглена

Създаваме папка в домашната директория, в която ще редактираме нашия фърмуер. Да го наречем НОВ например. Сега разопаковайте файловете от архива ext4_utils.zip в папката НОВА. Стартирайте терминала и напишете

Програмата ще се компилира и ще имаме инструмент за редактиране на Sim2img. Сега поставяме нашия файл system.fex в папката NEW и го преименуваме на sytsem.img

Влезте в терминала

./simg2img system.img output.img

Сега имаме файл output.img. Сега създайте папка, например, наречена sys

И монтирайте нашия изходен файл там

sudo монтиране output.img sys

Папката sys вече съдържа файлове, които могат да бъдат редактирани. Например, можете да направите промени във файла build.prop, които ще подобрят производителността на системата.

След редактиране започваме сглобяването

./mkuserimg.sh -s sys/ ./factoryfs_custom.img ext4 ./temp 512M

Преименувайте получения файл factoryfs_custom на system.fex.iso

забележка: можете да редактирате други файлове с изображения по същия начин (зареждане и зареждане)

Сглобяване

Сега, за да съберете редактираните файлове в необходимия за фърмуера формат, трябва да поставите файла system.fex.iso със замяна в папката _iso (на Windows) и плъзнете папката

Нека започнем с факта, че имате нужда от Linux. В Windows можете само да разглобите фърмуера, но не можете да го сглобите отново по чисто технически причини. Сега за фърмуера. Обикновено те се разпространяват като ZIP архиви, прехвърлени чрез персонализирано възстановяване. Той е един от тях, който ще ни е необходим за експерименти. Препоръчвам да започнете пътя на ромоделиране с някакъв персонализиран фърмуер, възможно най-близък до AOSP, защото често е по-лесно да го разберете, отколкото на склад.

  1. Разопаковайте архива с фърмуера във всяка папка.
  2. Изтеглете скрипта от връзката и го разархивирайте във всяка папка.
  3. Стартирайте ext файла (ако се оплаква от липсата на Java, просто го пропуснете, като натиснете y ; Java е необходима само за опаковане).
  4. Сега изберете разопаковане, като натиснете бутон 1 и след това Enter.
  5. Нова папка с име extract_* ще се появи до ext файла и папката с инструменти. Копирайте файловете system.new.dat и system.transfer.list в него.
  6. След като копирате файловете, натиснете Enter и изчакайте. След известно време ще трябва да натиснете Enter отново, да въведете паролата на администратор и да натиснете Enter отново.
  7. Готов. Съдържанието на системата в папката extract_*/output.

Ръчен начин

Разопаковайте архива с фърмуера във всяка папка (например в rom):

$ mkdir ~/rom $ разархивирайте път_до_архив -d ~/rom/

Изтеглете инструментите, от които се нуждаем, в тази папка:

$ cd ~/rom $ wget https://github.com/xpirt/sdat2img/raw/master/sdat2img.py

Нека стартираме скрипта:

$ chmod +x sdat2img.py $ ./sdat2img.py system.transfer.list system.new.dat system.img

Той преобразува файла system.new.dat в необработено изображение с име system.img. Монтирайте изображението в подпапката mnt:

$ mkdir mnt $ sudo mount -t ext4 -o цикъл system.img ~/rom/mnt

Структура на директории на Android

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

  • ап- предварително инсталирани приложения със стандартни привилегии;
  • priv-app- предварително инсталирани приложения с повишени привилегии, включително някои системни компоненти;
  • кошче- двоични файлове във формат ELF, подобни на директориите /bin и /usr/bin в Linux. Съдържа различни системни компоненти, използвани от системни компоненти от по-високо ниво;
  • и т.н- файлове с настройки. Пълен аналог на /etc в Linux, използван обаче само от тези системни компоненти. Приложенията за Android съхраняват индивидуални настройки в директориите /data/data/;
  • шрифтове- шрифтове. По подразбиране съдържа само шрифтове с марка Roboto;
  • рамка- библиотеки на Java класове, използвани от системата и приложенията. Има и файл framework-res.apk, съдържащ пълно описание на интерфейса на операционната система, включително всички графични файлове;
  • libи lib64- Linux библиотеки, използвани от системни компоненти на ниско ниво. Подобно на директориите /lib и /usr/lib в Linux, включително такива стандартни библиотеки като libc, libz, libssl. Устройствата с архитектура ARMv7 и по-ниски няма да имат директория lib64;
  • медии- медийни файлове: мелодии, звуци за известия, звуци на интерфейса и анимация при зареждане на ОС;
  • tts- файлове, необходими на синтезатора на реч;
  • usr- директория, която обикновено съдържа файловете, необходими за стартиране на приложения от директорията bin. По същество, аналог на /usr/share ;
  • продавач- файлове, предоставени от производителя на устройството. Обикновено съдържа двоичен фърмуер за различни хардуерни компоненти, като Wi-Fi модул;
  • xbin- указател по избор; персонализиран фърмуер го използва за съхраняване на неща като bash интерпретатора, SSH, PowerTOP, BusyBox и други полезни инструменти;
  • build.prop- файл, съдържащ информация за монтажа, както и различни настройки на ниско ниво;
  • addon.d- съдържа скриптове, които се изпълняват след инсталиране на фърмуера. GApps също предписват свой собствен скрипт тук, благодарение на който се прераждат след преинсталиране на фърмуера.

След като вече сме запознати с основната структура на Android, нека започнем да правим промени.

Премахване и добавяне на приложения

Всички предварително инсталирани програми могат да бъдат намерени в две папки:

  • /система/приложение/;
  • /система/priv-app/.

Те се различават един от друг по правата за достъп. Ако програмите от приложението имат същите разрешения като програмите на трети страни (например тези, инсталирани от Play Store), тогава приложенията от priv-app могат да използват привилегировани API (привилегировани права). Можете да научите повече за това от.

За да инсталирате предварително приложението във фърмуера, просто хвърлете неговия APK файл в /system/app/. Можете, разбира се, да създадете отделна папка, но в нашия случай това няма смисъл, тъй като папката се използва за съхранение на библиотеки и odex файлове, които просто нямаме. За да изтриете, просто изтрийте папката с него.

Можете да отидете по-далеч и да промените стандартните приложения за аналози. Например, за да замените календара, изтрийте папката Календари копирайте любимия ни com.rpagyc.simplecalendar.apk в /system/app. И не можете да копирате. Тогава фърмуерът ще бъде без календар.

Основното нещо, което трябва да запомните, е, че фондовите програми могат да бъдат свързани. Следователно премахването на една програма може да доведе до пълна неработоспособност на друга (например CalendarProvider и Calendar: като изтриете първата, вие ще направите неработещ не само основния календар, но и всеки друг календар). За щастие, няма толкова много връзки в чист фърмуер на AOSP.

Промяна на анимацията за зареждане

Анимациите се съхраняват като PNG изображения, пакетирани в /system/media/bootanimation.zip архива без компресия. Вътре в архива са:

  • desc.txt- файл, описващ анимацията;
  • част 0- папка с анимационни файлове, които се възпроизвеждат първи;
  • част 1- папка с анимационни файлове, които се възпроизвеждат втори;
  • част?- папка extreme, изображения от която се възпроизвеждат в края.

Файлът desc.txt може да съдържа нещо подобно

1920 1080 60 p 1 0 част 0 p 0 0 част1

Предназначението на тези линии е интуитивно: 1920 × 1080 е разделителната способност на изображението, 60 е броят на кадрите в секунда. Part0 и part1 сочат към папките, от които ще се възпроизвежда анимацията и последователността на възпроизвеждане. По принцип може да има една част или няколко (три или повече).

Изображенията в папките на частите са номерирани с пет числа в реда на възпроизвеждане: 00000.png , 00001.png , 00002.png ... Тези изображения могат да бъдат променени на ваши собствени, като по този начин се създава оригинална анимация. Или можете просто да изтриете файла bootanimation.zip. След това устройството ще покаже анимация от стандартен Android. Или използвайте готова колекция от анимации на w3bsit3-dns.com.

Промяна на звуковия дизайн

Всъщност всички звуци, които възпроизвежда системата, се съхраняват в папката /system/media/audio. В него ще намерите следните папки:

  • аларми- мелодии за аларма;
  • известия- звуци за уведомяване;
  • мелодии- мелодии;
  • ui- системни звуци, като изтощена батерия, фокус на камерата, избор на интерфейсни елементи.

В аларми, известия, мелодии можете да добавите толкова мелодии, колкото искате. Можете да ги вземете например тук:

  • стандартни мелодии от различни телефони и смартфони Nokia;

И малко лайфхак: изтриването на файлове от папката на потребителския интерфейс няма да доведе до сривове и грешки, а до изчезване на системните звуци. Следователно можете лесно да изключите звука при правене на снимка от камерата, правене на екранна снимка, просто като изтриете файловете, съдържащи тези звуци (имената им са интуитивни).

Добавяне на шрифтове

Шрифтовете се съхраняват в шрифтове. Можете да намерите архиви с файлове с шрифтове на w3bsit3-dns.com и XDA. За да инсталирате, просто копирайте и заменете ttf файловете от архива в папката с шрифтове.

Промяна на системните настройки (build.prop)

В изображението на системата има интересен файл build.prop, който съдържа много полезна информация за хардуера на устройството и настройките по подразбиране за различни стандартни приложения. Честно казано, отбелязвам, че това не винаги е така. Например в Gigaset ME и ME Pro build.prop е разделен на две части. Едната част съдържа настройките за Gigaset ME, а за ME Pro някои редове са дублирани, но клавишите (име на смартфон и т.н.) са различни. Това беше направено, за да се осигури повече или по-малко правилна работа на един и същ фърмуер на различни устройства.


Build.prop съдържа (или може да съдържа) огромен брой настройки. Някои от тях не променят нищо, някои подобряват едното за сметка на другото, но има такива, които са наистина полезни:

  • ro.product.modelи ro.продукт.производител- модел смартфон и име на производителя. Като замените тези редове, можете да накарате Play Store да мисли, че имате различен смартфон, което ще отвори достъп до повече софтуер. За всички малко известни китайски смартфони тези линии могат да бъдат спасителни;
  • hw.qemu.mainkeys- приема само две стойности: 0 - показване на клавишите за навигация на екрана, 1 - не показване на бутони. Липсата на низ съответства на 0;
  • debug.sf.nobootanimation- стойност 1 деактивира анимацията за зареждане, което леко увеличава нейната скорост. Задаването му на 0 или изтриването на реда връща анимацията на нейното място;
  • ro.telephony.default_network- казва на системата в кой режим трябва да се превключи мобилната мрежа при зареждане;
  • ro.sf.lcd_density- DPI на дисплея, най-точната стойност за дисплея може да се изчисли чрез удобен сайт. Но никой не ви забранява да зададете по-голяма или по-малка стойност по ваш вкус: по-високите стойности правят елементите на интерфейса по-големи, ниските ги правят по-малки;
  • ro.config.vc_call_vol_steps- брой стъпки за сила на звука по време на разговор (по подразбиране 8);
  • ro.config.media_vol_steps- брой стъпки за сила на звука на носителя (по подразбиране 15).

Вграждане на Google Apps във фърмуера

Почти винаги персонализираните ROM се предлагат без услугите на Google и магазина за приложения. Разработчиците предлагат да ги инсталираме отделно с помощта на пакета GApps. Въпреки това, той може да бъде интегриран директно във фърмуера.

Първо трябва да изтеглите пакета GApps. Препоръчвам да вземете архивите на Open GApps. Вие избирате вашата версия на Android, архитектура на процесора и вариант на пакета (Pico, Nano, Stock…), което определя колко различни приложения на Google съдържа архивът. Препоръчвам да изтеглите версията на Pico. Той съдържа само Play Store и набор от библиотеки, необходими за неговата работа.

Интегрирането на GApps във фърмуера се извършва по следния начин:

  1. Разопаковайте ZIP архива на GApps с помощта на всеки архиватор.
  2. Отидете в папката Core.
  3. Виждаме много архиви с разширението .tar.lz. Извличайте с lzip.
  4. След разопаковането копирайте файловете от папките в съответните папки в системата. Какво да хвърля къде, лесно е да се отгатне от структурата на директориите в архива. Например, configupdater (от екранната снимка) трябва да бъде поставен в папката priv-app.
  5. Отидете в папката GApps (разположена до Core) и направете стъпки 3 и 4 за файловете в нея.
  6. Това е всичко, интегрирахме GApps в нашия фърмуер!

Свободно място

Трябва да се разбере, че мястото за инсталиране на фърмуера е ограничено. Не можете да инсталирате фърмуер, който е по-голям от системния дял на устройството. Можете да видите стойността му, като използвате:

$ adb обвивка df /system

Вторият вариант: поставете терминал на устройството и въведете командата

$ df /система

Можете да разберете размера на дяла в байтове, като инсталирате BusyBox на вашия смартфон и изпълните командата в терминала

$ busybox df -B 1 /система

Или същото с ADB:

$ adb shell busybox df -B 1 /system

Пространството, заето от фърмуера, ще бъде приблизително равно на размера на системата при разопаковане. Като цяло, когато създавате фърмуер, трябва да се има предвид, че потребителят може също да мига различни модификации върху него (SuperSU, Xposed) или да прехвърля приложения в системната секция. Например, минималният пакет на Google Apps (Pico) изисква минимум 150 MB допълнително място за инсталиране.

Ако е необходимо, размерът на файла на фърмуера може да бъде намален, като премахнете не само ненужните програми от /system/app (/system/priv-app) и звуците на повиквания от system/media/audio и bootanimation.zip, но също така:

  • /system/tts/lang_pico- езици на примитивната гласова машина Pico TTS, гласовата машина на Google няма да бъде засегната;
  • /system/usr/srec/config/- офлайн езици. Може да бъде изтеглен онлайн по-късно, ако е необходимо.

Сглобяване

След като направите промените, трябва да съберете всичко обратно. Първо, нека опаковаме системния дял в system.new.dat . Изтеглете инструментите, от които се нуждаем:

$ wget https://github.com/xpirt/img2sdat/raw/master/img2sdat.py $ wget https://github.com/xpirt/img2sdat/raw/master/blockimgdiff.py $ wget https://github. com/xpirt/img2sdat/raw/master/common.py $ wget https://github.com/xpirt/img2sdat/raw/master/rangelib.py $ wget https://github.com/xpirt/img2sdat/raw/ master/sparse_img.py $ sudo apt-get install android-tools-fsutils

Нека преобразуваме нашата папка обратно в RAW изображение. Нека го наречем system_new.img:

$ sudo make_ext4fs -T 0 -S file_contexts -l 1073741824 -a система system_new.img изход/

1073741824 промяна на размера на системния дял в байтове. Още по-добре е да го направите малко по-малък. Правим рядко изображение от RAW изображение:

$ img2simg system_new.img system_snew.img

Нека преобразуваме нашето изображение в system.transfer.list и system.new.dat , които трябва да бъдат хвърлени в архива с фърмуера, но първо ще изтрием старите файлове:

$ rm -rf system.transfer.list $ rm -rf system.new.dat $ rm -rf system.patch.dat $ chmod +x img2sdat.py $ ./img2sdat.py system_snew.img

Нека отделим файловете на фърмуера от допълнителните люспи (файлове, които изтеглихме за работа. За това е удобно да използвате архива с фърмуера). Премахнати? Сега трябва да опаковате фърмуера в ZIP архив (с всеки архиватор).

Остава да подпишем архива. Можете да направите това както на самия Android, като използвате ZipSigner , така и на компютър (ще ви е необходима инсталирана Java):

$ wget https://github.com/appium/sign/raw/master/dist/sign.jar $ java -jar file.zip

Подводни скали

Докато създавате system.new.dat, може да срещнете няколко проблема, причинени от постоянни промени в механизмите за генериране на фърмуера на Android. Горният метод трябва да работи добре за фърмуер, базиран на Android 5.1, по-новите могат да бъдат трудни, така че трябва да използвате други версии на инструментите за изграждане. За съжаление, не можем да опишем всички нюанси на монтажа, така че може да се наложи да потърсите в Google.

Инсталация

За да инсталирате персонализиран фърмуер, имате нужда от TWRP персонализирано възстановяване, което ви позволява да инсталирате неподписан или подписан фърмуер с тестов ключ (това е, което създадохме). В списанието многократно сме описвали процеса на инсталирането му, а във форумните теми, посветени на вашето устройство, обикновено има достатъчно информация, за да направите това.

TWRP

констатации

Тази статия описва само върха на огромен айсберг, наречен "модификация на фърмуера". „Сериозният“ фърмуер не само допълва ядрото и самия фърмуер със стандартни приложения с много функции (които често са откъснати от други ядра и фърмуер), организирайки или дори променяйки принципите на тяхното взаимодействие, но също така могат радикално да променят принципите на работа на ОС. Вярно е, че такъв занаят вече не е Android, а отделна ОС, дори ако услугите на Play могат да бъдат инсталирани там (между другото, такива действия, меко казано, не се насърчават от Google). Е, не забравяйте: всички черупки от производители - TouchWiz, ZenUI, HTC Sense и така нататък - са просто обикновени потребителски, максимално обвързани с хардуера на устройството и една с друга.

На 21 февруари 2014 г. в 22:39 ч

Разопаковане, редактиране и пакетиране на фърмуер за DVR и IP камери от Xiong Mai

  • Настройка на Linux

заден план

Не толкова отдавна купих IP камера на Aliexpress (чип Hi3516 платформа 53H20L) и 16-канален хибриден DVR (чип Hi3521 платформа MBD6508E). И двете са направени на чипсета HiSilicon, така че нямат проблеми със съвместимостта един с друг.
Разбира се, имаше някои грешки. Първото и най-важно беше, че WiFi на камерата работеше криво – беше невъзможно да се свърже с мрежата, ако ключът беше зададен в HEX форма, а също така имаше проблем с шлюза по подразбиране от време на време.

Фърмуерът се оказа стар, все още юни. Взех си нов фърмуер и го пробвах. Някои се оказаха бъгове, но един работеше добре.
Имаше и друг проблем - паролата по подразбиране за telnet връзка е променена. Това не издържах и започнах да търся начини да го върна обратно.
Веднага ще ви предупредя, че този метод е тестван на DVR и камери, базирани на чипове HiSilicon, но трябва да работи с друга платформа, тъй като китайците широко използват U-boot bootloader.

Разопаковане

Инструкциите за разопаковане са описани подробно в, но процесът на опаковане не е описан никъде, което ме подтикна да напиша тази публикация.
Ще го разбия стъпка по стъпка, за да не пропуснете нищо:
Сложихме Linux, аз избрах ubuntu.
Проверете типа на файла на фърмуера:
[защитен с имейл]:~/firmware# файл General_HZXM_IPC_HI3516C_53H20L_V4.02.R11.20131108_ALL.bin General_HZXM_IPC_HI3516C_53H20L_V4.02.R11.2013.bin.2 извличане на най-малко данни от Z в архив ALL.bin:
Разопаковане:
[защитен с имейл]:~/firmware# разархивирайте General_HZXM_IPC_HI3516C_53H20L_V4.02.R11.20131108_ALL.bin : custom-x.cramfs.img надуване: user-x.cramfs.img надуване: romfsfs.x.gcramg logo надуване: InstallDesc
Разглеждаме съдържанието на Install:
( "Команди" : [ "burn custom-x.cramfs.img custom", "burn romfs-x.cramfs.img romfs", "burn user-x.cramfs.img user", "burn logo-x.cramfs. img logo", "burn web-x.cramfs.img web" ], "Устройства" : [ [ "53H20L", "1.00" ] ] )
InstallDesc:
"UpgradeCommand" : [ ( "Command" : "Burn", "FileName" : "u-boot-all.bin.img" ), ( "Command" : "Burn", "FileName" : "custom-x.cramfs .img" ), ( "Команда" : "Запис", "Име на файл" : "romfs-x.cramfs.img" ), ( "Команда" : "Запис", "Име на файл" : "user-x.cramfs.img " ), ( "Команда" : "Записване", "Име на файл" : "web-x.cramfs.img" ), ( "Команда" : "Записване", "Име на файл" : "лого-x.cramfs.img" ) ], "Хардуер" : "53H20L", "Продавач" : "Общи" )
Думата u-boot-all предполага, че img файловете са изображения на U-boot bootloader, така че поставяме подходящия пакет:
[защитен с имейл]:~/firmware# apt-get install u-boot-tools
Нека видим какви файлове имахме в архива:
[защитен с имейл]:~/firmware# файл u-boot-all.bin.img u-boot-all.bin.img: u-boot наследен uImage, linux, Linux/ARM, изображение на фърмуера (gzip), 524288 байта, петък, 8 ноември 05 г. :15:49 2013, Адрес за зареждане: 0x00000000, Входна точка: 0x00080000, CRC на заглавката: 0x8A551AA8, CRC на данни: 0x8290AD90 [защитен с имейл]:~/firmware# файл romfs-x.cramfs.img romfs-x.cramfs.img: u-boot наследен uImage, linux, Linux/ARM, изображение на ядрото на ОС (gzip), 4100096 байта, петък, 8 ноември, 05:16: 04 2013, Адрес на зареждане: 0x00080000, Входна точка: 0x00580000, CRC на заглавката: 0xD16AC90F, CRC на данни: 0x54CDD868 [защитен с имейл]:~/firmware# файл user-x.cramfs.img user-x.cramfs.img: u-boot наследен uImage, linux, Linux/ARM, изображение на ядрото на ОС (gzip), 7602112 байта, петък, 8 ноември, 05:16: 02 2013, Адрес на зареждане: 0x00580000, Входна точка: 0x00CC0000, CRC на заглавката: 0x106C19AD, CRC на данни: 0x6D54ADA7 [защитен с имейл]:~/firmware# файл web-x.cramfs.img web-x.cramfs.img: u-boot наследен uImage, linux, Linux/ARM, самостоятелна програма (gzip), 1572800 байта, петък, 8 ноември 05:15:51 2013, Адрес за зареждане: 0x00CC0000, Входна точка: 0x00E40000, CRC на заглавката: 0x87611FE5, CRC за данни: 0x6BD90EBD [защитен с имейл]:~/firmware# файл custom-x.cramfs.img custom-x.cramfs.img: u-boot наследен uImage, linux, Linux/ARM, самостоятелна програма (gzip), 262080 байта, пт, 8 ноември 05:15:49 2013, Адрес на зареждане: 0x00E40000, Входна точка: 0x00E80000, CRC на заглавката: 0xF7C82692, CRC на данни: 0x5A27F74C [защитен с имейл]:~/firmware# файл logo-x.cramfs.img logo-x.cramfs.img: u-boot наследен uImage, linux, Linux/ARM, самостоятелна програма (gzip), 262080 байта, пт, 8 ноември 05:15:47 2013, Адрес на зареждане: 0x00E80000, Входна точка: 0x00EC0000, CRC на заглавката: 0x4FE4A821, CRC на данни: 0xF6671BD1
Моля, обърнете внимание на двата параметъра Load Address и Entry Point. Забравих да ги уточня при първото сглобяване, по подразбиране станаха нула, а това е адресът на буутлоудъра, който се оказа презаписан след фърмуера! Поради това прекарах допълнителен час за възстановяване - трябваше да извадя камерата от улицата, да я разглобя и да възстановя фърмуера на програмиста. (Въпреки че не напразно разглобих камерата - добавих торба силикагел към корпуса, за да премахна възможната влага от въздуха.)

Сега малко обяснение: .img изображението от този фърмуер е леко модифицирано изображение на файловата система cramfs. Тук можете да прочетете повече. За да върнете изображението към нормалното, трябва да отрежете 64 байта от заглавката.
[защитен с имейл]:~/firmware# dd bs=1 skip=64 if=logo-x.cramfs.img of=logo-x.cramfs 262080+0 записа получени 262080+0 записа изпратени копирани 262080 байта (262 kB), 0,8913 kB/s
За други файлове командите са подобни.
Да видим какво се случи:
[защитен с имейл]:~/firmware# файл logo-x.cramfs logo-x.cramfs: Linux компресирана ROM файлова система, малък размер на байт 28672 версия #2 sorted_dirs CRC 0xe29e6340, издание 0, 199 блока, 2 файла
Вече прилича на крамфс. За да работите с изображения на cramfs, инсталирайте или актуализирайте съответния пакет:
[защитен с имейл]:~/firmware# apt-get install cramfsprogs
Разопаковане на изображенията:
[защитен с имейл]:~/firmware# cramfsck -x logo logo-x.cramfs [защитен с имейл]:~/firmware# cramfsck -x потребител user.cramfs [защитен с имейл]:~/firmware# cramfsck -x romfs romfs-x.cramfs [защитен с имейл]:~/firmware# cramfsck -x web web-x.cramfs [защитен с имейл]:~/firmware# cramfsck -x custom custom-x.cramfs
Аз не създавам директории, те ще се създават автоматично.
Буутлоудърът не може да се разопакова по този начин, не е изображение на cramfs, но не е необходимо да се докосва.

Какво има вътре

Ще прегледам бързо съдържанието на всеки файл в архива на фърмуера:
  • InstallDesc - описва действията, които трябва да се предприемат с тези файлове при актуализиране на фърмуера, скрипт за инсталиране.
  • logo-x.cramfs.img - изображение във формат 800x600 с логото на производителя, което се появява при зареждане на устройството.
  • romfs-x.cramfs.img - самата операционна система linux за ARM архитектурата
  • u-boot-all.bin.img - U-boot bootloader
  • custom-x.cramfs.img - съдържа името на платформата и допълнителни настройки
  • user-x.cramfs.img - приложен софтуер, включително София - самата DVR програма
  • web-x.cramfs.img - снимки на уеб интерфейс, web.cab - плъгин за Internet Explorer с локализация, лога на производителя.
Интересуваме се от romfs-x.cramfs.img, тъй като там присъства файлът passwd, който съхранява паролата. Ето съдържанието му, желаещите могат да опитат да брутат:
root:$1$RYIwEiRA$d5iRRVQ5ZeRTrJwGjRy.B0:0:0:root:/:/bin/sh
Току-що генерирах нов хеш на сайта и го промених във файла.

Събиране обратно

След направените промени, трябва да опаковате всичко обратно:
[защитен с имейл]:~/firmware# mkcramfs romfs romfs-x.cramfs Данни от директорията: 3624 байта Всичко: 4004 килобайта Супер блок: 76 байта CRC: 28c62b9b
Помните ли, когато се фокусирах върху стойностите на адреса на зареждане и входната точка? Време е да ги запомните и да ги добавите към екипа.
Създайте U-boot изображение:
[защитен с имейл]:~/firmware# mkimage -A arm -O linux -T ramdisk -n "linux" -e 0x00580000 -a 0x00080000 -d romfs-x.cramfs romfs-x.cramfs.img Име на изображението: linux Създаден: пт. :27:38 2014 Тип изображение: ARM Linux RAMDisk Изображение (компресиран gzip) Размер на данните: 4100096 байта = 4004,00 kB = 3,91 MB Адрес на зареждане: 00080000 Входна точка: 00580000
Между другото, за да актуализирате един модул, не е необходимо да флаширате целия фърмуер, достатъчно е да поставите само този, от който се нуждаете, и да редактирате файловете Install и InstallDesc, оставяйки само необходимите редове.
Поставете получените файлове в отделна директория, нека е нова. Даваме командата:
[защитен с имейл]:~/new# zip -D -X firmware.bin * добавяне: Инсталиране (дефлирана 22%) добавяне: InstallDesc (дефлирана 30%) добавяне: romfs-x.cramfs.img (дефлирана 0%)
Всичко, фърмуерът е готов. Остава само да го прехвърлите през уеб интерфейса чрез елемента за актуализиране

Внимание

Като следвате препоръките в тази статия, правите това на свой собствен риск. Авторът не носи отговорност за вашите действия. След като сте направили грешка при модифициране на фърмуера, можете лесно да получите тухла, която може да бъде възстановена само на програмиста. Ето защо, ако не сте сигурни в действията си, не го правете.
Хареса ли ви статията? Сподели с приятели!