Digamos ... apenas por diversão .. eu tenho 2 x 3 pacotes de tenda mw6 para cobrir grandes áreas (dentro de casa e ao ar livre). Eu tinha três dos meus MW6 retroxumidos com Ethernet (na verdade, são os adaptadores de ponte PLC).
Na configuração "padrão", ele funciona bem, no entanto, eu já tinha um bom roteador OpenWrt e vários dispositivos/serviços configurados. Por Defaul, o MW6 funciona no modo DHCP, cria 192.168.5.x Subnet e coloca todos lá. Mas isso 1) traz camada NAT extra, 2) quebra meus serviços.
Por isso, decidi trocá -lo para o modo Bridge , no qual, de acordo com o manual, ele desligará todos os seus serviços de rede e apenas atuará como uma ponte.
Desde o primeiro olhar, ele funcionou, mas então eu percebi que alguns dos meus dispositivos erram eritos e depois entendi que o cubo "principal" executa seu próprio Luna Park com blackjack e prostitutas Servidor DHCP. Não há absolutamente nenhuma página da Web Administratoin, apenas um aplicativo de telefone. Não vejo maneiras de desativá -lo a partir daí.
O NMAP diz que o servidor DHCP está em execução e intercepta todos os clientes WiFi e fornece endereços IP de seu pool. E escusado será dizer que esses endereços estão errados, não o que eu preciso. Google, encontrou seu apoio - o mesmo problema, no entanto, a pessoa diz que dhcp authoritative='1' no roteador principal do OpenWrt funciona para ele, mas nunca funcionou para mim.
Então eu comecei a investigação - como posso desativar o servidor DHCP.
Poucas portas abertas no cubo. Nada parece Telnet ou SSH desde o início, no entanto, depois que eu me conectei ao UART - notei que o Telnetd está iniciando quando você segura o botão de redefinição por 3 segundos (6 segundos trazem de volta as configurações padrão).
PORT STATE SERVICE
23/tcp open telnet <--- opened only after you hold Reset for 3 seconds
5500/tcp open hotline
9000/tcp open cslistener
O servidor DHCP está em alta
sudo nmap -sU -p 67 --script=dhcp-discover 192.168.5.1
Starting Nmap 7.60 ( https://nmap.org ) at 2019-07-18 20:04 MSK
Nmap scan report for _gateway (192.168.5.1)
Host is up (0.0027s latency).
PORT STATE SERVICE
67/udp open dhcps
| dhcp-discover:
| DHCP Message Type: DHCPACK
| Server Identifier: 192.168.5.1
| IP Address Lease Time: 23h30m42s
| Subnet Mask: 255.255.255.0
| Broadcast Address: 192.168.5.255
| Router: 192.168.5.1
| Domain Name Server: 192.168.5.1
|_ Domain Name: tendawifi.com
MAC Address: 04:95:E6:1A:96:E0 (Tenda Technology,Ltd.Dongguan branch)
Nmap done: 1 IP address (1 host up) scanned in 0.75 seconds
PORT STATE SERVICE
1723/tcp closed pptp
Exame mais detalhado do firmware necessário para entender o que é aberto e quando.
Eu tentei raiz/admin/suporte/usuário com admin/senha/user/1234/12345678 senhas e outras .. não, não está funcionando.
Abrir o cubo é muito direto. Fora do soquete interessante - UART e SOIC -8 SPI Flash. Chip principal fechado por Radiator - Realtek RTL8197F

115200 8N1. A partir do pino 1 (mais próximo de SPI Flash): VCC, RX, TX, GND.
Bohong BH25Q64 SPI Flash, 8MB. Ficha de dados
O firmware não está disponível na web. O aplicativo de telefone procura isso na tenda nuvem e download. Meus cubos têm firmware mais recente, portanto, não conseguem farejar a rede, onde é necessário novo. Só posso dizer que este aplicativo tem seu próprio protocolo de comunicação com a Tenda Cloud.
Infelizmente, o Chip Clamp não funcionou, ele alimenta o dispositivo inteiro e começa a se comunicar com o chip. Dessoldou completamente. Não se esqueça da fita Capton. 
Não estou lendo flash chips todos os dias e não possuo um dispositivo de programação especial para isso. No entanto, encontrei o dispositivo FTDI FT2232H, que usei como depurador Openocd JTAG para ESP32. Este chip tem modo SPI e pode funcionar como mestre. O pinot é retirado da folha de dados.
| Porta FT2232H | Função | Pino com chip flash |
|---|---|---|
| Adbus0 | Sck | 6 |
| Adbus1 | Mosi | 5 |
| Adbus2 | Miso | 2 |
| Adbus3 | Cs | 1 |
Outros pinos de lascas flash 4 - GND, 8 - VCC 3.3V, 3 e 7 vão para o VCC.

$ flashrom -p ft2232_spi:type=2232H,port=A
E traz apenas tristeza ...
flashrom v0.9.9-r1954 on Linux 4.18.0-25-generic (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Calibrating delay loop... OK.
Found Generic flash chip "unknown SPI chip (RDID)" (0 kB, SPI) on ft2232_spi.
===
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE
The test status of this chip may have been updated in the latest development
version of flashrom. If you are running the latest development version,
please email a report to [email protected] if any of the above operations
work correctly for you with this flash chip. Please include the flashrom log
file for all operations you tested (see the man page for details), and mention
which mainboard or programmer you tested in the subject line.
Thanks for your help!
No operations were specified.
Olhou em volta e encontrou o site SkProj com o Sketch e .Net App (em russo), que funcionou bem para eu ler o chinês chinês.
Eu usei a placa NODEMCU ESP8266, pois é 3,3V e não queria pensar na conversão de 5V <> 3V no nível.
IMPORTANTE : O chip SPI deve estar conectado ao HSPI PINS GPIO12-GPIO14 conforme documentação oficial.
serprog para Arduinos que trabalham com flashrom , mas não consegui encontrar rapidamente sua porta para ESP8266 
Para facilitar o piscar, acabei de comprar chips WinBond W25Q64FV. Eles funcionam corretamente com flashrom e eu não preciso executar o Windows para flash chip. Eu escrevi o flash dump para novo chip com
flashrom -p ft2232_spi:type=2232H,port=A -w image.bin
O tenda de inicialização detectou novo chip flash e começou normalmente.
A corrida reta de Binwalk oferece muitas descobertas regulares.
binwalk all.bin
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
35096 0x8918 CRC32 polynomial table, little endian
36192 0x8D60 gzip compressed data, maximum compression, from Unix, last modified: 2018-04-20 02:17:42
206872 0x32818 LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 6890804 bytes
2261010 0x228012 Squashfs filesystem, little endian, version 4.0, compression:xz, size: 3071844 bytes, 378 inodes, blocksize: 131072 bytes, created: 1902-05-30 15:13:04
6160384 0x5E0000 JFFS2 filesystem, little endian
No entanto, com a esperança de poder colar tudo de volta juntos, dividi a imagem flash em 9 arquivos de acordo com os blocos MTD no bootlog com dd
flash vendor: BOHONG
m25p80 spi0.0: BH25Q64 (8192 Kbytes) (55000000 Hz)
m25p80 spi0.0: change speed to 55000000Hz, div 2
Kernel code size:0x1f8012
9 rtkxxpart partitions found on MTD device m25p80
Creating 9 MTD partitions on "m25p80":
0x000000000000-0x000000800000 : "ALL"
0x000000000000-0x000000020000 : "Bootloader"
0x000000020000-0x000000030000 : "CFG"
0x000000030000-0x0000005c0000 : "KernelFS"
0x000000228012-0x0000005c0000 : "RootFS"
0x0000005c0000-0x0000005d0000 : "CFM"
0x0000005d0000-0x0000005e0000 : "CFM_BACKUP"
0x0000005e0000-0x0000007f0000 : "LOG"
0x0000007f0000-0x000000800000 : "ENV"
Não está claro para mim por que KernelFS e RootFS se cruzam de acordo com a tabela MTD.
Basta unsquashfs para descompactar o sistema de arquivos. É baseado em BusyBox.
gato /etc/passwd
root:$1$nalENqL8$jnRFwb1x5S.ygN.3nwTbG1:0:0:root:/:/bin/sh
gato /etc/shadow
root:$1$OVhtCyFa$7tISyKW1KGssHAQj1vI3i1:14319::::::
gato /etc/inittab
::sysinit:/etc_ro/init.d/rcS
ttyS0::respawn:/sbin/sulogin
::ctrlaltdel:/bin/umount -a -r
::shutdown:/usr/sbin/usb led_off
A primeira tentativa foi muito ingênua: vamos atualizar /etc/inittab e colocá -lo de volta.
ttyS0::respawn:/sbin/sulogin para ttyS0::respawn:/bin/login -f root
Atualizou o arquivo, os arquivos empacotados para o SQUSHFS de volta - ooops, é maior do que era. Compressão examinada - era XZ originalmente, mas mksquashfs usavam o LZMA por padrão. Alterado para XZ, agora é o mesmo tamanho e se encaixa no rootfs mtd. Arquivo newrootfs acolchoado com FF até atingir o tamanho da partição MTD original. Combinou todos os arquivos de volta em um arquivo de imagem, escrito para Flash, inicializando ...
Booting...
init_ram
00000202 M init ddr ok
DRAM Type: DDR2
DRAM frequency: 533MHz
DRAM Size: 128MB
JEDEC id EF4017, EXT id 0x0000
found w25q64
flash vendor: Winbond
w25q64, size=8MB, erasesize=64KB, max_speed_hz=29000000Hz
auto_mode=0 addr_width=3 erase_opcode=0x000000d8
=>CPU Wake-up interrupt happen! GISR=89000004
---Realtek RTL8197F boot code at 2018.04.20-10:17+0800 v3.4.11B.9 (999MHz)
Mac addr:04-95-e6-1a-96-e0
lan_wan_isolation Initing...
config: lan port mask is 0x000000f7
config: wan port mask is 0x000000e8
lan_wan_isolation Initing has been completed.
lan_wan_isolation Initing...
config: lan port mask is 0x000000f7
config: wan port mask is 0x000000e8
lan_wan_isolation Initing has been completed.
wait for upgrage
port[0] link:down
port[1] link:down
port[2] link:down
port[3] link:down
port[4] link:down
irq:0x00008080
rootfs checksum error at 00228012!
<RealTek>
Como eu poderia esquecer o CRC ... passei duas horas tentando descobrir a maneira correta de calcular o CRC - encontrei RSDK, tentei entender a criação de imagens ... demais para o meu cérebro por enquanto.
Vamos tentar outra coisa.
De acordo com o log de inicialização, há um processo netctrl que começa mais cedo e altera a senha da raiz.
argv[0] = netctrl
netctrl
prod_change_root_passwd(83)
Então, vamos fazer da maneira mais difícil. Tente desmontar e reverter o código. Ai. Nunca vi Mips Asm ...
Olhando através dos arquivos encontrados, muitos deles estão usando prod_change_root_passwd , netctrl o usa e se parece com a própria função definida em /lib/libcommonprod.so .
Aberto /bin/netctrl na IDA. Função aberta main . Ele limpa os buffers primeiro e depois lê o parâmetro sys.role da configuração e depende disso acomoda ou chama função externa prod_change_root_passwd sem parâmetros.

Open /lib/libcommonprod.so . Função aberta prod_change_root_passw . Também limpa os buffers primeiro e depois lê alguns parâmetros da configuração e chamadas Encode64() com valor wl2g.ssid0.wpapsk_psk ou TD_WLAN1_SSID0_PWD .
E então apenas define a senha raiz via linha de comando (echo %s;sleep 1;echo %s) | passwd root -a s> /dev/null

Pronto!
Base calculada64 da minha senha padrão do adesivo, conectado via serial ...
Normal startupGive root password for system maintenance
(or type Control-D for normal startup):
System Maintenance Mode
~ #
~ # uname -a
Linux NOVA-xxxxxxxxxxxx 3.10.90 #4 Mon Jul 2 10:57:35 CST 2018 mips GNU/Linux
Basicamente, nada de interessante para ver aqui ainda. Nenhum usuário, exceto a raiz, está registrado no sistema.
~ # cat /proc/cpuinfo
system type : RTL8197F
machine : Unknown
processor : 0
cpu model : MIPS 24Kc V8.5
BogoMIPS : 666.41
wait instruction : yes
microsecond timers : yes
tlb_entries : 64
extra interrupt vector : yes
hardware watchpoint : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
isa : mips1 mips2 mips32r2
ASEs implemented : mips16
shadow register sets : 4
kscratch registers : 0
core : 1
VCED exceptions : not available
VCEI exceptions : not available
~ # ls -l /sys/class/gpio/
total 0
--w------- 1 root root 16384 Jan 1 1970 export
lrwxrwxrwx 1 root root 0 Jan 1 1970 gpio18 -> ../../devices/virtual/gpio/gpio18
lrwxrwxrwx 1 root root 0 Jan 1 1970 gpio19 -> ../../devices/virtual/gpio/gpio19
lrwxrwxrwx 1 root root 0 Jan 1 1970 gpio58 -> ../../devices/virtual/gpio/gpio58
lrwxrwxrwx 1 root root 0 Jan 1 1970 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
--w------- 1 root root 16384 Jan 1 1970 unexport
~ # ls -l /sys/devices/platform/
total 0
drwxr-xr-x 2 root root 0 Jul 18 21:12 alarmtimer
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_8367r_i2c_pin.1
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_8367r_i2c_pin.2
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_8367r_reset_pin.0
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_btn.0
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_led.0
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_led.1
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_led.2
drwxr-xr-x 3 root root 0 Jan 1 1970 serial8250
drwxr-xr-x 3 root root 0 Jan 1 1970 spi-sheipa.0
-rw-r--r-- 1 root root 16384 Jul 18 21:12 uevent
E aqui estão os processos em execução
~ # ps
PID USER TIME COMMAND
1 root 0:01 init
2 root 0:00 [kthreadd]
3 root 0:40 [ksoftirqd/0]
4 root 0:00 [kworker/0:0]
5 root 0:00 [kworker/0:0H]
6 root 0:01 [kworker/u2:0]
7 root 0:00 [khelper]
8 root 0:00 [kworker/u2:1]
75 root 0:00 [writeback]
78 root 0:00 [bioset]
79 root 0:00 [crypto]
81 root 0:00 [kblockd]
84 root 0:01 [spi0]
102 root 0:00 [kworker/0:1]
106 root 0:00 [kswapd0]
154 root 0:00 [fsnotify_mark]
708 root 0:00 [mtdblock0]
713 root 0:00 [mtdblock1]
718 root 0:00 [mtdblock2]
723 root 0:00 [mtdblock3]
728 root 0:00 [mtdblock4]
733 root 0:00 [mtdblock5]
738 root 0:00 [mtdblock6]
743 root 0:00 [mtdblock7]
748 root 0:00 [mtdblock8]
802 root 0:00 [deferwq]
860 root 0:03 klogd -n
862 root 0:00 monitor
863 root 1:55 sh /usr/bin/ugw_watchdog.sh
869 root 0:00 syslogd -f /var/etc/syslog.conf -s 50
914 root 0:15 cfmd
1030 root 0:00 [jffs2_gcd_mtd7]
1032 root 0:11 timer
1033 root 0:00 logserver
1034 root 0:14 netctrl
1069 root 0:01 device_list
1071 root 3:20 sh /usr/bin/mesh_op.sh
1530 root 0:10 pann
1531 root 0:00 gpio_ctrl
1532 root 0:00 mesh_status_check
1534 root 0:19 network_check
1570 root 0:00 redis-server /etc_ro/redis.conf
1571 root 0:01 cmdsrv -l tcp://0.0.0.0:12598 -R tcp://127.0.0.1:6379
1572 root 0:00 [kworker/0:1H]
1573 root 0:05 confsrv
1599 root 0:01 dhcps -C /etc/dhcps.conf -l /etc/dhcps.leases -x /etc/dhc
1931 root 0:00 ucloud -l 4
1962 root 0:00 sntp 1 28800 43200
2370 root 0:00 ftd -br br0 -w wlan0 wlan1 -pid /var/run/ft.pid -c /tmp/f
2375 root 0:00 pathsel -i wlan-msh -P -t 9
2387 root 0:00 multiWAN
2488 root 0:00 dhcpcd_wan1 -c /etc/wan1.ini -m 1 eth1 -h NOVA-0495e61a96
2567 root 0:00 dnrd -t 3 -M 600 --cache=off -b -R /etc/dnrd -r 3 -s 192.
2955 root 0:00 miniupnpd -f /etc/miniupnpd.config -w
2991 root 0:00 igmpproxy
10388 root 0:00 -sh
12125 root 0:00 sleep 5
12155 root 0:00 sleep 1
12156 root 0:00 ps
Tenho acesso de raiz ao New Tenda MW6, que me deixa feliz, pois odeio ter caixas pretas.
A senha raiz é apenas a senha do WiFi atual, codificada com base64.
(Graças a @crees para concluir a pesquisa do DHCP. Testado no MW5, mas possui software semelhante)
O utilitário cfm pode ser descoberto nos scripts em /usr/sbin e é usado para manipular os parâmetros que persistem nas reinicializações (você pode inspecionar a loja diretamente com cat /dev/mtd5 ).
~ # cfm get ^dhcps
dhcps.Staticip1=
dhcps.Staticnum=0
dhcps.apmode.list1=1;br1;192.168.1.31;192.168.1.254;192.168.1.1;255.255.255.0;1440;192.168.1.66;192.168.1.70;host
dhcps.apmode.list2=1;br1;192.168.1.2;192.168.1.30;192.168.1.1;255.255.255.0;1440;192.168.1.66;192.168.1.70;dev
dhcps.en=1
dhcps.list1=1;br0;192.168.1.31;192.168.1.254;192.168.1.1;255.255.255.0;1440;192.168.1.1;;host
dhcps.list2=1;br0;192.168.1.2;192.168.1.30;192.168.1.1;255.255.255.0;1440;192.168.1.1;;dev
dhcps.listnum=2
dhcps.static.list1=1 14:DA:E9:38:EC:40 192.168.1.70
dhcps.static.listnum=1
Geralmente, você precisará configurar primeiro o encaminhamento de porta, caso contrário a interface do usuário pode não reconhecer seu dispositivo.
Para dhcps.listnum , se você o definir como 0, ele não escreve um /etc/dhcps.conf na reinicialização, desativando assim o DHCPS.
~ # cfm set dhcps.listnum 0
Isso persistirá nas reinicializações e pode ser facilmente desfeito, alterando o DHCPS.Listnum de volta ao seu valor original, e uma redefinição de fábrica também o reverterá.
Você tem apenas 8 regras de encaminhamento de porta no aplicativo, o que é bastante limitador. A configuração de um DMZ funciona (ou você também pode mexer com as regras de encaminhamento usando o CFM- as regras do VirtualSer parecem bastante diretas.
~ # cfm set wan1.dmzip ip.address.here
~ # cfm set wan1.dmzen 1
~ # reboot
Parece que muitas lógicas de negócios são feitas em C/C ++ e compiladas (vs fazendo muitos scripts). Outra complicação é não sobreposição FS, todo o R/O montado, exceto para /dev/mtdblock7 on /tmp/log/crash type jffs2 (rw,relatime) - as configurações são armazenadas diretamente em /dev/mtd5 e manipuladas usando cfm .
Isso foi divertido.