Fermax WayFi - wideodomofon hack, część 2

Opublikowano: 04-04-2019 22:01 | Autor: Dawid

Disassembling - czyli demontaż

Najbardziej istotnym komponentem zestawu jest wyświetlacz. To on łączy się z naszą domową siecią Wi-Fi. Jako, że moje pomysły wyczerpały się. Postanowiłem go rozłożyć. Głównym zamieram było namierzenie portu szeregowego (RS-232). Tylko sześć śrubek dzieliło mnie od dostania się do płyty głównej. Wstępnie w oczy rzuciły mi się 2 gniazda serwisowe - wyżej wspomniany serial.

serial góraserial dółserial dół

W pierwszej kolejności wlutowałem się w gniazdo zaznaczone czerwoną ramką na zdjęciu. Standardowe rozmieszczenie gold-pin -ów. Niestety ślepa uliczka. Jedynie co dostawałem to potrójne znaki na ekranie. Czekało mnie bardziej precyzyjne lutowanie, zielona ramka. Oznaczenie poszczególnych pinów na szczęście jest nadrukowane na płytce. Na drugim zdjęciu widać opis jak na dłoni (zielona ramka). Patrząc od góry na płytkę mamy tak:

  • zielony przewód - RX
  • żółty przewód - TX
  • masę wziąłem z bardziej dostępnego punktu.

Do połączenia z komputerem wykorzystałem moduł konwertera USB - UART/RS232. Oczywiście krosujemy połączenie. Do połączenia użyłem programu picocom. Prędkość transmisji ustawiłem na 115200 8N1, adres urządzenia u moim ststemie to /dev/ttyUSB0. Na końcu zasiliłem wyświetlacz, strumień bardzo ciekawych danych popłynął:

picocom v3.1

port is        : /dev/ttyUSB0
flowcontrol    : none
baudrate is    : 115200
parity is      : none
databits are   : 8
stopbits are   : 1
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : no
hangup is      : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv -E
imap is        : 
omap is        : 
emap is        : crcrlf,delbs,
logfile is     : none
initstring     : none
exit_after is  : not set
exit is        : no

Type [C-a] [C-h] to see available commands
Terminal ready
���

System startup

U-Boot 2010.06 (Jun 13 2016 - 13:51:21)

Check Flash Memory Controller v100 ... Found
SPI Nor(cs 0) ID: 0xc2 0x20 0x18
Block:64KB Chip:16MB Name:"MX25L128XX"
SPI Nor total size: 16MB
MMC:   
EMMC/MMC/SD controller initialization.
Card did not respond to voltage select!
No EMMC/MMC/SD device found !
In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  1  0 
16384 KiB hi_fmc at 0:0 is now current device

## Booting kernel from Legacy Image at 82000000 ...
   Image Name:   Linux-3.4.35
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1941232 Bytes = 1.9 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Booting Linux on physical CPU 0
Linux version 3.4.35 ([email protected]) (gcc version 4.8.3 20131202 (prerelease) (Hisilicon_v300) ) #2 Thu Jun 22 16:38:33 CST 2017
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: hi3518ev200
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 11938
Kernel command line: mem=47M console=ttyAMA0,115200 root=/dev/mtdblock3 rootfstype=cramfs mtdparts=hi_sfc:256K(uboot),64K(env),1920K(kernel),1536K(rootfs),11904K(usr),512K(mnt),128K(logo),64K(cfg)
PID hash table entries: 256 (order: -2, 1024 bytes)
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Memory: 47MB = 47MB total
Memory: 42376k/42376k available, 5752k reserved, 0K highmem
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    vmalloc : 0xc3000000 - 0xff000000   ( 960 MB)
    lowmem  : 0xc0000000 - 0xc2f00000   (  47 MB)
    modules : 0xbf000000 - 0xc0000000   (  16 MB)
      .text : 0xc0008000 - 0xc04bc000   (4816 kB)
      .init : 0xc04bc000 - 0xc04dd344   ( 133 kB)
      .data : 0xc04de000 - 0xc0507b00   ( 167 kB)
       .bss : 0xc0507b24 - 0xc0525f18   ( 121 kB)
SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
NR_IRQS:32
VIC @fe0d0000: id 0x00641190, vendor 0x41
sched_clock: 32 bits at 49MHz, resolution 20ns, wraps every 86767ms
Console: colour dummy device 80x30
Calibrating delay loop... 269.10 BogoMIPS (lpj=1345536)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
Initializing cgroup subsys freezer
CPU: Testing write buffer coherency: ok
Setting up static identity map for 0x803a1df8 - 0x803a1e50
dummy: 
NET: Registered protocol family 16
Serial: AMBA PL011 UART driver
uart:0: ttyAMA0 at MMIO 0x20080000 (irq = 5) is a PL011 rev2
console [ttyAMA0] enabled
uart:1: ttyAMA1 at MMIO 0x20090000 (irq = 30) is a PL011 rev2
uart:2: ttyAMA2 at MMIO 0x200a0000 (irq = 25) is a PL011 rev2
bio: create slab <bio-0> at 0
SCSI subsystem initialized
hi-spi-master hi-spi-master.0: with 1 chip select slaves attached
hi-spi-master hi-spi-master.1: with 2 chip select slaves attached
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
cfg80211: Calling CRDA to update world regulatory domain
Switching to clocksource timer0
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 2048 (order: 2, 16384 bytes)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
TCP: reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
NFS: Registering the id_resolver key type
jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
fuse init (API version 7.18)
msgmni has been set to 82
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
io scheduler noop registered
io scheduler deadline registered (default)
io scheduler cfq registered
brd: module loaded
Check Flash Memory Controller v100 ...  Found.
SPI Nor(cs 0) ID: 0xc2 0x20 0x18
Block:64KB Chip:16MB Name:"MX25L128XX"
SPI Nor total size: 16MB
8 cmdlinepart partitions found on MTD device hi_sfc
8 cmdlinepart partitions found on MTD device hi_sfc
Creating 8 MTD partitions on "hi_sfc":
0x000000000000-0x000000040000 : "uboot"
0x000000040000-0x000000050000 : "env"
0x000000050000-0x000000230000 : "kernel"
0x000000230000-0x0000003b0000 : "rootfs"
0x0000003b0000-0x000000f50000 : "usr"
0x000000f50000-0x000000fd0000 : "mnt"
0x000000fd0000-0x000000ff0000 : "logo"
0x000000ff0000-0x000001000000 : "cfg"
himii: probed
usbcore: registered new interface driver zd1201
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
hiusb-ehci hiusb-ehci.0: HIUSB EHCI
hiusb-ehci hiusb-ehci.0: new USB bus registered, assigned bus number 1
hiusb-ehci hiusb-ehci.0: irq 15, io mem 0x100b0000
hiusb-ehci hiusb-ehci.0: USB 0.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
hiusb-ohci hiusb-ohci.0: HIUSB OHCI
hiusb-ohci hiusb-ohci.0: new USB bus registered, assigned bus number 2
hiusb-ohci hiusb-ohci.0: irq 16, io mem 0x100a0000
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 1 port detected
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
mousedev: PS/2 mouse device common for all mice
i2c /dev entries driver
hisi_i2c hisi_i2c.0: Hisilicon [i2c-0] probed!
hisi_i2c hisi_i2c.1: Hisilicon [i2c-1] probed!
hisi_i2c hisi_i2c.2: Hisilicon [i2c-2] probed!
IPVS: Registered protocols ()
IPVS: Connection hash table configured (size=4096, memory=32Kbytes)
IPVS: Creating netns size=768 id=0
IPVS: ipvs loaded.
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP: cubic registered
Initializing XFRM netlink socket
NET: Registered protocol family 17
NET: Registered protocol family 15
lib80211: common routines for IEEE802.11 drivers
Registering the dns_resolver key type
ÿVFS: Mounted root (cramfs filesystem) readonly on device 31:3.
Freeing init memory: 132K
mount: mounting none on /proc/bus/usb failed: No such file or directory
[RCS]: /etc/init.d/S00devs
[RCS]: /etc/init.d/S01udev
udevd (528): /proc/528/oom_adj is deprecated, please use /proc/528/oom_score_adj instead.
[RCS]: /etc/init.d/S80network
mmz_start: 0x82c00000, mmz_size: 20M
Hisilicon Media Memory Zone Manager
Module himedia: init ok
hi3518e_base: module license 'Proprietary' taints kernel.
Disabling lock debugging due to kernel taint
load sys.ko for Hi3518EV200...OK!
load tde.ko ...OK!
load region.ko ....OK!
load vgs.ko for Hi3518EV200...OK!
ISP Mod init!
load viu.ko for Hi3518EV200...OK!
load vpss.ko ....OK!
load rc.ko for Hi3518EV200...OK!
load venc.ko for Hi3518EV200...OK!
load chnl.ko for Hi3518EV200...OK!
load h264e.ko for Hi3518EV200...OK!
load jpege.ko for Hi3518EV200...OK!
load ive.ko for Hi3518EV200...OK!
==== Your input Sensor type is bt1120 ====
extern drv init OK
hi3516cv200_platform() Jun 22 2017 09:42:02 init OK!
Hisilicon Watchdog Timer: 0.01 initialized. default_margin=30 sec (nowayout= 0, nodeamon= 1)

Nie będę załączał całego bo ma jakieś 1700 linii. Generalnie na końcu prosiło o login i hasło. Hmmmm no nic. Za start takich urządzonek odpowiedzialny jest U-Boot (tutaj w wersji 2010.06). To wiedziałem, i w sumie na tym moja wiedza się kończyła. Znowu googlowanie. Restart urządzonka i trzymamy "spacje" (bootowanie przerwane). Mamy dostęp do shell-a. Komenda help wyświetla wszystkie dostępne polecenia u-boot -a. Kluczową komendą okazała się printenv. Wyświetla ona wszystkie zmienne środowiskowe. Najciekawszą dla mnie zmienną okazała się bootargs:

bootargs=mem=47M console=ttyAMA0,115200 root=/dev/mtdblock3 rootfstype=cramfs mtdparts=hi_sfc:256K(uboot),64K(env),1920K(kernel),1536K(rootfs),11904K(usr),512K(mnt),128K(logo),64K(cfg)

Pierwsza myśl jaka mi przyszła do głowy, a jakby tak przerwać ładowanie systemów plików zaraz za usr. Komendą setenv zmodyfikowałem zmienną tak aby nie ładowała pozostałych FS-ów : 512K(mnt),128K(logo),64K(cfg). Na końcu saveenv aby zapisać zmiany. Aby nie restartować urządzenia wykorzystałem dane botowania ze zmiennej bootcmd:

hisilicon # setenv bootargs mem=47M console=ttyAMA0,115200 root=/dev/mtdblock3 rootfstype=cramfs mtdparts=hi_sfc:256K(uboot),64K(env),1920K(kernel),1536K(rootfs),11904K(usr)
hisilicon # saveenv
Saving Environment to SPI Flash...
Erasing SPI flash, offset 0x00040000 size 64K ...done
Writing to SPI flash, offset 0x00040000 size 64K ...done
hisilicon # sf probe 0;sf read 0x82000000 0x50000 0x1e0000;bootm 0x82000000
16384 KiB hi_fmc at 0:0 is now current device

## Booting kernel from Legacy Image at 82000000 ...
   Image Name:   Linux-3.4.35
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1941232 Bytes = 1.9 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Loading Kernel Image ... OK
OK
...
...
...
/bin/sh: -l: not found
/bin/sh: exec: line 1: /usr/sbin/telnetd: not found
Auto login as root ...
Jan  1 00:00:18 login[871]: root login on 'ttyS000'
Welcome to HiLinux.
-sh: nfsroot: not found
~ #

Bingo :), mam dostęp do shell-a i to jeszcze jako root (#). Pierwsze co to wy-listowałem katalog /etc/ głownie w poszukiwaniu pliku passwd. Zobaczmy co w środku:`

 /etc # cat passwd
root:$1$RYIwEiRA$6EsyjpEtqze8yGdO9qcuR0:0:0::/root:/bin/sh

Szybkie przerzucenie pliczku na desktop-a. Do akcji wkroczył "John the Ripper". W miedzyczasie jak leciał "łamacz haseł", postanowiłem przywrócić orginalne agrumenty bootowania. Chciałem się upewnić, że nie zepsułem za drogiego wideodomofonu. W niespełna 25 minut hasło root-a zostało złamane: john-the-ripper Teraz tylko wystarczyło się zalogować za pomocą telnet-a do urządzenia, w końcu mamy użytkownika i hasło: root - qv2008:

Teraz na spokojnie można się przyjżeć sprzetowi:

  1. CPU : RM926EJ-S [41069265] revision 5 (ARMv5TEJ)
  2. SOC : hi3518ev200 (teraz wiemy z jakim układem mamy doczynienia)
  3. RAM : Ustawione na poziomie 47 MB

Przeszukując czeluści internetu dowiadujemy się, że układ hi3518 jest bardzo popularny (Masę różnych producentów wykorzystuje go do swoich kamer). Produkowany jest przez chińską firmę Hislicon. Na Aliexpress możemy zakupić kamerkę opartą o ten układ już za 20$.