Fórum Root.cz
		Hlavní témata => Software => Téma založeno: tuxmartin  18. 05. 2016, 15:57:30
		
			
			- 
				Ahoj, existuje najaka moznost, jak rozbalit a pote zase zabalit firmware s linuxem?
 
 Jde mi o firmware pro Ubiquity zarizeni, ktery je dostupny na http://dl.ubnt.com/firmwares/XW-fw/v5.6.5/XW.v5.6.5.29033.160515.2108.bin
 
 O co mi jde? Potrebuji firmware rozbalit, upravit a znova zabalit.
 
 Kdysi bylo od UBNT SDK, ale to uz je stare.
 
 Squashfs to neni:
 # unsquashfs -i XW.v5.6.5.29033.160515.2108.bin 
 Can't find a SQUASHFS superblock on XW.v5.6.5.29033.160515.2108.bin
 nekde na foru psali, ze jde o UBI.
 
 Podle nejakeho fora jsem zkusil firmware-mod-kit (https://code.google.com/archive/p/firmware-mod-kit/wikis/Documentation.wiki), take to nejde rozbalit:
 # unsquashfs -i XW.v5.6.5.29033.160515.2108.bin 
 Can't find a SQUASHFS superblock on XW.v5.6.5.29033.160515.2108.bin
 
 root@martin:~/ubnt/fmk# ./extract-firmware.sh XW.v5.6.5.29033.160515.2108.bin
 ...
 Scan Time:     2016-05-18 11:51:57
 Signatures:    193
 Target File:   /home/martin/ubnt/fmk/XW.v5.6.5.29033.160515.2108.bin
 MD5 Checksum:  f5f41db6f5738195ddbb17291a43bce2
 
 DECIMAL   	HEX       	DESCRIPTION
 -------------------------------------------------------------------------------------------------------
 
 Extracting 0 bytes of  header image at offset 0
 ERROR: No supported file system found! Aborting...
 Pokud se podivam pres strings, na zacatku vidim u-boot:
 # strings XW.v5.6.5.29033.160515.2108.bin | less
 
 UBNTXW.ar934x.v5.6.5.29033.160515.2108
 PARTu-boot
 
 ...
 flashsize
 flashoffset
 ethaddr     =
 %c%02X
 ip_addr     =
 baudrate    = %d bps
 bdinfo
 bdinfo  - print Board Info structure
 Usage:
 ## Board info at 0x%08lX ...
 go      - start application at address 'addr'
 addr [arg ...]
 - start application at address 'addr'
 passing 'arg' as arguments
 reset
 reset   - Perform RESET of the CPU
 Error: Bad gzipped data
 Error: gunzip out of data in header
 Error: inflateInit2() returned %d
 Error: inflate() returned %d
 Image Name:   %.*s
 
 ...
 
 could not get current partition info
 defaults:
 mtdids  : %s
 mtdparts: %s
 mtdparts=ath-nor0:256k(u-boot),64k(u-boot-env),1024k(kernel),6528k(rootfs),256k(cfg),64k(EEPROM)
 no such device %s defined in mtdids variable
 too long partition description
 
 ...
 
 *** Warning: no boot file name; using '%s'
 TFTP from server
 ; our IP address is
 ; sending through gateway
 Filename '%s'.
 Size is 0x%x Bytes =
 Load address: 0x%lx
 Loading: *
 Retry count exceeded; starting again
 %lu MB reveived
 TFTP error: First block is not block 1 (%ld)
 Starting again
 
 ...
 Ve vyse uvedenem vypisu jsem nasel:
 mtdparts=ath-nor0:256k(u-boot),64k(u-boot-env),1024k(kernel),6528k(rootfs),256k(cfg),64k(EEPROM)
 
 tak jsem zkusil dd na rootfs:
 dd if=XW.v5.6.5.29033.160515.2108.bin count=6684672 skip=1 of=rootfsale vubec jsem si nepomohl.
 
 Da se nejak najit oddily ve firmawru a pripojit je?
 Myslim jako kdyz si pomoci dd udelam img celeho /dev/sda a pak pripojim jeho oddily pomoci kpartx, nebo je najdu pomoci testdisk.
- 
				Ak máš k dispozícii nejaké staršie  SDK vytiahni si z nich  fwsplit  a  ubnt-mkfwimage ,  
 
 ale budeš  musieť   upravovať trocha ich zdroják  s  novšími fw  si  neporadia.
 
 .bin  súbor má 4 časti  ubot, kenel , rootfs a scripts
 zaujíma ta  rootfs  na neho budeš potrebovať    squash fs tools .
 
 5.6.5 som ešte  upravovať neskúšal , ale na starších verziách  to funguje.
- 
				Mozna tady? https://gist.github.com/WanghongLin/7ed3bce72f628b6b9d4c
 
- 
				Ak máš k dispozícii nejaké staršie  SDK vytiahni si z nich  fwsplit  a  ubnt-mkfwimage ,  
 
 ale budeš  musieť   upravovať trocha ich zdroják  s  novšími fw  si  neporadia.
 
 .bin  súbor má 4 časti  ubot, kenel , rootfs a scripts
 zaujíma ta  rootfs  na neho budeš potrebovať    squash fs tools .
 
 5.6.5 som ešte  upravovať neskúšal , ale na starších verziách  to funguje.
 
 
 ubnt-mkfwimage z SDK.UBNT.v5.3.3 opravdu na nove verze nefunguje.
 http://www.ubnt.com/downloads/XN-fw-internal/insecure/v5.3.3/SDK.UBNT.v5.3.3.tar.bz2
 
 Nasel jsem jeste mkfwimage2.c (https://dev.openwrt.org/browser/trunk/tools/firmware-utils/src/mkfwimage2.c) z openwrt naposledy upravovany pred 5 mesici. Dokonce tam je nekdo asi z czfree:
 	 * Copyright (C) 2007 Ubiquiti Networks, Inc.
 * Copyright (C) 2008 Lukas Kuna <ValXdater@seznam.cz>
 * Copyright (C) 2008 Gabor Juhos <juhosg@openwrt.org>
 Dokazal by to nekdo upravit? Ja to zkousel a bez uspechu :-(
 
 
 Mozna tady? https://gist.github.com/WanghongLin/7ed3bce72f628b6b9d4c
 
 To mi vzdy pada na (zkousim na x86, ale to asi nevadi):
 # ubiattach /dev/ubi_ctrl -m 0 -O 4096
 ubiattach: error!: cannot attach mtd0
 error 22 (Invalid argument)
 
Navic jak zjistim ty paramertry pro nandsim? :
 modprobe nandsim first_id_byte=0xec second_id_byte=0xd5 third_id_byte=0x51 fourth_id_byte=0xa6
 Z toho http://www.linux-mtd.infradead.org/faq/nand.html#L_nand_nandsim mi to neni jasne.
 
- 
				Zrovna jsem cetl nadherny navod na FW analyzu IoT zarizeni apod.:
 http://resources.infosecinstitute.com/firmware-analysis-for-iot-devices/
 
 Ve zkratce pomoci 'binwalk' si najdes filesystem (squashfs):
 
 # binwalk XW.v5.6.5.29033.160515.2108.bin
 DECIMAL       HEXADECIMAL     DESCRIPTION
 --------------------------------------------------------------------------------
 0             0x0             Ubiquiti firmware header, header size: 264 bytes, ~CRC32: 0x8EF801B1, version: "XW.ar934x.v5.6.5.29033.160515.2108"
 268           0x10C           Ubiquiti partition header, header size: 56 bytes, name: "u-boot", base address: 0x9F000000, data size: 228524 bytes
 151956        0x25194         U-Boot version string, "U-Boot 1.1.4-s958 (Jun 10 2015 - 10:56:20)"
 228856        0x37DF8         Ubiquiti partition header, header size: 56 bytes, name: "kernel", base address: 0x9F050000, data size: 955903 bytes
 228912        0x37E30         uImage header, header size: 64 bytes, header CRC: 0x6BBB011A, created: Sun May 15 20:09:39 2016, image size: 955839 bytes, Data Address: 0x80002000, Entry Point: 0x80002000, data CRC: 0x4958DD23, OS: Linux, CPU: MIPS, image type: OS Kernel Image, compression type: lzma, image name: "MIPS Ubiquiti Linux-2.6.32.68"
 228976        0x37E70         LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 2799616 bytes
 1184823       0x121437        Ubiquiti partition header, header size: 56 bytes, name: "rootfs", base address: 0x9F150000, data size: 6029312 bytes
 1184879       0x12146F        Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 5893816 bytes,  1190 inodes, blocksize: 131072 bytes, created: Sun May 15 20:09:41 2016
 7214255       0x6E14AF        gzip compressed data, from Unix, last modified: Sun May 15 20:08:24 2016
 7241849       0x6E8079        Ubiquiti end header, header size: 12 bytes, cumulative ~CRC32: 0x6E29FA94
 
 
 Vykopirujes si dany filesystem do souboru:
 # dd if=XW.v5.6.5.29033.160515.2108.bin of=ubnt.squashfs bs=1 skip=1184879 count=5893816
 
 A pak uz ho jen staci extrahovat (jako root kvuli zachovani opravneni a blokovych souboru):
 # unsquashfs ubnt.squashfs
 
 Pokud by ti nefungoval systemovy 'unsquashfs', pak pouzi 'sasquatch':
 https://github.com/devttys0/sasquatch
 
 Dokupy to das zase obracenym postupem. Vysvetlovat presne jak to mas udelat by bylo delsi nez to udelat, tak zkratka pripojis to co bylo pred squashfs a to co bylo po squashfs. Problem muze byt, ze se ti to nepodari zpet dostat do stejneho formatu, nebo ze se nektere casti v tom FW posunou a muzes si tim bricknout cele UBNT.
 
 UBNT nepouzivam, takze jestli neznas postup na unbrick, tak bych se do toho nepoustel!
 
- 
				Tady jsou skripty, které jsem používal na hackování firmwaru 5.5.10, nevím, jestli budou použitelné i pro novější verze:
 https://8an.praha12.net/wifi/ubnt/fwtools.tar.xz (https://8an.praha12.net/wifi/ubnt/fwtools.tar.xz)
 
 Určitě to nejde použít u firmwaru 7.x pro AC hardware, tam zavedli ověřování podpisů.