Dezarhivați fișierul firmware img. Dezambalarea, editarea și ambalarea firmware-ului pentru DVR-uri și camere IP de la Xiong Mai. Dezasamblarea unei imagini de sistem ext4

Mega utilitar Android IMG Repack Tools pentru toți romodelele începători și avansați, dezvoltatori, pentru editarea imaginilor Android.

Android IMG Repack Tools ce este și de ce?

Utilitarul Android IMG Repack Tools de la un utilizator cu o poreclă A.S._id(xda, w3bsit3-dns.com), conceput pentru a edita imagini Android:

  • dezarhivați imaginea Android (img, ext4)
  • editarea fișierelor (manual)
  • asambla o imagine

Precum și lucrul cu nuclee (boot.img) și recuperare (recuperare). Utilitarul este proiectat să funcționeze atât sub Linux, cât și Windows (trebuie să instalați Cygwin).

Instrumentele Android IMG Repack vor fi utile pentru absolut toate romodelele Android pentru crearea de firmware personalizat, precum și dezvoltatorilor de software.

Unde să găsiți și să descărcați Android IMG Repack Tools?

De asemenea, puteți descărca cea mai recentă versiune a utilitarului Android IMG Repack Tools de pe pagina oficială a proiectului de pe XDA.

Instalarea Android IMG Repack Tools pe computer

Deoarece sistemul de operare Android se bazează pe nucleul Linux, va funcționa în continuare corect cu utilitarul Android IMG Repack Tools dintr-un sistem de operare bazat pe Linux.

OS Presetat pentru Android IMG Repack Tools

Dacă aveți Ubuntu versiunea 14.04 și mai veche (și Mint bazat pe aceasta), atunci va trebui să instalați GCC 5 din depozit (deschideți un terminal și tastați următoarele comenzi):

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

sudo apt-get update

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

Pentru utilizatorii Ubuntu 16.04 (și Mint bazat pe acesta), trebuie să instalați mai întâi:

1. GNU Automake 1.14 (descărcare și extragere)

2. Accesați folderul cu Gnu Automake, deschideți un terminal și rulați următoarele comenzi una câte una: ./configure make sudo make install

3. Instalați pachete: 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 libc6-dev x11 -dev libx11-dev libz-dev gawk texinfo automake libtool cvs libsdl-dev

Configurarea Android IMG Repack Tools

1. După ce descărcați Android IMG Repack Tools despachetați, accesați terminalul deschis

2. Tastați o comandă pentru a lansa utilitarul./main_menu

Dacă aveți Mint instalat, faceți clic pe fișierul main_menu

3. Accesați secțiunea de utilități " 0 - Configurați și curățați meniul de instrumente»

4. Selectați „ 1 - Construiți android_img_repack_tools", pentru a descărca și configura instrumentele care funcționează cu imagini Android.

Lucrul cu utilitarul Android IMG Repack Tools

Așteptați-vă la o actualizare a articolului cu instrucțiuni de utilizare a utilitarului în viitorul apropiat!

Dacă doriți să încercați să creați, să editați firmware pe Android, atunci programul Samsung Root Firmware Replacer vă va ajuta să creați firmware!

Pe scurt despre programul Samsung Root Firmware Replacer și capacitățile acestuia

Cu acest program vei putea:

  • Despachetați firmware-ul Samsung
  • Personalizați firmware-ul
  • Încorporați automat drepturile rădăcină
  • Completați automat firmware-ul cu fișierele dvs
  • Înghețați un proiect și apoi continuați să lucrați la el
  • Pachet de firmware

Cerințe preliminare și cerințe preliminare pentru Samsung Root Firmware Replacer

Prezentare generală și descrierea programului de pornire a funcțiilor Samsung Root Firmware Replacer

1. Accesați folderul cu programul Samsung Root Firmware Replacer, faceți clic dreapta pentru a deschide în terminal

2. În terminal, introduceți comanda

3. Interfața programului se va deschide în fața ta

4. Dacă ați lansat programul pentru prima dată, atunci rulați - Configurarea setărilor

Lucrul cu Samsung Root Firmware Replacer

Paragraf Despachetați firmware-ul *.tar.md5- despachetează firmware-ul, pentru a face acest lucru, mutați fișierul în folder unpack_tar_md5, după care toate fișierele vor fi extrase, iar fișierul factoryfs sau de sistem va fi mutat în input_img

paragraf Creați *.img de pe Android (necesită Android)- vă permite să creați firmware din starea dvs. actuală de Android. Pentru ca acest element să funcționeze, trebuie să aveți Android conectat la un computer cu depanarea USB activată.

Acest articol are un submeniu

Paragraf Se creează *.img din firmware-ul original vă permite să schimbați firmware-ul gata făcut, pentru aceasta, transferați orice fișier IMG în folderul input_img.

Acest articol are și propriul său submeniu

Un exemplu de utilizare a Samsung Root Firmware Replacer

În acest exemplu, firmware-ul este creat din starea actuală a Android

1. Conectați Android la computer

2. Rulați programul

3. Selectați Creați *.img de pe Android (necesită Android)

4. Selectați Imagine din Android și extrageți img

5. Selectarea partiției din care va fi luată imaginea

6. Așteptați 6-7 minute pentru ca imaginea să fie capturată și transferată pe computer.

Important! Pe un smartphone sau tabletă, precum și pe un PC, trebuie să existe suficientă memorie pentru a captura imaginea. Dimensiunea imaginii poate fi de la 2 MB la 2 GB

7. După ce ați făcut imaginea, o puteți modifica dacă este necesar (încorporați Root), o puteți împacheta înapoi, pentru aceasta

8. Selectați articolul Pachet proiect din img

9. Specificați dimensiunea și numele firmware-ului.

  • Specificați dimensiunea partiției în acest fel, împărțiți dimensiunea blocului la 1024 și adăugați litera M la rezultat.

  • Numele trebuie să se potrivească cu numele pe care l-ați schimbat

11. De asemenea, nu uitați să copiați nucleul de pe Android, pentru aceasta, utilizați elementul - Luați o imagine de pe Android - boot.img sau zImage

12. După toate manipulările, trebuie să asamblați firmware-ul în TAR.MD5

13 În meniul principal, selectați Pack Firmware *.tar.md5

14 Firmware-ul din Samsung Root Firmware Replacer este gata, puteți

Toate firmware-urile pentru tablete de pe procesorul Allwinner au același format img (IMAGEWTY).

După o lungă căutare, am găsit în sfârșit un program care vă permite să dezasamblați și să asamblați firmware-ul pentru tablete bazat pe Allwinner. Se numește unpacker.

Să trecem direct la dezasamblarea fișierului firmware.

Analizarea fișierului IMG

Pentru dezasamblare veți avea nevoie de:

  • Fișier de firmware
  • Program unPacker care poate fi descărcat (Pentru Allwinner a31s, puteți utiliza imgRePacker)

Descărcați arhiva și despachetați. Rulați unPacker.exe

Tragem fișierul în această fereastră și așteptăm despachetarea.

După ce dezambalarea este finalizată, va apărea un nou folder numit „firmware.img.dump”

Există un fișier system.fex în folderul out - acesta este un fișier cu fișiere de sistem (folder de sistem). El este ceea ce avem nevoie.

Editarea fișierului system.fex

Pentru a edita acest fișier, aveți nevoie de un sistem nix și de un utilitar de conversie, care poate fi descărcat

Creăm un folder în directorul de acasă în care ne vom edita firmware-ul. Să-i spunem NOU, de exemplu. Acum despachetați fișierele din arhiva ext4_utils.zip în folderul NOU. Lansați terminalul și tastați

Programul se va compila și vom avea un instrument pentru editarea Sim2img. Acum punem fișierul nostru system.fex în folderul NOU și îl redenumim în sytsem.img

Intră în terminal

./simg2img system.img output.img

Acum avem un fișier output.img. Acum creați un folder, de exemplu, numit sys

Și montați fișierul nostru de ieșire acolo

sudo mount output.img sys

Dosarul sys conține acum fișiere care pot fi editate. De exemplu, puteți face modificări fișierului build.prop care vor îmbunătăți performanța sistemului.

După editare, începem asamblarea

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

Redenumiți fișierul factoryfs_custom rezultat în system.fex.iso

notă: puteți edita alte fișiere imagine în același mod (boot și bootloader)

Asamblare

Acum, pentru a colecta fișierele editate în formatul necesar pentru firmware, trebuie să plasați fișierul system.fex.iso cu un înlocuitor în folderul _iso (pe Windows) și să trageți folderul

Să începem cu faptul că aveți nevoie de Linux. În Windows, puteți doar dezasambla firmware-ul, dar nu îl puteți pune la loc din motive pur tehnice. Acum despre firmware. De obicei, acestea sunt distribuite sub formă de arhive ZIP prin recuperare personalizată. Este unul dintre ele de care vom avea nevoie pentru experimente. Recomand să începeți calea de romodeling cu niște firmware personalizat cât mai aproape de AOSP, pentru că de multe ori este mai ușor să-l dați seama decât în ​​stoc.

  1. Despachetați arhiva cu firmware-ul în orice folder.
  2. Descărcați scriptul de pe link și dezarhivați-l în orice folder.
  3. Rulați fișierul ext (dacă se plânge de lipsa Java, omiteți-l apăsând pe y ; Java este necesar doar pentru împachetare).
  4. Acum selectați despachetarea apăsând butonul 1 și apoi Enter.
  5. Un folder nou numit extract_* va apărea lângă fișierul ext și folderul instrumente. Copiați fișierele system.new.dat și system.transfer.list în el.
  6. După ce ați copiat fișierele, apăsați Enter și așteptați. După un timp, va trebui să apăsați din nou pe Enter, să introduceți parola de administrator și să apăsați din nou pe Enter.
  7. Gata. Conținutul sistemului din folderul extract_*/output.

Mod manual

Despachetați arhiva cu firmware-ul în orice folder (de exemplu, în rom):

$ mkdir ~/rom $ dezarhivare calea_la_arhivă -d ~/rom/

Descărcați instrumentele de care avem nevoie în acest folder:

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

Să rulăm scriptul:

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

Acesta convertește fișierul system.new.dat într-o imagine brută numită system.img . Montați imaginea în subfolderul mnt:

$ mkdir mnt $ sudo mount -t ext4 -o loop system.img ~/rom/mnt

Structura directoarelor Android

După dezambalarea sistemului, va apărea următoarea structură de directoare:

  • aplicația- aplicații preinstalate cu privilegii standard;
  • priv-app- aplicații preinstalate cu privilegii ridicate, inclusiv unele componente ale sistemului;
  • cos- fișiere binare în format ELF, similar cu directoarele /bin și /usr/bin din Linux. Conține diverse componente de sistem utilizate de componentele de sistem de nivel superior;
  • etc- fisiere de setari. Un analog complet al /etc în Linux, folosit, totuși, doar de acele componente ale sistemului. Aplicațiile Android stochează setările individuale în directoarele /data/data/;
  • fonturi- fonturi. În mod implicit, conține doar fonturi de marcă Roboto;
  • cadru- biblioteci de clase Java utilizate de sistem și aplicații. Există, de asemenea, un fișier framework-res.apk care conține o descriere completă a interfeței sistemului de operare, inclusiv toate fișierele grafice;
  • libși lib64- Biblioteci Linux utilizate de componentele sistemului de nivel scăzut. Similar cu directoarele /lib și /usr/lib de pe Linux, inclusiv biblioteci standard precum libc, libz, libssl. Dispozitivele cu arhitectură ARMv7 și mai jos nu vor avea un director lib64;
  • mass-media- fișiere media: tonuri de apel, sunete de notificare, sunete de interfață și animație de pornire a sistemului de operare;
  • tts- fișiere necesare sintetizatorului de vorbire;
  • usr- un director care conține de obicei fișierele necesare rulării aplicațiilor din directorul bin. În esență, un analog al /usr/share ;
  • vânzător- fișiere furnizate de producătorul dispozitivului. De obicei, conține firmware binar pentru diferite componente hardware, cum ar fi un modul Wi-Fi;
  • xbin- directorul optional; firmware-ul personalizat îl folosește pentru a stoca lucruri precum interpretul bash, SSH, PowerTOP, BusyBox și alte instrumente utile;
  • construi.prop- un fișier care conține informații despre ansamblu, precum și diverse setări de nivel scăzut;
  • addon.d- conține scripturi care rulează după instalarea firmware-ului. GApp-urile își prescriu și aici propriul script, datorită căruia renasc după reinstalarea firmware-ului.

Acum că suntem familiarizați cu structura de bază a Androidului, să începem să facem modificări.

Eliminarea și adăugarea aplicațiilor

Toate programele preinstalate pot fi găsite în două foldere:

  • /system/app/;
  • /system/priv-app/.

Ele diferă unele de altele prin privilegiile de acces. Dacă programele din aplicație au aceleași permisiuni ca și programele terță parte (de exemplu, cele instalate din Magazinul Play), atunci aplicațiile din priv-app pot folosi API-uri privilegiate (drepturi privilegiate). Puteți afla mai multe despre asta de la.

Pentru a preinstala aplicația în firmware, trebuie doar să aruncați fișierul APK în /system/app/ . Puteți, desigur, să creați un folder separat, dar în cazul nostru acest lucru nu are sens, deoarece folderul este folosit pentru a stoca biblioteci și fișiere Odex, pe care pur și simplu nu le avem. Pentru a șterge, pur și simplu ștergeți folderul cu acesta.

Puteți merge mai departe și puteți schimba aplicațiile de stoc pentru analogi. De exemplu, pentru a înlocui calendarul, ștergeți folderul Calendarși copiați com.rpagyc.simplecalendar.apk-ul nostru preferat în /system/app . Și nu poți copia. Apoi firmware-ul va fi fără calendar.

Principalul lucru de reținut este că programele de stoc pot fi legate. Prin urmare, eliminarea unui program poate duce la inoperabilitatea completă a altuia (de exemplu, CalendarProvider și Calendar: prin ștergerea primului, veți face nu numai calendarul stoc inoperabil, ci și orice alt calendar). Din fericire, nu există atât de multe relații în firmware-ul AOSP pur.

Modificarea animației de încărcare

Animațiile sunt stocate ca imagini PNG împachetate în arhiva /system/media/bootanimation.zip fără compresie. În interiorul arhivei se află:

  • desc.txt- un fișier care descrie animația;
  • partea 0- folder cu fișiere de animație care sunt redate primele;
  • partea 1- un folder cu fișiere de animație care sunt redate secunde;
  • parte?- folder extrem, imagini din care sunt redate la final.

Fișierul desc.txt poate conține ceva de genul

1920 1080 60 p 1 0 part0 p 0 0 part1

Scopul acestor linii este intuitiv: 1920 × 1080 este rezoluția imaginii, 60 este numărul de cadre pe secundă. Part0 și part1 indică folderele din care se va reda animația și secvența de redare. În general, pot exista fie o parte, fie mai multe (trei sau mai multe).

Imaginile din folderele părți sunt numerotate cu cinci numere în ordinea de redare: 00000.png , 00001.png , 00002.png ... Aceste imagini pot fi modificate în propriile imagini, creând astfel o animație originală. Sau puteți șterge pur și simplu fișierul bootanimation.zip. Apoi dispozitivul va afișa animație de la Android standard. Sau utilizați o colecție gata făcută de animații pe w3bsit3-dns.com.

Schimbarea designului sunetului

De fapt, toate sunetele pe care sistemul le redă sunt stocate în folderul /system/media/audio. În interiorul acestuia veți găsi următoarele foldere:

  • alarme- tonuri de apel de alarmă;
  • notificări- sunete de notificare;
  • tonuri de apel- tonuri de apel;
  • ui- sunete de sistem, cum ar fi bateria descărcată, focalizarea camerei, selecția elementelor de interfață.

În alarme, notificări, tonuri de apel, puteți adăuga câte melodii doriți. Le poți lua, de exemplu, aici:

  • melodii standard de la diferite telefoane și smartphone-uri Nokia;

Și un mic truc de viață: ștergerea fișierelor din folderul ui nu va duce la blocări și erori, ci la dispariția sunetelor de sistem. Prin urmare, puteți dezactiva cu ușurință sunetul creării unei imagini de la cameră, făcând o captură de ecran, pur și simplu ștergând fișierele care conțin aceste sunete (numele lor sunt intuitive).

Adăugarea fonturilor

Fonturile sunt stocate în fonturi. Puteți găsi arhive cu fișiere de font pe w3bsit3-dns.com și XDA. Pentru a instala, doar copiați și înlocuiți fișierele ttf din arhivă în folderul fonturi.

Modificați setările sistemului (build.prop)

Există un fișier build.prop interesant în imaginea sistemului, care conține o mulțime de informații utile despre hardware-ul dispozitivului și setările implicite pentru diverse aplicații stoc. Pentru dreptate, observ că nu este întotdeauna cazul. De exemplu, în Gigaset ME și ME Pro build.prop este împărțit în două părți. O parte conține setări pentru Gigaset ME, iar pentru ME Pro unele linii sunt duplicate, dar tastele (numele smartphone-ului și așa mai departe) sunt diferite. Acest lucru a fost făcut pentru a asigura performanța mai mult sau mai puțin corectă a aceluiași firmware pe dispozitive diferite.


Build.prop conține (sau poate conține) un număr mare de setări. Unele dintre ele nu schimbă nimic, altele le îmbunătățesc pe una în detrimentul celeilalte, dar sunt cele care sunt cu adevărat utile:

  • ro.produs.modelși ro.produs.producător- modelul smartphone-ului și numele producătorului. Prin înlocuirea acestor linii, puteți face Magazinul Play să creadă că aveți un alt smartphone, care va deschide accesul la mai multe programe. Pentru orice smartphone chinezesc puțin cunoscut, aceste linii pot fi salvatoare;
  • hw.qemu.mainkeys- ia doar două valori: 0 - afișați tastele de navigare pe ecran, 1 - nu afișați butoanele. Absența unui șir corespunde cu 0;
  • debug.sf.nobootanimation- o valoare de 1 dezactivează animația de încărcare, ceea ce îi crește ușor viteza. Setarea lui la 0 sau ștergerea liniei readuce animația la locul ei;
  • ro.telefonie.default_network- spune sistemului în ce mod ar trebui să fie comutată rețeaua mobilă la pornire;
  • ro.sf.lcd_density- DPI a afișajului, cea mai precisă valoare pentru afișaj poate fi calculată printr-un site convenabil. Dar nimeni nu vă interzice să setați o valoare mai mare sau mai mică după bunul plac: valorile mai mari măresc elementele de interfață, cele mici le fac mai mici;
  • ro.config.vc_call_vol_steps- numărul de pași de volum în timpul unui apel (implicit 8);
  • ro.config.media_vol_steps- numărul de pași pentru volumul media (implicit 15).

Încorporarea Google Apps în firmware

Aproape întotdeauna, ROM-urile personalizate vin fără serviciile Google și magazinul de aplicații. Dezvoltatorii sugerează să le instalăm separat folosind pachetul GApps. Cu toate acestea, poate fi integrat direct în firmware.

Mai întâi trebuie să descărcați pachetul GApps. Recomand să luați arhivele Open GApps. Vă alegeți versiunea Android, arhitectura procesorului și varianta pachetului (Pico, Nano, Stock...), care determină câte aplicații Google diferite conține arhiva. Recomand să descărcați versiunea Pico. Conține doar Magazinul Play și un set de biblioteci necesare funcționării acestuia.

Integrarea GApps în firmware se face după cum urmează:

  1. Despachetați arhiva ZIP GApps folosind orice arhivator.
  2. Accesați folderul Core.
  3. Vedem o mulțime de arhive cu extensia .tar.lz. Extras cu lzip.
  4. După despachetare, copiați fișierele din foldere în folderele corespunzătoare din sistem. Ce să arunci unde, este ușor de ghicit din structura directoarelor din arhivă. De exemplu, configuratorul (din captura de ecran) ar trebui să fie plasat în folderul priv-app.
  5. Accesați folderul GApps (situat lângă Core) și faceți pașii 3 și 4 pentru fișierele din acesta.
  6. Gata, am integrat GApps în firmware-ul nostru!

Loc liber

Trebuie înțeles că locul pentru instalarea firmware-ului este limitat. Nu puteți instala firmware care este mai mare decât partiția de sistem a dispozitivului. Puteți vedea valoarea sa folosind:

$ adb shell df /system

A doua opțiune: puneți un terminal pe dispozitiv și introduceți comanda

$ df /sistem

Puteți afla dimensiunea partiției în octeți instalând BusyBox pe smartphone și rulând comanda în terminal

$ busybox df -B 1 /sistem

Sau la fel cu ADB:

$ adb shell busybox df -B 1 /sistem

Spațiul ocupat de firmware va fi aproximativ egal cu dimensiunea sistemului atunci când este despachetat. În general, atunci când se creează un firmware, trebuie să se țină cont de faptul că utilizatorul poate, de asemenea, să flash diverse modificări deasupra acestuia (SuperSU, Xposed) sau să transfere aplicații în secțiunea de sistem. De exemplu, Google Apps Minimum Package (Pico) necesită un spațiu de instalare suplimentar de minim 150 MB.

Dacă este necesar, dimensiunea fișierului firmware poate fi redusă prin eliminarea nu numai a programelor inutile din /system/app (/system/priv-app) și a sunetelor de apel din system/media/audio și bootanimation.zip , dar și:

  • /system/tts/lang_pico- limbi ale motorului vocal primitiv Pico TTS, motorul vocal al Google nu va fi afectat;
  • /system/usr/srec/config/- limbi offline. Poate fi descărcat online ulterior, dacă este necesar.

Asamblare

După ce faceți modificări, trebuie să colectați totul înapoi. Mai întâi, să împachetăm partiția de sistem în system.new.dat . Descărcați instrumentele de care avem nevoie:

$ 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

Să ne convertim folderul înapoi într-o imagine RAW. Să-i spunem system_new.img:

$ sudo make_ext4fs -T 0 -S file_contexts -l 1073741824 -a system system_new.img output/

1073741824 modificarea dimensiunii partiției de sistem în octeți. Este chiar mai bine să-l faci puțin mai mic. Facem o imagine rară dintr-o imagine RAW:

$ img2simg system_new.img system_snew.img

Să ne convertim imaginea în system.transfer.list și system.new.dat , care ar trebui să fie aruncate în arhivă cu firmware-ul, dar mai întâi vom șterge fișierele vechi:

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

Să separăm fișierele firmware de cojile suplimentare (fișiere pe care le-am descărcat pentru lucru. Pentru aceasta, este convenabil să folosiți arhiva cu firmware-ul). Îndepărtat? Acum trebuie să împachetați firmware-ul într-o arhivă ZIP (cu orice arhivator).

Rămâne să semnăm arhiva. Puteți face acest lucru atât pe Android însuși folosind ZipSigner, cât și pe un computer (veți avea nevoie de Java instalat):

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

Stânci subacvatice

În timp ce construiți system.new.dat, este posibil să întâmpinați mai multe probleme cauzate de schimbările constante ale mecanismelor de generare a firmware-ului Android. Metoda de mai sus ar trebui să funcționeze bine pentru firmware-ul bazat pe Android 5.1, cele mai noi pot fi dificile, așa că trebuie să utilizați alte versiuni ale instrumentelor de compilare. Din păcate, nu putem descrie toate nuanțele ansamblului, așa că poate fi necesar să căutați pe google.

Instalare

Pentru a instala firmware personalizat, aveți nevoie de recuperarea personalizată TWRP, care vă permite să instalați firmware nesemnat sau semnat cu o cheie de testare (aceasta este ceea ce am creat). În revistă, am descris în mod repetat procesul de instalare a acestuia, iar în firele de forum dedicate dispozitivului dvs., există de obicei suficiente informații pentru a face acest lucru.

TWRP

constatări

Acest articol descrie doar vârful unui aisberg imens numit „modificare firmware”. Firmware-ul „serios” nu numai că completează nucleul și firmware-ul în sine cu aplicații stoc cu multe funcții (care sunt adesea rupte din alte nuclee și firmware), organizând sau chiar schimbând principiile interacțiunii lor, dar pot și schimba radical principiile de funcționare al sistemului de operare. Adevărat, o astfel de ambarcațiune nu mai este Android, ci un sistem de operare separat, chiar dacă acolo pot fi instalate serviciile Play (apropo, astfel de acțiuni, ca să spunem ușor, nu sunt încurajate de Google). Ei bine, nu uitați: toate shell-urile de la producători - TouchWiz, ZenUI, HTC Sense și așa mai departe - sunt doar personalizate obișnuite, legate maxim de hardware-ul dispozitivului și unele de altele.

21 februarie 2014 la 22:39

Dezambalarea, editarea și ambalarea firmware-ului pentru DVR-uri și camere IP de la Xiong Mai

  • Configurare Linux

fundal

Nu cu mult timp în urmă am cumpărat o cameră IP de pe Aliexpress (platforma cip Hi3516 53H20L) și un DVR hibrid cu 16 canale (platforma cip Hi3521 MBD6508E). Ambele sunt realizate pe chipset-ul HiSilicon, astfel încât nu întâmpină probleme de compatibilitate între ele.
Bineînțeles, au existat unele erori. Primul și cel mai important a fost faptul că WiFi-ul camerei a funcționat strâmb - era imposibil să te conectezi la rețea dacă cheia era setată în formă HEX și a existat, de asemenea, o problemă cu gateway-ul implicit din când în când.

Firmware-ul s-a dovedit a fi vechi, încă iunie. Am primit niște firmware proaspăt și l-am încercat. Unele s-au dovedit a fi cu probleme, dar una a funcționat bine.
A mai apărut o problemă - parola implicită pentru conexiunea telnet s-a schimbat. Acest lucru nu l-am putut suporta și am început să caut modalități de a-l returna înapoi.
Vă avertizez imediat că această metodă a fost testată pe DVR-uri și camere bazate pe cipuri HiSilicon, dar ar trebui să funcționeze cu o altă platformă, deoarece chinezii folosesc pe scară largă bootloader-ul U-boot.

Unboxing

Instrucțiunile de despachetare sunt descrise în detaliu în, dar procesul de ambalare nu este descris nicăieri, ceea ce m-a determinat să scriu această postare.
O voi detalia pas cu pas pentru a nu pierde nimic:
Am pus Linux, eu am ales ubuntu.
Verificați tipul fișierului firmware:
[email protected]:~/firmware# fișier General_HZXM_IPC_HI3516C_53H20L_V4.02.R11.20131108_ALL.bin General_HZXM_IPC_HI3516C_53H20L_V4.02.R11.20131108, extrage cel puțin v.2archive 08bin.
Despachetarea:
[email protected]:~/firmware# unzip General_HZXM_IPC_HI3516C_53H20L_V4.02.R11.20131108_ALL.bin : custom-x.cramfs.img inflating: user-x.cramfs.img inflating: romfs-x.cramfs.im.img inflating: logos.img umflare: InstallDesc
Ne uităm la conținutul instalării:
( „Comenzi” : [ „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” ], „Dispozitive” : [ [ „53H20L”, „1.00” ] ] )
InstallDesc:
„UpgradeCommand” : [ ( „Comandă” : „Inscripționare”, „NumeFișier”: „u-boot-all.bin.img” ), ( „Comandă”: „Arde”, „Nume fișier” : „custom-x.cramfs .img" ), ( „Comandă": „Arde”, „Nume fișier”: „romfs-x.cramfs.img” ), ( „Comandă”: „Arde”, „Nume fișier”: „user-x.cramfs.img” " ), ( " Comandă " : " Arde " , " Nume Fișier " : " web-x.cramfs.img " ), ( " Comandă " : " Ardere " , " Nume Fișier " : " logo- x.cramfs.img " ) ], „Hardware” : „53H20L”, „Vânzător” : „General” )
Cuvântul u-boot-all sugerează că fișierele img sunt imagini ale bootloader-ului U-boot, așa că punem pachetul corespunzător:
[email protected]:~/firmware# apt-get install u-boot-tools
Să vedem ce fel de fișiere aveam în arhivă:
[email protected]:~/firmware# fișier u-boot-all.bin.img u-boot-all.bin.img: u-boot legacy uImage, Linux, Linux/ARM, Firmware Image (gzip), 524288 octeți, vineri, 8 noiembrie 05 :15:49 2013, Adresă de încărcare: 0x00000000, Punct de intrare: 0x00080000, CRC antet: 0x8A551AA8, CRC de date: 0x8290AD90 [email protected]:~/firmware# fișier romfs-x.cramfs.img romfs-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, OS Kernel Image (gzip), 4100096 octeți, vineri, 8 noiembrie, 05:16: 04 2013, Adresă de încărcare: 0x00080000, Punct de intrare: 0x00580000, CRC antet: 0xD16AC90F, CRC de date: 0x54CDD868 [email protected]:~/firmware# fișier user-x.cramfs.img user-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, OS Kernel Image (gzip), 7602112 octeți, vineri, 8 noiembrie, 05:16: 02 2013, Adresă de încărcare: 0x00580000, Punct de intrare: 0x00CC0000, CRC antet: 0x106C19AD, CRC de date: 0x6D54ADA7 [email protected]:~/firmware# fișier web-x.cramfs.img web-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, program autonom (gzip), 1572800 de octeți, vineri, 8 noiembrie 05:15:51 2013, Adresă de încărcare: 0x00CC0000, Punct de intrare: 0x00E40000, CRC antet: 0x87611FE5, CRC de date: 0x6BD90EBD [email protected]:~/firmware# fișier custom-x.cramfs.img custom-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, program autonom (gzip), 262080 de octeți, vineri, 8 noiembrie, 05:15:49 2013, Adresă de încărcare: 0x00E40000, Punct de intrare: 0x00E80000, CRC antet: 0xF7C82692, CRC de date: 0x5A27F74C [email protected]:~/firmware# fișier logo-x.cramfs.img logo-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, program autonom (gzip), 262080 octeți, vineri, 8 noiembrie 05:15:47 2013, Adresă de încărcare: 0x00E80000, Punct de intrare: 0x00EC0000, CRC antet: 0x4FE4A821, CRC de date: 0xF6671BD1
Vă rugăm să acordați atenție celor doi parametri Load Address și Entry Point. Am uitat să le precizez în timpul primului asamblare, au devenit zero implicit, iar aceasta este adresa bootloader-ului, care s-a dovedit a fi suprascrisă după firmware! Din această cauză, am petrecut o oră în plus pentru recuperare - a trebuit să scot camera de pe stradă, să o dezasamblam și să restabilesc firmware-ul la programator. (Deși nu degeaba am dezasamblat camera - am adăugat o pungă de silicagel pe carcasă pentru a elimina eventuala umezeală din aer.)

Acum o mică explicație: imaginea .img din acest firmware este o imagine ușor modificată a sistemului de fișiere cramfs. Aici puteți citi mai multe. Pentru a aduce imaginea la normal, trebuie să tăiați 64 de octeți din antet.
[email protected]:~/firmware# dd bs=1 skip=64 if=logo-x.cramfs.img of=logo-x.cramfs 262080+0 intrări primite 262080+0 intrări trimise copiate 262080 octeți (262 kB), 0,891322 s, 291322 s, kB/s
Pentru alte fișiere, comenzile sunt similare.
Să vedem ce s-a întâmplat:
[email protected]:~/firmware# fișier logo-x.cramfs logo-x.cramfs: Linux Compressed ROM File System date, little endian size 28672 versiunea #2 sorted_dirs CRC 0xe29e6340, ediția 0, 199 blocuri, 2 fișiere
Deja similar cu cramfs. Pentru a lucra cu imagini cramfs, instalați sau actualizați pachetul corespunzător:
[email protected]:~/firmware# apt-get install cramfsprogs
Despachetarea imaginilor:
[email protected]:~/firmware# cramfsck -x logo logo-x.cramfs [email protected]:~/firmware# cramfsck -x user user.cramfs [email protected]:~/firmware# cramfsck -x romfs romfs-x.cramfs [email protected]:~/firmware# cramfsck -x web web-x.cramfs [email protected]:~/firmware# cramfsck -x custom custom-x.cramfs
Nu creez directoare, acestea vor fi create automat.
Bootloader-ul nu poate fi despachetat în acest fel, nu este o imagine cramfs, dar nu trebuie să fie atins.

Ce e inauntru

Voi trece rapid peste conținutul fiecărui fișier din arhiva firmware:
  • InstallDesc - descrie acțiunile care trebuie întreprinse cu aceste fișiere la actualizarea firmware-ului, script-ul de instalare.
  • logo-x.cramfs.img - o imagine în format 800x600 cu sigla producătorului, care apare atunci când dispozitivul este încărcat.
  • romfs-x.cramfs.img - sistemul de operare Linux în sine pentru arhitectura ARM
  • u-boot-all.bin.img - U-boot bootloader
  • custom-x.cramfs.img - conține numele platformei și setări suplimentare
  • user-x.cramfs.img - aplicație software, inclusiv Sofia - programul DVR în sine
  • web-x.cramfs.img - imagini interfață web, web.cab - plug-in pentru Internet Explorer cu localizare, sigle ale producătorului.
Suntem interesați de romfs-x.cramfs.img, deoarece acolo este prezent fișierul passwd, care stochează parola. Iată conținutul său, cei care doresc pot încerca să brute:
root:$1$RYIwEiRA$d5iRRVQ5ZeRTrJwGjRy.B0:0:0:root:/:/bin/sh
Tocmai am generat un nou hash pe site și l-am schimbat în fișier.

Colectarea înapoi

După modificările efectuate, trebuie să împachetați totul înapoi:
[email protected]:~/firmware# mkcramfs romfs romfs-x.cramfs Date director: 3624 bytes Totul: 4004 kilobytes Super bloc: 76 bytes CRC: 28c62b9b
Îți amintești când m-am concentrat pe valorile Load Address și Entry Point? Este timpul să le amintim și să le adăugați în echipă.
Creați o imagine U-boot:
[email protected]:~/firmware# mkimage -A arm -O linux -T ramdisk -n "linux" -e 0x00580000 -a 0x00080000 -d romfs-x.cramfs romfs-x.cramfs.img Nume imagine: linux Creat: vineri, 21 feb 14 :27:38 2014 Tip imagine: ARM Linux RAMDisk Imagine (gzip comprimat) Dimensiunea datelor: 4100096 octeți = 4004,00 kB = 3,91 MB Adresă de încărcare: 00080000 Punct de intrare: 00580000
Apropo, pentru a actualiza un modul, nu este necesar să flashiți întregul firmware, este suficient să puneți doar pe cel de care aveți nevoie și să editați fișierele Install și InstallDesc, lăsând doar liniile necesare.
Puneți fișierele rezultate într-un director separat, lăsați-l să fie nou. Dăm comanda:
[email protected]:~/new# zip -D -X firmware.bin * adăugând: Instalare (dezumflat 22%) adăugând: InstallDesc (dezumflat 30%) adăugând: romfs-x.cramfs.img (dezumflat 0%)
Totul, firmware-ul este gata. Rămâne doar să-l flash prin interfața web prin elementul de actualizare

Avertizare

Urmând recomandările din acest articol, o faci pe propriul risc. Autorul nu este responsabil pentru acțiunile dvs. După ce ați făcut o greșeală la modificarea firmware-ului, puteți obține cu ușurință o cărămidă care poate fi restaurată numai pe programator. Prin urmare, dacă nu sunteți sigur de acțiunile dvs., nu o faceți.
Ți-a plăcut articolul? Impartasiti cu prietenii!