Kysymys:
Pura Billion 5102 -laiteohjelmisto pakkauksestaan
Nucklear
2013-07-29 21:48:39 UTC
view on stackexchange narkive permalink

Yritän purkaa tätä laiteohjelmakuvaa, mutta saan joitain ongelmia rakenteen ymmärtämisessä.

Ensinnäkin minulla on yksi kuva, jota kutsuin firmware.biniksi, ja tiedostokomento näyttää minulle että se on LIF-tiedosto:

  firmware.bin: lif file  

Sen jälkeen analysoin sen binwalkilla:

  DEKIMAALINEN HEX-KUVAUS ---------------------------------------------- -------------------------------------------------- ------- 84992 0x14C00 ZynOS-otsikko, otsikkokoko: 48 tavua, rom-kuvatyyppi: ROMBIN, pakkaamaton koko: 65616, pakattu koko: 16606, pakkaamaton tarkistussumma: 0xBA2A, pakattu tarkistussumma: 0x913E, liput: 0xE0, pakkaamaton tarkistus summa on kelvollinen, binaari on pakattu, pakattu tarkistussumma on kelvollinen, muistikarttataulukon osoite: 0x085043 0x14C33 LZMA pakattu data, ominaisuudet: 0x5D, sanakirjan koko: 8388608 tavua, pakkaamaton koko: 65616 tavua128002 0x1F402 GIF-kuvatiedot, versio 8 "9a", 200 x 50136194 0x21402 GI F-kuvatiedot, versio 8 "7a", 153 x 55349184 0x55400 ZynOS-otsikko, otsikkokoko: 48 tavua, rom-kuvatyyppi: ROMBIN, pakkaamaton koko: 3113824, pakattu koko: 733298, pakkaamaton tarkistus summa: 0x3B9C, pakattu tarkistus summa: 0xBBBA, liput : 0xE0, pakkaamaton tarkistus summa on kelvollinen, binääri pakattu, pakattu tarkistus summa on voimassa, muistikartta taulukon osoite: 0x0349235 0x55433 LZMA pakatut tiedot, ominaisuudet: 0x5D, sanakirjan koko: 8388608 tavua, pakkaamaton koko: 3113824 tavua  

Kuten näette, on 2 LZMA, 2 ZynOS (LZMA myös kerran leikattu) ja 2 kuvaa. Kun olen purkanut LZMA: n, puristan sen ja ensimmäinen on yksi binaarinen tiedosto, mutta toinen on toinen LZMA-tiedosto, jossa on 127 tiedostoa, ja jokaisessa näistä tiedostoista on paljon uusia tiedostoja.

File content sample

Luulen, että en noudata oikeita vaiheita puraaksesi sen pakkauksesta, joten mietin, miten päätiedostojärjestelmä saadaan siistiksi?

Laiteohjelmistotyökaluni on nyt valmis seuraamaan tätä ja muita ZyNOS-kysymyksiä täällä. https://github.com/dev-zzo/router-tools/blob/master/zynos.py Se voi sekä purkaa että pakata laiteohjelmakuvat; Olen testannut BiPAC5102SAv27023_UE0B1C_3325 -kuvaa varmistaakseni, että se pystyy käsittelemään sen. Pidä hauskaa!
üks vastaus:
devttys0
2013-07-30 00:51:34 UTC
view on stackexchange narkive permalink

Tiedostoapuohjelman lähtö, kuten olet todennäköisesti arvannut, on väärä positiivinen. Firmware.bin-tiedoston alussa on perusotsikko (huomaa "SIG" -merkkijono tiedoston alussa) ja joukko MIPS-suoritettavaa koodia, joka todennäköisesti on käynnistyslatausohjelma:

  DECIMAL HEX KUVAUS ------------------------------------------ -------------------------------------------------- ----------------------- 196 0xC4 MIPS-ohjeet, toimintoeppilogi284 0x11C MIPS-ohjeet, toimintaepilogi372 0x174 MIPS-ohjeet, toimintaepilogi388 0x184 MIPS-ohjeet, toimintaepilogi416 0x1A0 MIPS ohjeet, toiminto-epilogi424 0x1A8 MIPS-ohjeet, toiminnon prologue592 0x250 MIPS-ohjeet, toiminto-epilogi712 0x2C8 MIPS-ohjeet, toiminta-epilogi720 0x2D0 MIPS-ohjeet, toimintoprologi832 0x340 MIPS-ohjeet, toimintoeppilogi840 0x348 MIPS-ohjeet, toimintoprologi912 0x390 MIPS-ohjeet, toimintaepilogi920 0x398 MIPS-ohjeet, toimintoprologi976 0x3D0 MIPS-ohjeet, toimintaepilogi984 0x3D8 MIPS-ohjeet, toimintaepilogi1084 0x3C MIPS-ohjeet, toimintaepilogi1084 0x43C MIPS-ohjeet, toimintoepilogi114 ohjeet, toimintoeppi ...  

Merkkijonojen suorittaminen firmware.bin-binaarissa näyttää olevan varmuuskopio tästä hypoteesista, ja siinä on monia viitteitä tarkistus- ja purkuvirheisiin:

  tarkistussumma virhe! (cal =% 04X, pitäisi =% 04X) allekirjoitusvirhe! (Pakattu) alku:% p vertaamattoman tyyppinen tyyppi memMapTab ja kuva!
Pituus:% X, Tarkistussumma:% 04X Versio:% s, Pakattu pituus:% X, Tarkistussumma:% 04XmemMapTab Tarkistussumma virhe! (cal =% 04X, pitäisi =% 04X) memMapTab-tarkistussumuvirhe!% 3d:% s (% s), start =% p, len =% X% s Osa: memMapTab:% d merkintää, start =% p, tarkistussumma =% 04X $ KÄYTTÄJÄ -osa: allekirjoitusvirhe! ROMIO-kuvan alku% pcode length:% Xcode -versio:% scode start:% pPakennetun kuvan virhe! Puretun kuvan tarkistussummavirhe! (cal =% 04X, should =% 04X) ROM-pituus (% X) > RAM-muistin pituus (% X)!% s ei löydy osiosta $ ROM.% s ei löydy osiosta $ RAM. RasCode  

Löytämiesi kahden puretun LZMA-tiedoston merkkijonojen nopea tarkastelu osoittaa, että pienempi (siirtymässä 0x14C33) näyttää sisältävän jonkin virheenkorjausliittymäkoodin, joka on todennäköisesti suunniteltu käytettäväksi laitteen UART: n kautta :

  UART: N SISÄINEN PALAUTUSTESTI UART: N ULKOINEN TAKAISIN TESTERROR ======= HTP-komentolistaus ======= < paina mitä tahansa näppäintä jatkaaksesi > macPHYCtrl.value = MAC INTERNAL LOOPBACK TESTI MAC ULKOINEN TAKAISIN TESTI MAC SISÄINEN TAKAISIN MAC ULKOINEN TAKAISIN LanIntLoopBack ... Tx-polku täynnä, pudota paketti:% d0x% 08xtx kuvaus% d: rx-kuvaus% d:% 02X% 08X: < Paina ES-näppäintä jatkaaksesi >0123456789abcdefghijklmnopqrstuvwxyz0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ<NULL>) Rekisteröi kaatopaikka ********** ATM SAR -moduuli: VC (Reset&Identify reg = Liikenteen aikataulu. TB reg = TX Data ctrl / stat reg = RX Data ctrl / stat reg = Last IRQ Status reg = IRQ Queue Entry len = VC IRQ Mask register = TX Data Current descr = RX Data Current descr = TX Traffic PCR = TX Traffic MBS / Tyyppi = TX Total Data Count = VC IRQ CC Mask peite = TX CC Current descr = TX CC Total Count = RX Miss Cell Count = ***** ATM SAR -moduuli: Common Register Dump *****  

Toinen suurempi tiedosto (at offset 0x55433) näyttää sisältävän ThreadX RTOS, Green Hills:

  RTA231CV Varattu Stringanonymouswww.huawei.com1000tc-e4f6ed2f5b87<MSFT 5.07user<MSFT 5.07LXT972" AC101LCIP101RTL8201CAC201jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjSystem Timer ThreadCopyright (c) 1996-2000 Express Logic Inc. * ThreadX R3900 / Green Hills -versio G3.0f.3.0b *  

Jos et ole perehtynyt RTOS: iin, ne ovat yleensä vain yksi iso ydin, jossa ei ole käsitystä käyttäjän tilasta vs ytintilasta tai mitä ajattelet normaalina tiedostojärjestelmänä, vaikka ne sisältävät esimerkiksi kuvia ja HTML-tiedostoja tämän laitteen verkkokäyttöliittymälle (katso esimerkki tästä kuinka tämäntyyppiset tiedostot ovat s joissakin VxWorks-järjestelmissä).

Sanoisin, että tämä laiteohjelmisto on jo melkein purettu sen perusosiin. Käynnistyslataimen tai kahden puretun LZMA-tiedoston analysoimiseksi sinun on aloitettava näiden tiedostojen purkaminen, mikä tarkoittaa muistiosoitteen määrittämistä, johon ne ladataan käynnistyshetkellä, tunnistamalla koodi / dataosuudet, etsimällä mahdollisia symbolitaulukoita, tunnistamalla yhteiset toiminnot ja luultavasti kirjoittamalla komentosarjoja auttamaan kaikkia yllä mainittuja.

Vau, tätä tarvitsin juuri, kiitos paljon, mahtavaa kuin aina. Vielä yksi kysymys: Onko otsikkoa otsikoiden tunnistamiseen? Olen melko uusi tällä alalla (itse asiassa aloitin lukemisen jälkeen WAG120N: stä) ja joskus on vaikea havaita vääriä positiivisia tai outoja FS / tiedostoja. Terveiset.
Se vaihtelee katselemasi tiedoston mukaan, mutta yleensä tiedosto / laiteohjelmiston otsikot koostuvat 2-4 "maagisesta" tavusta, joita seuraa joitain jäsenneltyjä tietoja, jotka sisältävät yleensä esimerkiksi tiedoston koon, luomispäivän, tarkistussumman ja mahdollisesti ihmisen luettavissa oleva ASCII-kuvaus. Usein on hyödyllistä tulkita kukin offset erilaisina tietotyyppeinä (isot / pienet endian-pitkät, shortsit, päivämääräkoodit jne.) Tunnistaa nämä kentät tuntemattomassa otsikossa (käytän binwalkin vaihtoehtoa -C, mutta kaikilla hyvillä hex-editorilla on tämä kyky).
Kyllä, ymmärrän sen, mutta kun olen tunnistanut nuo otsikot, kuinka voin tunnistaa, mikä FS / tiedosto on, melkein 0 kokemuksella? Onko resursseja otsikkojen vertailuun ja tunnistamiseen? Näen blogissasi, että sanot joskus "Voi tämä on LZMA-otsikko" tai jopa "outo LZMA-otsikko". Kuinka tunnistat nämä otsikot ilman edeltävää tietoa? Terveiset.
Aloitan tarkastelemalla tietojen entropiaa, mikä voi antaa sinulle hyvän idean, jos se on salattu, pakattu vai kumpikaan. Jos se näyttää esimerkiksi pakatulta, aloitan sitten otsikon alun vertaamisen tunnettuihin yleisiin pakkaustyyppeihin (lzma, zlib jne.). Jos tämä ei onnistu, sinun on todennäköisesti käännettävä koodi, joka on vastuussa tietojen purkamisesta / purkamisesta.


Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...